Você está na página 1de 39

Tecnologias de Bancos de Dados

Processamento e Otimizao de consultas


Professor: Tadeu dos Reis Faria

Set/2008

Referncias Bibliogrficas
NAVATHE, Shamkant B., ELSMARI, Ramez. Sistemas de Banco de Dados. 4 ed. Addinson Wesley Publishing, 2005. Captulo 15

Introduo
Existe nos SGBDR um mdulo conhecido como otimizador de consultas A expresso otimizao de consultas, embora seja frequentemente utilizada, na verdade imprpria, pois em alguns casos a estratgia encontrada no garantidamente a melhor possvel (tima) Encontrar a estratgia tima consumiria muito tempo, e exigiria o uso de informao dinmica sobre o contedo e organizao em disco das tabelas Em vez de otimizao de consultas, deveramos dizer planejamento de execuo de consultas

Processamento e Otimizao de Consulta


Passos para execuo de uma consulta:

Exame (scanner) e validao da consulta (parser).


Anlise lxica (scanner): identifica os itens lxicos da linguagem palavras-chave do SQL, nomes de atributos e nomes de relacionamentos. Anlise sinttica (parser): verifica a sintaxe para consulta para determinar se ela est de acordo com as regras sintticas da linguagem de consulta.

Otimizador de consultas
Representao interna da consulta utilizando rvore/grafo Planejamento de uma estratgia para recuperao dos dados, a partir dos arquivos do anco de dados

Gerador de cdigo da consulta


Gera o cdigo que executa o plano de consulta

Em algumas linguagens de consulta, a estratgia est definida na maneira em que o programador implementa a consulta Em SQL, que uma linguagem declarativa, apenas os resultados desejados so especificados (especifica o que fazer e no como fazer) Portanto, a otimizao de consultas necessria em SGBD relacionais, baseados em SQL

Processamento de consulta

Figura 15.1

Passos tpicos durante a execuo de uma consulta de alto nvel.

Processamento e Otimizao de Consulta


Passos do otimizador de consultas:

Traduo de consultas SQL em lgebra relacional Otimizao usando o resultado da traduo


Estratgias de otimizao

Cada SGBD adota estratgias especficas para otimizar as consultas. As mais comuns so: Utilizao de regras heursticas (regras). Estimativa de custo de execuo (escolher o plano de menor custo ). O ORACLE pode usar regras ou custo. O DB2 da IBM usa somente custo.

Traduo de Consultas SQL para lgebra Relacional (AR)


Uma consulta SQL traduzida para uma expresso equivalente de lgebra relacional.

Consultas SQL so decompostas em blocos Cada bloco transformado em uma expresso da AR Os blocos so otimizados internamente e atravs de decises sobre a ordem de execuo dos blocos Um bloco contm um nico comando SELECT-FROMWHERE, incluindo clusulas GROUP BY e HAVING, se houver

A expresso em lgebra traduzida em uma rvore de consulta Essa rvore otimizada

Traduo de Consultas SQL para lgebra Relacional (AR)


Exemplo:
SELECT nome FROM empregado WHERE salario > ( SELECT MAX(salario) FROM empregado WHERE numdep = 5)

decomposio

SELECT MAX(salario) FROM empregado WHERE numdep = 5

SELECT nome FROM empregado WHERE salario > c

Obs.: c=result.query anterior

Algoritmos para Ordenao Externa


A ordenao um dos principais recursos para otimizao de consultas

Usada sempre que aparece ORDER BY Usada para implementar algoritmos SORT-MERGE para processar junes Usada na eliminao de tuplas duplicadas (clusula DISTINCT, ou em operaes de conjuntos)

A ordenao pode ser evitada se houver um ndice Ordenao externa usada para grandes tabelas Estratgia usual: SORT-MERGE

Dividir a tabela em pedaos que caibam na memria Ordenar cada pedao e salvar em disco Mesclar os pedaos ( la MergeSort)

Algoritmos para Select()

Algoritmos para Select()


Mtodos de busca para selees simples:

S1. Busca linear (fora bruta): recuperar todos os registros no arquivo, testando se os valores atendem ou no condio de seleo S2. Busca binria: executada sobre o atributo que determina a ordenao do arquivo (ex.: OP1, se CPF for a chave de ordenao do arquivo) S3: Uso de ndice primrio (ou chave de hashing): executada sobre o atributo que determina a indexao do arquivo. Recupera no mximo um registro (ex.: OP1, se CPF for a chave de indexao)

