Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouVictorio Peralta Rijo Alterado mais de 9 anos atrás
1
PostgresSQL Optimização de Interrogações Francisco Santos
2
Agenda Introdução Processamento Interrogações Query Tree Reescrita de Interrogações Optimização do Plano Modelo de Custo Bibliografia
3
Introdução O que é o PostgresSQL? É um sistema de gestão de base de dados, com suporte para o modelo de dados objecto-relacional. Surgiu como evolução do SGBD Postgres, desenvolvido pelo Dep. Eng. Inf. da Universidade da California, em Berkley. Este projecto foi apresentado, pela primeira vez, na conferência ACM SIGMOD de 1988. É extensível, permitindo que o utilizador defina: Tipos de dados Funções Operadores Funções de Agregação Novos tipos de índices
4
Processamento Interrogações Análise Léxica, Sintáctica Análise Semântica Reescrita Interrogações Optimização Plano Execução Plano
5
Processamento Interrogações Análise Léxica, Sintáctica Análise Semântica Reescrita Interrogações Optimização Plano Execução Plano Análise léxica: leitura sequencial dos caracteres que constituem a interrogação, separação dos caracteres em palavras e o reconhecimento dos vocábulos representados por cada palavra (ex.: cláusulas SELECT, FROM, nomes de tabelas, colunas, …). Análise sintáctica: agrupamento dos vocábulos, verificando se formam uma frase sintacticamente correcta, isto é, composta de acordo com as regras sintácticas da linguagem (ex.: formulação completa de uma interrogação). Resultado: árvore de derivação. Análise léxica: leitura sequencial dos caracteres que constituem a interrogação, separação dos caracteres em palavras e o reconhecimento dos vocábulos representados por cada palavra (ex.: cláusulas SELECT, FROM, nomes de tabelas, colunas, …). Análise sintáctica: agrupamento dos vocábulos, verificando se formam uma frase sintacticamente correcta, isto é, composta de acordo com as regras sintácticas da linguagem (ex.: formulação completa de uma interrogação). Resultado: árvore de derivação. Árvore derivação
6
Processamento Interrogações Análise Léxica, Sintáctica Análise Semântica Reescrita Interrogações Optimização Plano Execução Plano Análise semântica: verificar se os nomes alternativos (aliases) das tabelas (inclui vistas) e colunas correspondem a objectos existentes na BD, verificar se os operadores são aplicados aos operandos do tipo adequado. Resultado: árvore da interrogação (sintáctica- e semanticamente correcta). Análise semântica: verificar se os nomes alternativos (aliases) das tabelas (inclui vistas) e colunas correspondem a objectos existentes na BD, verificar se os operadores são aplicados aos operandos do tipo adequado. Resultado: árvore da interrogação (sintáctica- e semanticamente correcta). Árvore derivação Árvore interrogação
7
Processamento Interrogações Análise Léxica, Sintáctica Análise Semântica Reescrita Interrogações Optimização Plano Execução Plano Reescrita interrogações: aplicação das regras definidas pelos utilizadores, para as operações: UPDATE, INSERT, DELETE; as operações anteriores também podem utilizar operações SELECT. Subsequentemente, todas as regras relacionadas com operações SELECT são aplicadas. Resultado: árvore da interrogação Reescrita interrogações: aplicação das regras definidas pelos utilizadores, para as operações: UPDATE, INSERT, DELETE; as operações anteriores também podem utilizar operações SELECT. Subsequentemente, todas as regras relacionadas com operações SELECT são aplicadas. Resultado: árvore da interrogação Árvore derivação Árvore interrogação
8
Processamento Interrogações Análise Léxica, Sintáctica Análise Semântica Reescrita Interrogações Optimização Plano Execução Plano Árvore derivação Árvore interrogação Optimização Plano: geração do método de obtenção dos registos para satisfazer a interrogação; geração de baixo para cima (i.e. parte da sub- interrogação interior para a exterior); escolha do melhor plano é feita com base no custo (inclui CPU e I/O); duas formas de determinar a melhor ordem de junção: algoritmo padrão (Sistema R), algoritmo genético. Resultado: plano de menor custo Optimização Plano: geração do método de obtenção dos registos para satisfazer a interrogação; geração de baixo para cima (i.e. parte da sub- interrogação interior para a exterior); escolha do melhor plano é feita com base no custo (inclui CPU e I/O); duas formas de determinar a melhor ordem de junção: algoritmo padrão (Sistema R), algoritmo genético. Resultado: plano de menor custo Plano
9
Árvore da Interrogação Exemplo: alunos( aid:string, nome:string, idade:integer, email:string, media:real ) inscricoes( aid:string, cid:string, nota:integer ) aid FK Alunos Q: “Quais são os alunos: aid e nome, cuja nota no TFC é superior à sua média de curso?” SELECT Q1.aid, Q1.nome FROM alunos Q1 WHERE Q1.aid IN ( SELECT Q3.aid FROM inscricoes Q3 WHERE Q3.nota > Q1.media AND Q3.cid = ‘TFC’ )
10
Árvore da Interrogação Tipo da operação: SELECT, INSERT, UPDATE ou DELETE Lista das tabelas: Na operação SELECT, representa todas as tabelas da cláusula FROM Tabelas são referenciadas por um identificador numérico Tabela do resultado: Nas operações INSERT, UPDATE e DELETE, representa a tabela onde vai ser colocado o resultado Este campo não é usado na operação SELECT Lista das colunas: Na operação SELECT: colunas a partir das quais é feita a projecção Na operação INSERT: expressões contidas na cláusula VALUES Na operação UPDATE: descreve as novas linhas que substituem as existentes (SET col = expr) Na operação DELETE: não é usada uma vez que esta operação não produz resultados Expressão de qualificação: Corresponde à cláusula WHERE de uma operação Árvore da junção: Mostra a estrutura da cláusula FROM
11
Reescrita de Interrogações Os utilizadores podem definir que regras devem ser usadas consoante a operação que for aplicada a uma tabela: CREATE RULE nome_regra AS ON { SELECT | INSERT | UPDATE | DELETE } TO tabela [ WHERE condicao_aplicacao ] DO [ INSTEAD ] { NOTHING | comando | ( comando; comando … )} As regras de reescrita são aplicadas entre a fase da análise semântica e da optimização do plano.
12
Reescrita de Interrogações As vistas sobre as tabelas base são definidas através do sistema de regras. CREATE VIEW v_alunos_cadeiras (aid, nome, cid) AS SELECT a.aid, a.nome, i.cid FROM alunos a, inscricoes i WHERE a.aid = i.aid; Esta operação é desdobrada em duas operações: CREATE TABLE v_alunos_cadeiras (aid, nome, cid); CREATE RULE _RETURN AS ON SELECT TO v_alunos_cadeiras DO INSTEAD SELECT a.aid, a.nome, i.cid FROM alunos a, inscricoes i WHERE a.aid = i.aid;
13
Reescrita de Interrogações SELECT aid,nome,cid FROM v_alunos_cadeiras; Resultado da aplicação da regra de reescrita: SELECT aid,nome,cid FROM ( SELECT a.aid, a.nome, i.cid FROM alunos a, inscricoes i WHERE a.aid = i.aid ) v_alunos_cadeiras; A redefinição da interrogação aninhada através de uma só operação SELECT é feita durante a fase da optimização do plano
14
Optimização do Plano Cada bloco da interrogação é processado isoladamente (bloco = sub-interrogação) Geração do plano é feita de baixo para cima: Optimizador parte da sub-interrogação interior para a exterior Permite aplicar optimizações durante a geração, ex.: transformar sub-interrogação numa junção Escolha do melhor plano é feita com base no custo, inclui custo de processamento (CPU) e transferência de páginas de disco para memória (I/O) Duas formas de determinar a melhor ordem de junção: algoritmo padrão (Sistema R): programação dinâmica algoritmo genético: usado quando o número de tabelas na cláusula FROM é muito elevado (>= 12)
15
Optimização do Plano Alg. Programação Dinâmica (clássico): Para cada par de sub-conjuntos complementares de ‘S’: ‘S1’ e ‘S - S1’, onde ‘S’ é o conjunto das relações a juntar: Encontrar o melhor plano para juntar as tabelas contidas em ‘S1’, designado P1, e o melhor plano para juntar as tabelas contidas no conjunto complementar, designado P2. A = Melhor algoritmo para juntar P1 e P2. Custo = Custo(P1) + Custo(P2) + Custo(A) Se o novo custo for inferior ao anteriormente calculado para ‘S’, substituir o plano por: “P1, P2, juntar(P1,P2,A)”
16
Optimização do Plano Para uma junção n-ária, o sub-plano esquerdo é uma junção (n-1) ária e o direito é um acesso a uma tabela Os acessos podem ser feitos de forma sequencial ou através de índices primários ou secundários As junções são feitas através de um dos seguintes algoritmos: nested- loops-join, merge-join, hash-join r1r2 r3 No PostgresSQL: são considerados apenas os planos recursivos à esquerda (left-deep):
17
Optimização do Plano O alg. nested-loops-join é o mais simples para juntar duas tabelas. Pode ser dispendioso se não existir índice sobre os atributos da junção na tabela interior. O merge-sort-join é melhor que o método anterior quando não existe índice sobre a tabela interior. Pode ser usado quando existe uma cláusula da forma ‘col1 OPR col2’ onde ‘col1 tabela1’ e ‘col2 tabela2’ O custo de ordenação inicial das relações pode ser eliminado se existirem índices sobre os atributos da junção em cada tabela Uma segunda alt. quando não existirem índices é o hash-join: é aplicada uma função de hash para a relação interior, os atributos da junção da tabela exterior são usados para pesquisar o índice hash.
18
Modelo de Custo NumPaginas: número de páginas de uma tabela NumRegistos: número de registos de uma tabela IRegistos: número de registos no índice F: factor de selectividade combinado para todas as condições de selecção
19
Modelo de Custo C ext : custo para aceder à tabela exterior C int : custo para aceder à tabela interior C ord_ext : custo para ordenar a tabela exterior (igual a zero, caso já esteja ordenada) C ord_int : custo para ordenar a tabela interior (igual a zero, caso já esteja ordenada) C const_hash : custo para construir o índice hash sobre a tabela interior C hash : custo de uma pesquisa através do índice hash N ext : tamanho da tabela exterior
20
Bibliografia [Post05a] – The PostgresSQL Global Development Group “PostgresSQL 8.0.0 Documentation”, 2005 [SKS06] – Silberschatz, Korth, Sudarshan, “Database System Concepts”, Cap. 13, 14, 26, McGraw-Hill, 5 th edition, 2006 [Fong97] – Zelaine Fong, “The Design and Implementation of the Postgres Query Optimizer”, 1997 [Post05b] – The PostgresSQL Global Development Group, “PostgresSQL Online Documentation”, 2005, www.postgresql.org/docs/ www.postgresql.org/docs/
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.