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

Slides:



Advertisements
Apresentações semelhantes
O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Advertisements

Álgebra Relacional Marcelo Mendes Manaus
Banco de Dados Prof. Antonio.
Banco de Dados I Aula 20.
SQL Avançado Continuação
Evolução dos SGBD’s.
SQL Structured Query Language (continuação)
SQL Structured Query Language (continuação)
Data Warehouse Tuning O que é um Data Warehouse? Índices Bitmap
Linguagens relacionais
Optimização de Interrogações
Maurício Edgar Stivanello
Sistema Gerenciador de Banco de Dados SGBD
Otimização de Consultas em SQL Parte I - Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 19 Profa. Sandra de Amo Programa.
Gerenciamento de Banco de Dados
Otimização de Consultas em SQL Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 24 Profa. Sandra de Amo GBC053 – BCC
Operadores Especiais da SQL
Introdução à Engenharia da Computação
Oficina sobre banco de dados
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
Banco de Dados Objetos Relacionais
Banco de dados Profª Kelly Medeiros.
PostgreSQL.
Geração de Planos de Execução Planos para Consultas Aninhadas
Banco de Dados II Prof. Antônio Cordeiro.
SQL Álvaro Vinícius de Souza Coêlho
Gramáticas Livres de Contexto
Trabalho de Desenvolvimento Processamento/Optimização de Querys.
BANCO DE DADOS UNIVERSIDADE ESTADUAL DE SANTA CRUZ
Otimizador de consultas
Design Patterns / Acesso ao banco de dados (java.sql)
Tuning Lílian Simão Oliveira.
INTRODUÇÃO ÁS BASES DE DADOS
Otimização de Consultas em SQL Planos de Execução
sintonia de banco de dados
Algoritmos de Processamento e Otimização de Consultas
Desenvolvendo um script SQL
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC.
Conceitos Programas Programação Linguagens de Programação SQL.
Treinamento PHP Módulo 2 PHP Avançado Waelson Negreiros waelson.com.br “Está conosco o Senhor dos Exércitos”
Baseado no material do Professor Raul Paradeda
REVISÃO Comandos SQL - DML SELECT * FROM ?.
Tradução Dirigida por Sintaxe
Linguagem de Manipulação de Dados. 2 Conteúdos Introdução ao SQL Comando SELECT – Extracção de Dados  Pesquisas Simples  Restrições na pesquisa de dados.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
©Silberschatz, Korth and Sudarshan (modificado)9.1.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
Banco de Dados I I Comandos SQL
Linguagem SQL Prof. Juliano.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
AOBD 07/08 Mini-Projecto 2 Soluções. 1) Considere que existem três relações R1=(A,B,C), R2=(C,D) e R3=(D,E) com chaves primárias A, C e D, respectivamente.
Optimização - 1 Optimização de perguntas 1 Processamento de selecções 2 Processamento de junções 3 Manipulação algébrica.
Sumário 1 SQL Embutida 2 Processamento de Consultas
1 Structured Query Language (SQL) 4 SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.
1 Introdução à Manipulação de Dados SQL – Structured Query Language  Tabela = Relação  DDL – Data Definition Language  Sub-conjunto do SQL que suporta.
PostgreSQL Índices Nuno Campos N.º Nuno Campos - N.º Índice Introdução Tipos de Índices – B-Tree – R-Tree – Hash – GiST Classes de Operadores.
RDBMS Tuning Pedro da Silva. Indice 1. Schema Tuning 1.1. Vertical Partitioning 1.1. Vertical Partitioning 1.2. Tunnig Denormalization 1.2. Tunnig Denormalization.
Recuperação de Dados Banco de Dados Carina Farias
VBA – Visual Basic para Aplicativos
Linguagem de definição de dados - SQL
Folha de Cálculo Professor: Pedro Lopes Ano Lectivo 2010/2011.
SELECT Professor: Virgílio Fries Müller www. vfm.com.br
José Antônio da cunha IFRN Administração de Banco de Dados.
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Capítulo 5 Mais SQL: Consultas Complexas, Triggers e Views.
Transcrição da apresentação:

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

Agenda Introdução Processamento Interrogações Query Tree Reescrita de Interrogações Optimização do Plano Modelo de Custo Bibliografia

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  É extensível, permitindo que o utilizador defina: Tipos de dados Funções Operadores Funções de Agregação Novos tipos de índices

Processamento Interrogações Análise Léxica, Sintáctica Análise Semântica Reescrita Interrogações Optimização Plano Execução Plano

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

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

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

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

Árvore da Interrogação Exemplo: alunos( aid:string, nome:string, idade:integer, 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’ )

Á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

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.

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;

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

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)

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)”

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):

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.

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

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

Bibliografia [Post05a] – The PostgresSQL Global Development Group “PostgresSQL 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,