Professional Documents
Culture Documents
2007
Mdulo VI: Processamento e
Otimizao de Consultas
(Aulas 1-5)
Clodis Boscarioli
Agenda:
O Processador de Consultas:
Conceitos Principais.
Algoritmos usados para implementar operaes
algbricas;
Otimizao Baseada em Custo;
Otimizao Heurstica;
Comentrios sobre otimizao no PostgreSQL.
Usurios Programadores Usurios Administra-
navegantes de aplicaes sofisticados dores de BD Usurios
Viso Geral
Interface com Programas de Consultas Esquema de
de um SGBD aplicaes aplicaes (queries) Banco de Dados
Gerenciador Gerenciador
Gerenciador de transaes de buffer
de memria
Gerenciador
de arquivos
Armazenamento
ndices Dados
em disco estatsticos
BD
Arquivos de Dicionrio
dados de dados
Processamento de Consultas
Analisador Expresso
Consulta sinttico algbrica
e tradutor relacional
Otimizador
Sada da Plano de
Avaliador
consulta execuo
Dados Metadados
Passos no Processamento de Consultas
Analisador Expresso
Consulta sinttico algbrica
e tradutor relacional
Otimizador
Anlise lxica
- clusulasSada
SQL da e nomes vlidos. Plano de
Avaliador
execuo
Anlise sinttica
consulta
- validao da gramtica.
Anlise semntica
- nomes usados de acordo com a estrutura
do esquema. Dados Metadados
Converso para uma rvore algbrica
da consulta
Passos no Processamento de Consultas
Analisador Expresso
Consulta sinttico algbrica
e tradutor relacional
Otimizador
Sada da Plano de
Avaliador
consulta execuo
Dados Metadados
Passos no Processamento de Consultas
Analisador Expresso
Consulta sinttico algbrica
e tradutor relacional
FOCO: Otimizador
OTIMIZADOR DE
CONSULTA
Sada da Plano de
Avaliador
consulta execuo
Dados Metadados
Exemplo Introdutrio
Suponha a consulta:
select saldo
from conta
where saldo < 2500;
conta
Exemplo:
SC(A,r) = 1 se A um atributo-chave de r;
Considere a consulta:
nome_agncia = Perryridge (conta)
Exemplo de Seleo por Busca Binria
Como a relao tem 10.000 tuplas, e cada bloco mantm 20 tuplas, o
nmero de blocos bconta = 500 (10.000/20);
Fases:
Fase de ordenao;
Fase de fuso.
Inicializao:
i 1;
j b; (tamanho do arquivo em blocos) Se no buffer cabem 3 blocos,
e o arquivo possui 11 blocos,
k n0; (tamanho do buffer em blocos)
ser preciso 4 iteraes da
m (j/k) (maior inteiro) fase de ordenao. As 3
primeiras ordenaro 9 blocos
e a ltima ordenar 2 blocos.
Fase de ordenao
i 1;
p logk-1m ; (p o nmero de passagens da fase de fuso)
j m; p=2
52 subarquivos
13 subarquivos Nmero de subarquivos / tamanho do buffer -1 bloco
04 arquivos
01 arquivo Por que -1?
Porque um bloco de buffer fica reservado
para armazenar um bloco resultado da fuso.
Sort-merge Externo (Korth)
i = 0;
repeat
leia M blocos da relao, ou o resto da relao,
aquilo que for menor;
ordene a parte da relao que est na memria;
escreva os dados ordenados no arquivo temporrio
Ri;
i = i + 1;
until o fim da relao
Sort-merge Externo
2. Faz-se o merge nos arquivos temporrios. Suponha, por enquanto, que
o nmero total de temporrios, N, seja menor do que M, de forma que se
consiga alocar um frame de pgina para um bloco de cada arquivo
temporrio e h espao para manter uma pgina de resultado.
leia um bloco de cada um dos N arquivos Ri, para uma pgina de buffer
na memria;
repeat
Fase de fuso:
ncliente = 10.000
fcliente = 25, o que implica bcliente = 10.000/25 = 400
ndepositante = 5.000
fdepositante = 50, o que implica bdepositante = 5.000/50 = 100
V(nome_cliente, depositante) = 2.500, o que implica que, em mdia,
cada cliente tem duas contas
ns / V(A,s)
nr * ns / V(A, s)
tuplas em r |X| s.
Estimativa do Tamanho das Junes
r: relao externa
s: relao interna
tr.ts : tupla obtida concatenando os valores dos atributos das tuplas tr e
ts
Juno de Lao Aninhado
Este algoritmo no requer ndices e pode ser usado seja qual for a
condio de juno.
begin
ts := tupla para qual ps aponta;
Ss := {ts};
configure ps para apontar para a prxima tupla de s;
acabou := false;
Inicializar i 1 , j 1;
Enquanto (i <= n) e (j <= m) faa
{
se Ri[A] > Sj[B] se o valor do primeiro A maior que o valor
ento j j + 1 do primeiro B, avance em B;
Inicializar i 1; j 1;
Enquanto (i <= n) e (j <= m) faa
{
se R(i) > S(j) ento
{
output S(j) em T;
j j + 1;
}
se R(i) < S(j) ento
{
output R(i) em T;
i i + 1;
}
else
j j + 1; (*R(i)=S(j), portanto, pular uma das tuplas duplicatas*)
}
TRS
Ordenar as tuplas de R e S utilizando os mesmos e nicos atributos de ordenao;
Inicializar i 1; j 1;
Enquanto (i <= n) e (j <= m) faa
{
se R(i) > S(j) ento
{
j j + 1;
}
else se R(i) < S(j) ento
{
i i + 1;
}
else
{
output R(i) em T; (*R(i)=S(j), portanto, fazemos o output da tupla*)
i i + 1; j j + 1;
}
}
TR-S
Ordenar as tuplas de R e S utilizando os mesmos e nicos atributos de ordenao;
Inicializar i 1; j 1;
Enquanto (i <= n) e (j <= m) faa
{
se R(i) > S(j) ento
{
j j + 1;
}
else se R(i) < S(j) ento
{
output R(i) em T; (*R(i) no tem S(j) correspondente)
i i + 1;
}
else
i i + 1; j + 1
}
Merge-juno - Consideraes
Em relao ao algoritmo apresentado por (Korth): O algoritmo exige
que a relao auxiliar caiba na memria principal. Modificaes no
algoritmo devem ser feitas caso essa exigncia no possa ser
atendida.
r1 (r2 r3)
r2 (r1 r3)
r3 (r1 r2)
r1 (r3 r2)
r2 (r3 r1)
r3 (r2 r1)
(r2 r3) r1
(r1 r3) r2
(r1 r2) r3
(r3 r2) r1
(r3 r1) r2
(r2 r1) r3
Junes Complexas
Equivalncia de Expresses;
Regras de Equivalncia;
Exemplos de Transformaes;
Ordenamento de Junes.
Otimizao Algbrica
Objetivo do passo de transformao
Entrada: rvore da consulta inicial;
Sada: rvore da consulta otimizada (pode
manter a mesma rvore).
Base:
Regras de equivalncia algbrica
Devem ser conhecidas pelo otimizador para que
possam ser geradas transformaes vlidas.
Algoritmo de otimizao algbrica
Indica a ordem de aplicao das regras e de outros
processamentos de otimizao.
Equivalncia de Expresses
Considerando as tabelas a seguir e suas
instncias, encontre os nomes de todos os
clientes que possuem uma conta em qualquer
agncia localizada no Brooklyn.
nome_cliente nmero_conta
Johnson A-101 nome_agncia nmero_conta saldo
agncia |X|
agncia conta depositante
conta depositante
Assuma que:
: denota predicados;
L: denotas listas de atributos;
E: denota expresses da lgebra relacional.
Regras de Equivalncia Algbrica
1 ( 2 (E)) = 2 ( 1 (E))
E1 |X| E2 = E2 |X| E1
- Por X entenda-se: X ou X ou ou ou .
- A operao no associativa.
Regras de Equivalncia Algbrica
(R X 1 S) X 2 3 T R X 1 3 (S X 2 T)
Regras de Equivalncia Algbrica
10. Comutatividade de Seleo e Operaes de Conjunto
()
c (R S) (c (R)) (c (S))
- Por entenda-se: ou ou
(a) c (R X S) R X = c S ou
(b) c (R X S) R c
S ou
(c) R X = c S R c
S
Exemplos de Transformaes
Exemplo 1:
nome_cliente ( cidade_agncia = Brooklyn (agncia |X| (conta |X| depositante)))
nome_cliente (( cidade_agncia = Brooklyn (agncia)) |X| (conta |X| depositante))
Exemplo 2:
nome_cliente ( cidade_agncia = Brooklyn saldo > 1000 (agncia |X| (conta |X| depositante)))
nome_cliente ( cidade_agncia = Brooklyn saldo > 1000 ((agncia |X| conta) |X| depositante))
nome_cliente ( cidade_agncia = Brooklyn saldo > 1000 (agncia |X| conta)) |X| depositante)
Entretanto, conta |X| depositante provavelmente uma relao grande, j que contm
uma tupla para cada conta. Em contrapartida,
Para confirmar, observe que, como o banco tem um grande nmero de agncias
amplamente distribudas, provvel que apenas uma frao pequena dos clientes do
banco tenha conta em agncias localizadas no Brooklyn. Assim, a expresso precedente
resulta em uma tupla para cada conta mantida em uma agncia localizada no Brooklyn.
Ento, a relao temporria que precisa ser armazenada menor que a que se obteria
fazendo primeiro conta |X| depositante.
Otimizao Heurstica
Passo1:
A regra 1, ao ser usada, quebra quaisquer
operaes SELECT com condies conjuntivas em
uma cascata de operaes SELECT, permitindo
um maior grau de liberdade para transferir
operaes SELECT para ramos diferentes e
abaixo na rvore.
Passo2:
Usando as regras 2, 4, 6, e 10 relativas
comutatividade do SELECT com outras operaes,
move cada operao SELECT o mais longe para
baixo na rvores, que forem permitido pelos
atributos envolvidos na condio de seleo.
Algoritmo de Otimizao Algbrica
Passo 3:
Usando as regras 5 e 9, relativas comutatividade e
associatividade de operaes binrias, rearraja os
ns folhas da rvore utilizando o seguinte critrio:
Posiciona as relaes do n folha com operaes de
SELECT mais restritivas, de forma que elas possam ser
executadas o quanto antes.
Algoritmo de Otimizao Algbrica
Passo 4:
Usando a regra 12, combina uma operao de
PRODUTO CARTESIANO com uma operao
SELECT subseqente na rvore, gerando uma
operao JOIN se a condio representa uma
condio de juno.
Passo 5:
Usando as regras 3, 4, 7 e 11, relativas cascata de
PROJECT e comutao de PROJECT com outras
operaes, quebra e transfere as listas de atributos
de projeo para baixo na rvore.
Algoritmo de Otimizao Algbrica
Passo 6:
Identifica subrvores que representam grupos de
operaes que podem ser executadas por um nico
algoritmo (execues em pipeline).
select unome
from Empregado, Trabalha_Em, Projeto
where pnome = Aquarius and pnumero = pno and
essn = ssn and datanasc > 31-12-1957;
Exemplo:
|X| (hash-juno)
agncia conta
Interao de Tcnicas de Avaliao
Um modo de escolher um plano de avaliao para uma expresso de
consulta simplesmente escolher o algoritmo mais barato para avaliar
cada operao. E, olhando para os nveis da rvore, escolhe-se qualquer
ordenamento para a execuo das operaes, desde que as operaes
nas camadas mais baixas da rvore sejam executadas antes das
operaes nas camadas mais altas.
Recomendaes:
Para a maioria das instalaes executar o comando VACUUM
ANALYZE para todo o banco de dados, de vez em quando, em horrio
de pouca utilizao.
Quando for excluda a maioria dos registros de uma tabela, sugere-se a
execuo do comando VACUUM FULL. Contudo, este comando gera
um forte bloqueio nas tabelas em que executado.
Otimizao em PostgreSQL
Manuais do PostgreSQL.