A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PostgresSQL Optimização de Interrogações Francisco Santos.

Apresentações semelhantes


Apresentação em tema: "PostgresSQL Optimização de Interrogações Francisco Santos."— Transcrição da apresentação:

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/


Carregar ppt "PostgresSQL Optimização de Interrogações Francisco Santos."

Apresentações semelhantes


Anúncios Google