O documento discute a otimização de consultas no Oracle utilizando estimativas de custo e seletividade. Ele explica os componentes do custo de execução de uma consulta, as informações de catálogo utilizadas para estimar custos, e exemplos de funções de custo para SELECTs e JOINs.
2. Equipe e Conteúdo
Benedito Rodrigo
Denilson Sousa
Kamargo Leal
Francisco Nathanael
2
➔ 15.8 - UTILIZAÇÃO DE SELETIVIDADE E ESTIMATIVA DE CUSTO NA OTIMIZAÇÃO
DE CONSULTAS
◆ 15.8.1 - Componentes do Custo para a Execução de um Consulta
◆ 15.8.2 - Informações de Catálogo Utilizadas nas Funções de Custo
◆ 15.8.3 - Exemplos de Funções de Custo para SELECT
◆ 15.8.4 - Componentes do Custo para a Execução de um Consulta
◆ 15.8.5 - Consultas de Múltiplas Relações e Ordem de Junções
◆ 15.8.6 - Exemplo para Ilustrar a Otimização de Consulta Baseada em
Custo
➔ 15.9 - VISÃO GERAL DA OTIMIZAÇÃO DE CONSULTAS NO ORACLE
➔ 15.10 - VISÃO GERAL DA OTIMIZAÇÃO DE CONSULTAS NO ORACLE
3. Otimizador de Consultas
3
➔ Um otimizador de consultas não deve depender somente de
regras heurísticas;
➔ Ele deve estimar e comparar os custos da execução de uma
consulta usando diferentes estratégias de execução, e deve
escolher a estratégia com a menor estimativa de custo.
4. Otimizador de Consultas
4
Para essa abordagem funcionar, estimativas precisas de custo
são necessárias, de forma que diferentes estratégias sejam
comparadas de maneira correta e realista.
5. Otimizador de Consultas
5
Devemos limitar o número de estratégias de execução a ser
considerado; caso contrário, muito tempo será gasto fazendo as
estimativas de custo para as muitas estratégias de execução
possíveis.
6. Tipos de Consultas
6
➔ Consultas compiladas: A otimização é feita em tempo de
compilação e o código da estratégia de execução resultante é
armazenado e executado diretamente em tempo de execução.
➔ Consultas interpretadas: A otimização ocorre em tempo de
execução, uma otimização em escala completa pode diminuir a
velocidade do tempo de resposta.
7. Tipos de Consultas
7
Uma otimização mais elaborada é indicada para consultas
compiladas, enquanto uma otimização parcial, que consuma menos
tempo, funciona melhor para consultas interpretadas.
8. Otimização de consulta baseada no custo
8
As funções de custo utilizadas na otimização de consultas são
estimativas e não funções exatas de custo, de forma que a
otimização pode selecionar uma estratégia de execução de consulta
que não seja a estratégia ótima
9. Componentes do Custo
para a Execução de um
Consulta
O custo da execução de uma consulta inclui os
seguintes componentes:
9
10. Componentes do custo para a execução de uma Consulta
1. Custo de acesso ao armazenamento secundário - Esse é o custo
da busca, da leitura e da escrita de blocos de dados que residem em
armazenamento secundário, principalmente em discos.
2. Custo de armazenamento: Esse é o custo de armazenamento de
quaisquer arquivos temporários que sejam gerados por uma
estratégia de execução para a consulta.
10
11. Componentes do custo para a execução de uma Consulta
3. Custo de computação: Esse é o custo da realização, na memória,
das operações sobre os buffers de dados durante a execução da
consulta.
4. Custo do uso de memória: Esse é o custo referente ao número de
buffers de memória necessários durante a execução da consulta.
5. Custo de comunicação: Esse é o custo do transporte da consulta
e de seus resultados de um site de banco de dados para o site ou
terminal onde a consulta se originou.
11
12. Componentes do custo para a execução de uma Consulta
Para grandes bancos de dados, a ênfase principal é na minimização
do custo de acesso ao armazenamento secundário.
Para bancos de dados menores, a ênfase é a minimização do custo
de computação.
Em bancos de dados distribuídos, o custo de comunicação também
deve ser minimizado.
12
13. Componentes do custo para a execução de uma Consulta
É difícil incluir todos esses componentes de custo em uma
função de custo (ponderada) por causa da dificuldade em atribuir
pesos adequados aos componentes do custo. Essa é a razão pela
qual algumas funções de custo consideram apenas um único fator
— acesso a disco.
13
15. Catálogo do Sistema
Um catálogo do sistema é um grupo de tabelas e exibições que
incorporam detalhes vitais em relação a um banco de dados. Cada
banco de dados composto por um catálogo do sistema e as
informações no catálogo do sistema especificam a estrutura do
banco de dados.
15
16. Estimar Custos
Para estimar os custos de várias estratégias de execução,
devemos manter atualizadas quaisquer informações que sejam
necessárias para as funções de custo. Essas informações podem ser
armazenadas no catálogo do SGBD, onde são acessadas pelo
otimizador de consulta.
16
17. Estimar Custos - Parametros
17
◆ Primeiro, devemos saber o tamanho de cada arquivo.
◆ Para um arquivo cujos registros são todos de um mesmo tipo,
também podem ser necessários o número de registros (tuplas)
(r), o tamanho (médio) do registro (R) e o número de blocos (b)
(ou boas estimativas deles).
◆ O fator de divisão em blocos (b/r) para o arquivo também pode
ser necessário.
18. Estimar Custos - Parametros
18
◆ Um outro parâmetro importante é o número de valores
distintos (d) de um atributo e sua seletividade (si), que é uma
fração dos registros que satisfazem uma condição de igualdade
baseada no atributo.
Isso permite a estimativa da cardinalidade da seleção (s = si * r) de
um atributo, que é o número médio de registros que irão satisfazer
uma condição de seleção de igualdade baseada no atributo.
19. Estimar Custos - Parametros
19
Para um atributo-chave, d = r,si= 1/r e s = 1. Para um atributo
que não é chave, por meio da suposição de que os d valores
distintos estão distribuídos uniformemente entre os registros,
estimamos si = (1/d), portanto, s = (r/d).
20. Estimar Custos - Parametros
20
Informações como o número de níveis de índice são mantidas
facilmente porque elas não se alteram com muita freqüência.
Entretanto, outras informações podem se alterar freqüentemente;
por exemplo, o número de registros r de um arquivo se altera toda
vez que um registro é incluído ou excluído.
21. Estimar Custos - Parametros
21
O otimizador de consulta precisará de valores razoavelmente
próximos a esses parâmetros para uso na estimativa de custo das
várias estratégias de execução, mas não necessariamente de
valores exatamente atualizados até o último minuto.
23. Funções de Custo para SELECT
➔ Funções de Custo em função do número de transferência entre
a memória e o disco.
➔ Essas funções de estimativa de tempo ignoram o tempo de
processamento, o custo de armazenamento e outros fatores.
➔ Denotação de custo de Si = Csi
23
24. Funções de Custo para SELECT
S1 - Pesquisa Linear (algoritmo de força bruta): Recupera cada
registro no arquivo e testa se seus valores de atributo satisfazem a
condição de seleção.
S2 - Pesquisa Binária: Se a condição de seleção envolver uma
comparação de igualdade em um atributo chave no qual o arquivo é
ordenado, a pesquisa binária
S3a- Usando um índice primário: Se a condição de seleção envolver
uma comparação de igualdade em um atributo chave com um
índice primário.
24
25. Funções de Custo para SELECT
S3b- Usando uma chave hash: Se a condição de seleção envolve
uma comparação de igualdade em um atributo chave com uma
chave hash.
S4- Usando um índice primário para recuperar vários registros:
Se a condição de comparação for >,>=,< ou <= em um campo chave
com índice primário.
S5- Usando um índice de agrupamento para recuperar vários
registros: Se a condição de seleção envolve uma comparação de
igualdade em um atributo não chave com índice de agrupamento.
25
26. Funções de Custo para SELECT
S6- Usando um índice secundário (B+-tree) em uma comparação
de igualdade: Este método de pesquisa pode ser utilizado para
recuperar um único registro se o campo de índice for uma chave
(tiver valores únicos) ou para recuperar múltiplos registros se o
campo de índice não for uma chave.
S7- Seleção conjuntiva usando um índice individual: Se um
atributo envolvido em qualquer condição simples isolada na
condição de seleção conjuntiva tiver um caminho de acesso que
permita o uso de um dos métodos S2 a S6.
26
27. Funções de Custo para SELECT
S8 - Seleção conjuntiva usando um índice composto: Se dois ou
mais atributos estiverem envolvidos nas condições de igualdade na
condição de seleção conjuntiva e um índice composto existe nos
campos combinados.
27
29. Funções de Custo para SELECT
S3. Uso de um Índice Primário ou Chave Hash:
➔ Cs3 = x + 1; (índice primário)
➔ Cs3 = 1; (hashing estático/linear)
➔ Cs3 = 2; (hashing extensível)
S4. Uso de um Índice Ordenado para Múltiplos Registros:
➔ Cs4 = x + (b/2);
S5. Uso de um Índice Clustering para recuperar múltiplos
registros:
➔ Cs5 = x + [(s/bfr)];
29
30. Funções de Custo para SELECT
S6: Uso de um Índice Secundário (árvore-B):
➔ Cs6 = x + s; (pior caso)
➔ Cs6 = x + 1; (atributo-chave de indexação);
S7: Seleção Conjuntiva:
➔ S1;
➔ S2 e S6:
● Condição para recuperar registros;
● Verifica no buffer se os registros satisfazem as demais
condições de junção;
30
31. Funções de Custo para SELECT
S8: Seleção conjuntiva utilizando índice composto:
➔ S3;
➔ S5;
➔ S6;
● Dependendo do tipo de índice;
31
32. Exemplo:
Um armazém possui 3.000 registros, alocados em 600 blocos de
disco. Então,r= 3.000 , b=600 e bfr= 5. Considerando-se os
caminhos de acesso:
1 - Índice secundário sobre atributo chave COD_FORNEC com x=5 e
s=1;
2 - Índice secundário sobre atributo não chave UNIDADE com x=3 e
Bi1=4. Existem d=12 valores distintos para UNIDADE, então: s=(r/d) =
250
32
34. Custos
- Para pesquisa linear:
- Para OP1, Condição conjuntiva, custo dos componentes da
seleção, mais a pesquisa linear.
- Para OP2,
34
35. Funções de Custo para JOIN
Para se medir o custo da função JOIN devemos ter uma
estimativa do tamanho (número de tuplas) do arquivo que resulta
após a operação JOIN.
Pode-se aplicar às operações de JOIN e ter como resultante um
arquivo de junção resultante de um produto cartesiano. Se estas
duas operações são aplicadas ao mesmo arquivo de entrada, isso é
chamado de seletividade da junção (js).
35
40. SGBD Oracle
A otimização de uma consulta constitui em determinar a
melhor estratégia para executá-la no banco de dados. Motivado por
esta preocupação, os SGBDs atuais já trazem um conjunto grande
de facilidades que, em muitas vezes, automatizam o processo de
otimização.
40
41. SGBD Oracle
➔ Os administradores de banco de dados gastam atualmente
muito tempo na realização de monitoração e ajuste de
consultas SQL.
➔ Ter o conhecimento de uma metodologia padrão para análise de
problemas desse tipo vai auxiliar a utilizar melhor o tempo
dentre as atividades desempenhadas pelo profissional.
41
42. SGBD Oracle
➔ O otimizador determina a maneira mais eficiente de se rodar
um SQL. Para executar qualquer SQL o Oracle tem que derivar
um "plano de execução".
➔ O plano de execução de uma consulta é uma descrição de como
o Oracle irá implementar a recuperação dos dados para
satisfazer a um determinado SQL. Desde a versão 7 até a 9 o
Oracle possui dois otimizadores que serão descritos a seguir:
42
43. SGBD Oracle
O SGBD ORACLE fornece duas abordagens diferentes para a
otimização de consultas:
➔ Baseada em regras - O otimizador escolhe os planos de
execução baseando-se em operações classificadas
heuristicamente.
➔ Baseada em custos - O otimizador examina caminhos de
acesso alternativos e algoritmos de operadores, e escolhe o
plano de execução com menor estimativa de custo.
43
44. SGBD Oracle
O otimizador da ORACLE calcula este custo com base no uso
estimado dos recursos, tais como a necessidade de ENTRADA/SAÍDA,
de tempo de CPU e de memória.
➔ O objetivo da otimização baseada em custo na ORACLE é
minimizar o tempo decorrido para processar a consulta inteira.
44
45. SGBD Oracle
Uma funcionalidade interessante do otimizador de consultas da
ORACLE é a capacidade de um desenvolvedor de aplicações definir
dicas para o otimizador
45
46. Se existirem 10.000 empregados, então o otimizador estimaria que metade é masculina e metade
é feminina, supondo uma distribuição uniforme dos dados
46
PNOME MINICIAL UNOME SSN DATA
NASC
ENDEREÇO SEXO SALARIO SUPERSSN DNO
EMPREGADO
47. ➔ Se existir um índice secundário, ele muito provavelmente não
seria utilizado;
➔ Se o desenvolvedor da aplicação souber que existem apenas 100
empregados masculinos, uma dica poderia ser especificar que,
em uma consulta SQL, *, o índice associado fosse utilizado no
processamento da consulta
➔ *WHERE SEXO = ‘M’
47
49. Otimização Semântica
A Otimização Semântica é uma técnica que pode ser usada em
combinação com as técnicas discutidas anteriormente e usa
restrições especificadas no esquema do banco de Dados.
Ex.: atributos únicos e outras restrições mais complexas
Sendo o principal objetivo o de transformar uma consulta em uma
outra consulta que seja mais eficiente para ser executada.
49
51. Otimização Semântica
A aplicação dessa otimização pode economizar um tempo
considerável se a verificação da restrição puder ser feita
eficientemente.
Dessa forma, pesquisar pelas muitas restrições para encontrar
aquelas que são aplicáveis a uma determinada consulta e
que podem otimizá-la semanticamente também pode consumir
bastante tempo.
51
54. Exercícios
01 - Por que um otimizador de consultas não deve depender apenas de
regras heurísticas ?
02 - Quais são os dois principais tipos de consultas ?
03 - Quais são os componentes do custo para a execução das consulta ?
04 - Cite as informações de catálogos utilizadas nas funções de custo.
05 - O SGBD Oracle fornece duas abordagens diferentes para a
otimização de consultas, quais são?
54
55. Exercicios
06 - Descreva as duas abordagens citadas acima.
07 - O que é otimização semântica?
08 - A busca binária acessa aproximadamente CS2 = log2
b + [(s/bfr)] – 1
blocos de arquivo. Sabendo-se que, no caso, s = 1, o que acontece se a
condição de igualdade (condição da busca) for sobre um atributo único :
A. O acesso é reduzido a logb
B. O acesso é elevado a log2
b + 1
C. O acesso é reduzido a log2
b
D. O acesso é reduzido a logb
+ 1
E. Nada muda, já que s =155
56. Exercicios
09 - No que se refere às Funções de Custo para JOIN, o custo
representado por Cj2c
= bR
+ (|R| * (xB
+ 1)) + ((js * |R| * |S|) / bfrRS
)
refere-se a junção:
A. merge-sort
B. laço único / índice primário
C. laço único / índice secundário
D. laços aninhados
E. laço único / índice clustering
56
57. Exercicios
10 - Quais são as funções de custos existentes para estimativa de
Custos? (Apenas o nome)
57