Algoritmos para Select()


Mtodos de busca para selees simples:

S4. Uso de ndice primrio para recuperar mltiplos registros: executado se a comparao no for de igualdade mas for sobre um atributo chave de um ndice primrio (ex.: NUMDEP em OP2) S5. Uso de ndice em cluster para recuperar mltiplos registros: executado se a comparao no for de igualdade e for sobre atributo no-chave que possui ndice em cluster (ex.: NUD=5 em OP3) S6. Uso de ndice secundrio (B-tree, B+-tree) sobre comparao de igualdade: usado para recuperar um nico registro se o atributo de indexao for chave (valores nicos) ou para recuperar mltiplos registros se o atributo de indexao no for chave

OBS:

O mtodo S1 o nico que no pressupe a existncia de ndice. Os mtodos S4 e S6 podem ser utilizados em consultas por faixas (range queries). Exemplo: 1000 <= SALARIO <= 1500.

Algoritmos para Select()


Mtodos de busca para selees mltiplas:

S7. Seleo conjuntiva usando ndice individual: se um atributo envolvido em uma nica condio simples em uma clusula de juno conjuntiva possuir um caminho de acesso que permita usar S2 a S6, selecionar com base nesse atributo e checar o atendimento s demais condies em cada registro recuperado S8. Seleo conjuntiva usando ndice composto: se dois ou mais atributos envolvidos em comparaes de igualdade na condio de seleo conjuntiva, e um ndice composto existir para esses atributos, selecionar com base nesses atributos e checar o atendimento s demais condies em cada registro recuperado (ex.: OP5, com ndice sobre CPFE e PNO)

Algoritmos para Select()


Mtodos de busca para selees mltiplas:

S9. Seleo conjuntiva pela interseo de apontadores de registros: se ndices secundrios ou outros caminhos de acesso estiverem disponveis para mais de um dos atributos envolvidos na condio de seleo conjuntiva, cada ndice pode ser usado para recuperar um conjunto de apontadores para registros que satisfazem parcialmente condio. A interseo entre esses conjuntos indica os registros que devem ser recuperados

Algoritmos para JOIN


Operao de juno: uma das operaes mais caras para o processamento de consultas (eqijuno e juno natural). Casos tpicos:

Mtodos:

