Bancos de Dados II
Otimização de Consultas
Parte II
Lineu Antonio de Lima Santos
Estimando Estatísticas de
Resultados de Expressões
• O custo de uma operação depende do tamanho
e de outras estatísticas de suas entradas
• As estatísticas sobre relações e índices são
armazenadas no catálogo do SGBD
• Estatísticas não são muito precisas, pois são
baseadas em suposições que podem não ser
exatas
– A experiência nos mostra que mesmo assim os
planos com os menores custos estimados realmente
têm custos de execução reais que são os menores
ou perto disso
2
Informações Estatísticas para
Estimativa de Custo
• O Catálogo do SGBD armazena as seguintes
informações estatísticas
•
•
•
•
nr: número de tuplas em uma relação r.
br: número de blocos contendo tuplas de r.
lr: tamanho de uma tupla de r em bytes.
fr: fator de blocagem de r — ou seja, o número de tuplas de r
que cabem em um bloco.
• V(A, r): número de valores distintos que aparecem em r para
o atributo A; igual ao tamanho de ∏A(r).
• Se as tuplas de r forem armazenadas fisicamente juntas em
um arquivo, então:




n r 
br =
f r 
3
Informações Estatísticas para
Estimativa de Custo
• O catálogo do SGBD também guarda as
estatísticas sobre índices
– Alturas dos índices de árvore B+
– Número de páginas de folha de índices
• As estatísticas são atualizadas
periodicamente e não no momento da
atualização do estado do banco de dados
para evitar sobrecarga
– UPDATE STATISTICS no SQL Server
4
Estimativa de Tamanho da Seleção
• O tamanho do resultado de uma seleção
depende do predicado de seleção
• σA = a (r)
– Se considerarmos a distribuição uniforme de
valores o resultado da seleção pode ser
estimado como tendo
• nr/V(A,r) tuplas
5
Estimativa de Tamanho da Seleção
• σA <= v (r)
– Se o valor de (v) estiver disponível no momento da
estimativa de custo, uma estimativa mais precisa
poderá ser feita
• Supondo os valores mínimos e máximos de A armazenados
no catálogo (min(A,r) e max(A,r))
• Supondo uma distribuição uniforme de valores
• O número de registros estimado é
nr .
v − min( A, r )
max( A, r ) − min( A, r )
– Se o valor de (v) não estiver disponível
• nr/2
6
Estimativa de Tamanho da Seleção
• A seletividade de uma condição θi é a probabilidade de que uma tupla
na relação r satisfaça θi . Se si é o número de tuplas que satisfazem
em r, a seletividade de θi é dada por si /nr.
• Conjunção: σθ1∧ θ2∧. . . ∧ θn (r). A estimativa para o número de tuplas no
resultado é:
s ∗ s2 ∗ . . . ∗ sn
nr ∗ 1
n rn
• Disjunção:σθ1∨ θ2 ∨. . . ∨ θn (r). Número estimado de tuplas:

s1
s2
sn 
n r ∗  1 − (1 −
) ∗ (1 −
) ∗ ... ∗ (1 −
) 
nr
nr
nr 

• Negação: σ¬θ(r). Número estimado de tuplas:
nr – tamanho(σθ(r))
7
Estimativa de Tamanho da Junção
• O produto Cartesiano r x s contém nr .ns tuplas; cada tupla
ocupa lr + ls bytes.
• Se R ∩ S = ∅, então r
s é o mesmo que r x s.
• Se R ∩ S é uma chave para R, então uma tupla de s se
juntará com no máximo uma tupla de r
• portanto, o número de tuplas em r
de tuplas em s.
s não é maior que o número
• Se R ∩ S em S é uma chave estrangeira em S referenciando
R, então o número de tuplas em r
s é exatamente o
mesmo que o número de tuplas em s.
• O caso para R ∩ S sendo uma chave estrangeira
referenciando S é simétrico.
8
Estimativa de Tamanho da Junção
• Se R ∩ S = {A} não é uma chave para R ou S.
• Se considerarmos que cada tupla t em R produz tuplas em R
número de tuplas em R
S é estimado em:
nr ∗ ns
V ( A, s )
S, o
Se o contrário for verdadeiro, a estimativa obtida será:
nr ∗ ns
V ( A, r )
A menor destas duas estimativas provavelmente é a mais precisa.
9
Plano de Avaliação
• Um plano de avaliação define exatamente qual algoritmo é
usado para cada operação, e como a execução das operações é
coordenada.
10
Escolha dos Planos de Avaliação
• Precisa considerar a interação das técnicas de avaliação quando
escolher planos de avaliação: a escolha do algoritmo mais barato
para cada operação independentemente pode não gerar o melhor
algoritmo geral. Por exemplo:
• junção merge pode ser mais dispendiosa que a junção de hash,
mas pode oferecer uma saída classificada que reduz o custo
para um nível de agregação externo.
• a junção de loop aninhado oferece oportunidade para pipelining
• Otimizadores de consulta práticos incorporam elementos das
duas técnicas gerais a seguir:
• Pesquisar todos os planos e escolher o melhor plano com base
no custo.
• Usar heurística para escolher um plano.
11
Otimização Baseada em Custo
• Considere encontrar a melhor ordem de junção para
r1 r2 ... rn
• Existem (2(n – 1))!/(n – 1)! ordens de junção
diferentes para a expressão acima. Com n = 7, o
número é 665280, com n = 10, o número é maior que
176 bilhões!
• Não é preciso gerar todas as ordens de junção.
Usando a programação dinâmica, a ordem de junção
de menor custo para qualquer subconjunto de {r1, r2,
... rn} é calculada apenas uma vez e armazenada
para uso futuro.
12
Otimização Heurística
• A otimização baseada em custo é dispendiosa, mesmo com a
programação dinâmica.
• Os sistemas podem usar heurísticas para reduzir o número
de escolhas que precisam ser feitas com base no custo.
• A otimização heurística transforma a árvore de consulta
usando um conjunto de regras que normalmente (mas não
em todos os casos) melhoram o desempenho da execução:
• Realizar a seleção cedo (reduz o número de tuplas)
• Realizar a projeção cedo (reduz o número de atributo)
• Realizar as operações de seleção e junção mais restritivas antes de outras
operações semelhantes.
• Alguns sistemas utilizam apenas heurísticas, outros combinam heurísticas
com otimização parcial baseada em custo.
13
Download

supondo uma distribuição