J1. Juno usando loop aninhado (fora bruta): para cada registro r de R, recuperar todo registro s de S e testar se os dois registros atendem a condio de juno J2. Juno usando loop simples: requer estrutura de acesso para recuperar os registros correspondentes na outra tabela, portanto um dos atributos da condio de juno precisa ser a chave de um ndice J3. Juno sort-merge: se os registros de R e de S estiverem fisicamente ordenados pelos atributos A e B, realizar a juno pela varredura simultnea dos dois arquivos (este o mtodo mais eficiente possvel

Algoritmos para Projeo


Operao de projeo e operaes de conjunto:

Projeo: implementao simples (exceto quando existe a clusula DISTINCT e a chave no faz parte da lista de atributos). Operaes de conjunto: utilizam variaes da tcnica de sortmerge.

Algoritmos para Agregao


Operaes de agregao:

Sem o GROUP BY: pode utilizar ndices, caso o campo seja indexado. Com o GROUP BY: utilizao da tcnica anterior a cada grupo separadamente (mais complexo). Se existir um ndice cluster para o atributo de agrupamento ser mais fcil. Os operadores de agregao podem ser implementados usando uma varredura na tabela ou o percurso de um ndice, se disponvel Se existir ndice, o resultado de MIN e MAX pode ser obtido diretamente O resultado de COUNT pode ser obtido no ndice, sem a necessidade de acessar os registros SUM e AVG podem ser muito simplificados se forem sobre um valor indexado

Utilizao de heursticas na otimizao de consultas


Usada se o otimizador do SGBD usar regras So regras aplicadas para melhorar o desempenho de uma consulta Seqncia bsica de eventos:

O parser da consulta gera uma representao interna inicial A otimizao realizada de acordo com regras heursticas Um plano de execuo construdo, de modo a gerar grupos de operaes com base nos arquivos e ndices envolvidos O plano repassado ao processador de runtime para escalonamento

heursticas na otimizao de consultas


Idia bsica: aplicar operaes de seleo e projeo antes de aplicar junes ou outras operaes binrias.

Justificativa: seleo e projeo reduzem o tamanho do arquivo de entrada, enquanto a juno tende a aumentar este tamanho.

rvore de consulta: estrutura em rvore que corresponde a uma expresso da lgebra relacional. Para uma mesma consulta, pode haver vrias rvores de consulta. Em vez das regras heursticas, clculos baseados em um modelo de custos podem ser usados. Esse modelos sero explicados mais adiante.

rvores e grafos de consulta


rvore de consulta: corresponde a uma expresso em AR Relaes (tabelas usadas) de entrada so representadas em folhas Operaes so representadas em ns internos A execuo consiste em executar as operaes assim que os operandos correspondentes estiverem disponveis, e substituir o n interno com o resultado (uma relao) O processo termina quando o n raiz executado

rvores e grafos de consulta


Grafos de consulta: relaes so indicadas em ns, valores constantes so indicados em ns com linhas duplas, e condies de seleo e juno so indicadas nos arcos Grafos de consulta no indicam a ordem de execuo, ao contrrio das rvores Existe apenas um grafo correspondente a cada consulta rvores de consulta so preferidas para a otimizao, pois o processamento precisa ter sua ordem definida

rvores e grafos de consulta


Exemplo: SELECT p.pnumber, p.dnum, e.lname, e.address, e.bdate from project p, department d, employee e WHERE p.dnum = d.dnumber AND d.ssnmgr = e.ssn AND p.location=stafford

Figura 15.4

Duas rvores de consulta para a consulta Q2. (a) rvore de consulta correspondente expresso da lgebra relacional para Q2. (b) rvore de consulta inicial (cannica) para a consulta SQL Q2. (c) Grfico de consulta para Q2.

Otimizao heurstica de rvores de consulta


Exemplo : seja o seguinte comando SELECT unome FROM empregado, trabalha_em, projeto WHERE pnome= aquarius AND pnumero=nrp and essn=ssn and dtanasc > 31-12-1957 Transformaes a partir da rvore cannica usam regras de equivalncia entre expresses da AR para melhorar progressivamente esse resultado Duas selees (PNOME e DATANASC) so aplicadas antes dos produtos cartesianos, para reduzir o nmero de tuplas resultantes

Figura 15.5

Passos na converso de uma rvore de consulta durante a otimizao heurstica. (a) rvore de consulta inicial (cannica) para a consulta SQL Q. (b) Transferncia das operaes SELECT para baixo na rvore de consulta. (continua)

Otimizao heurstica de rvores de consulta


As posies de EMPREGADO e PROJETO so trocadas para que a condio de seleo mais restritiva (PNOME=...) seja executada primeiro

Produtos cartesianos seguidos de seleo so substitudos por JOINs

Figura 15.5

Passos na converso de uma rvore de consulta durante a otimizao heurstica. (c) Aplicao, em primeiro lugar, da operao SELECT mais restritiva. (d) Substituindo CARTESIAN PRODUCT e SELECT por operaes JOIN. (continua)

Otimizao heurstica de rvores de consulta

Manter a cada passo apenas os atributos necessrios deslocar as operaes PROJECT para baixo

Figura 15.5

Passos na converso de uma rvore de consulta durante a otimizao heurstica. (e) Transferncia das operas PROJECT para baixo na rvore de consulta.

Otimizao heurstica de rvores de consulta


As transformaes do exemplo so possveis apenas se forem comprovadamente equivalentes, de modo a no alterar o resultado final Ou seja, a cada passo as rvores de consulta so equivalentes Existem regras gerais de transformao que garantem a equivalncia

Otimizao heurstica de rvores de consulta


Regras gerais de transformao

Otimizao heurstica de rvores de consulta


Regras gerais de transformao (cont)

Otimizao heurstica de rvores de consulta


Regras gerais de transformao (cont)

Otimizao heurstica de rvores de consulta


Passos de um algoritmo de otimizao heurstica
1. Usando R1, quebrar operaes SELECT com condies conjuntivas em uma cascata de SELECTs 2. Usando R2, R4, R6, R10, mover cada SELECT para baixo na rvore tanto quanto possvel (dependendo dos atributos envolvidos na condio de seleo) 3. Usando R5, R9 quanto comutatividade e associatividade, rearranjar os ns folha de acordo com o seguinte:
3.1 Posicionar os ns folha com condies mais restritivas para execuo mais cedo (produzem menos tuplas, tm o menor tamanho absoluto, ou tm menor seletividade) 3.2 Garantir que a ordenao dos ns folha no provoque a execuo de um produto cartesiano (p.ex., as condies mais restritivas no tm um JOIN em comum, e produzem mais de uma tupla cada)

Utilizao de estimativas de custos para otimizao de consultas


As regras heursticas no so suficientes em todos os casos Existem situaes de otimizao que podem ser melhor resolvidas se existir informao sobre os volumes de dados envolvidos Para que isso funcione corretamente, as estimativas de custos tm que ser realistas e justas O custo do processamento das alternativas tambm no pode ser excessivo Estimativas de custos so mais empregadas em consultas compiladas antecipadamente, enquanto para consultas interativas a escolha de uma alternativa pode afetar o tempo de resposta

Utilizao de estimativas de custos para otimizao de consultas


A otimizao de consultas baseada em custos usa tcnicas de otimizao propriamente ditas para encontrar a soluo tima em um espao de solues, minimizando o valor de uma funo objetivo (funo de custo) As funes objetivo so aproximadas, e portanto nem quando a soluo tima do problema de custos encontrado podemos garantir que se trata da soluo tima da estratgia para a consulta

Utilizao de estimativas de custos para otimizao de consultas


Componentes de custo para execuo de consultas:
1. Custo de acesso para armazenamento secundrio: custo para pesquisar, ler e gravar blocos de dados. 2. Custo de armazenamento: custo de armazenar arquivos intermedirios gerados por uma estratgia de execuo. 3. Custo de computao: custo de operaes realizadas em memria ou nos buffers de dados. 4. Custo de utilizao de memria: custo referente ao nmero de buffers de memria necessrios. 5. Custo de comunicao: custo de mover a consulta e os seus resultados do banco de dados at o local onde a consulta se originou.

Utilizao de estimativas de custos para otimizao de consultas


Uso de informaes do catlogo (exemplos de informaes)

Nmero de registros (tuplas) (r) Tamanho mdio do registro (R) Nmero de blocos de disco (b) Fator de bloco (nmero de registros por bloco) (fb) Nmero de nveis dos ndices multinvel (x) Nmero de valores distintos de um atributo (d) Seletividade (sl): frao dos registros que satisfaz a uma condio de igualdade sobre o atributo (ex.: em 1000 registros, a seletividade de um atributo CPF 0,001; a de um atributo sexo 0,50)
Atributo chave: sl = 1/r Atributo no chave: sl = d/r

Cardinalidade da seleo (s): nmero mdio de registros que satisfaz a uma condio de igualdade sobre o atributo (s = sl * r)

Essas informaes so aproximadas, dificilmente estaro totalmente atualizadas

Otimizao de consultas
Observaes:

Para grandes bancos de dados, deve-se dar nfase na reduo do custo de acesso ao armazenamento secundrio (nmero de transferncias de blocos entre disco e memria principal). Para pequenos bancos de dados, que podem ser armazenados em memria, a nfase deve ser na reduo do custo de clculo. Para bancos de dados distribudos, o custo de comunicao pode ser o mais importante. Pode usar Mtodos baseados em heursticas ou Mtodos baseados em custo. Possibilidade do desenvolvedor de aplicao especificar dicas para o otimizador. Mtodos baseados em custo. Possibilidade do DBA ou desenvolvedor de aplicao especificar dicas para o otimizador.

Otimizao de consulta no Oracle:


Otimizao de consulta no DB2:


Dicas praticas para Otimizao de consultas

Algumas questes sobre Performance no ambiente do SGBD


O que performance afinal ?

Desempenho ? Tempo de execuo ? Tempo de resposta ? Como algum mede Performance ? Tempo de resposta ? Intuio ? Reclamaes ? Ligaes telefnicas ?

CPU BUSY ?

Algumas questes sobre Performance no ambiente do SGBD


O que um bom tempo de resposta

Tempo de resposta mdio de 5 segundos ou menos em 90 % das vezes ? Para "x" transaes por segundo, um tempo de resposta mdio de 3 segundos ? "x" mensagens por dia, hora, minuto, segundo ? Do 1 SQL at o COMMIT ? De fila do comando ? O que o usurio final v ?

Como o tempo de resposta medido?


Algumas questes sobre Performance no ambiente do SGBD


O que monitorar nas transaes?

Tempo de Input Queue ? Tempo de Output Queue Projeto do programa ? Nmero de pontos de COMMIT no programa ? Como o tempo de resposta medido? Processamento do programa de aplicaes ? Projeto do programa ? Nmero e o tipo de CALLs SQL ? Projeto do data base ? Projeto das tabelas ? ndices ? Disponibilidade de buffers ?

O que deve ser monitorado no SGBD ?

Você também pode gostar