processamento e otimização de consultas
DESCRIPTION
O Processador de Consultas: Algoritmos usados para implementar operações algébricas; Otimização Baseada em Custo; Otimização Heurística; Comentários sobre otimização no PostgreSQL.TRANSCRIPT
-
Mdulo VI: Processamento e
Otimizao de Consultas
(Aulas 1-5)
Clodis Boscarioli
Banco de Dados I
2007
-
Agenda:
O Processador de Consultas:
Conceitos Principais.
Algoritmos usados para implementar operaes algbricas;
Otimizao Baseada em Custo;
Otimizao Heurstica;
Comentrios sobre otimizao no PostgreSQL.
-
Viso Geral de um SGBD
SGBD
Usurios
Dicionriode dados
Interface comaplicaes
Programas deaplicaes
Consultas(queries)
Esquema de Banco de Dados
Usuriosnavegantes
Programadoresde aplicaes
Usuriossofisticados
Administra-dores de BD
Processadorde consultas
Gerenciadorde memria
Gerenciadorde transaes
Gerenciador de buffer
Gerenciadorde arquivos
InterpretadorDDL
CompiladorDML
Pr-compiladorde comandosDML
Programas deaplicaes em cdigo objeto
Componentes de execuode consultas
Armazenamento
em disco ndices
Arquivos dedados
Dados estatsticos BD
-
Processar consultas envolve: Traduzir consultas expressas em linguagens de alto nvel (como SQL) em expresses que podem ser implementadas no nvel fsico do sistema de banco de dados (nvel de tabelas);
Otimizar a expresso destas consultas; Avaliar a base de dados de acordo com as diretrizes da consulta, para fornecer o resultado.
Processamento de Consultas
-
Processamento de Consultas
Consulta SQL
adequada para uso humano;
No adequada ao processamento pelo SGBD:
No descreve uma seqncia de passos (procedimento) a ser seguida;
No descreve uma estratgia eficiente para a implementao de cada passo no que tange o acesso em nvel fsico (arquivos do BD).
Cabe ao SGBD deve se preocupar com este processamento mdulo Processador de Consultas.
-
Mdulo Processador de Consultas
Objetivo: Otimizao do processamento de uma consulta
Traduo, transformao e gerao de uma estratgia (plano) de execuo;
Estratgia de acesso: Considera algoritmos predefinidos para implementao de passos do processamento e estimativas sobre os dados.
O esforo valido, pois quase sempre
Tx
-
Passos no Processamento de Consultas
ConsultaExpresso algbricarelacional
Plano de execuo
Sada daconsulta
Analisadorsintticoe tradutor
Avaliador
Otimizador
Dados Metadados
-
ConsultaExpresso algbricarelacional
Plano de execuo
Sada daconsulta
Analisadorsintticoe tradutor
Avaliador
Otimizador
Dados Metadados
Anlise lxica- clusulas SQL e nomes vlidos.
Anlise sinttica- validao da gramtica.
Anlise semntica- nomes usados de acordo com a estrutura
do esquema. Converso para uma rvore algbrica
da consulta
Passos no Processamento de Consultas
-
ConsultaExpresso algbricarelacional
Plano de execuo
Sada daconsulta
Analisadorsintticoe tradutor
Avaliador
Otimizador
Dados Metadados
Definio de uma rvore de consulta equivalente
- chega ao mesmo resultado- processa de forma mais eficiente
Fase chamada de Otimizao AlgbricaOtimizao Algbrica
Passos no Processamento de Consultas
-
ConsultaExpresso algbricarelacional
Plano de execuo
Sada daconsulta
Analisadorsintticoe tradutor
Avaliador
Otimizador
Dados Metadados
Anlise de alternativas de definio de
estratgias de acesso
- escolha de algoritmos para implementao de operaes- existncia de ndices- estimativas sobre os dados(tamanho de tabelas, seletividade, ...)
Passos no Processamento de Consultas
-
ConsultaExpresso algbricarelacional
Plano de execuo
Sada daconsulta
Analisadorsintticoe tradutor
Avaliador
Otimizador
Dados Metadados
FOCO:
OTIMIZADOR DE
CONSULTA
Passos no Processamento de Consultas
-
Exemplo Introdutrio
Suponha a consulta:select saldofrom contawhere saldo < 2500;
Esta pode ser traduzida nas duas expresses algbricas relacionais diferentes:
saldo < 2500 ( saldo (conta))
saldo ( saldo < 2500(conta))
-
Alm desta variao, possvel executar cada operao algbrica relacional usando um entre diversos algoritmos diferentes. Por exemplo: Para executar a seleo, podemos procurar em todas as tuplas de conta a fim de encontrar as tuplas com saldo menor 2.500.
Se um ndice rvore-B+ estiver disponvel no atributo saldo, podemos usar o ndice em vez de localizar as tuplas.
necessrio prover as expresses algbricas de anotaes que permitam especificar como sero avaliadas.
Exemplo Introdutrio
-
Uma operao algbrica relacional anotada com instrues sobre como ser avaliada chamada de avaliao primitiva.
Vria avaliaes primitivas podem ser agrupadas em pipeline, e executadas em paralelo.
Uma seqncia de operaes primitivas um plano de execuo de consulta ou plano de avaliao de consulta.
Exemplo Introdutrio
-
saldo
saldo < 2500 (use ndice 1)
conta
Uma vez escolhido o plano de consulta, a consulta avaliada com aquele plano e o resultado da consulta produzido
Exemplo Introdutrio
-
Otimizao de Consultas
Existem 2 tcnicas bsicas para otimizao de consultas:
As baseadas em heursticas para a ordenao de acesso ao banco de dados, que participaro da estratgia de acesso;
e as que estimam sistematicamente o custo de estratgias de execuo diferentes e escolhem o
plano de execuo com o menor custo estimado.
-
Catlogo de Informaes para Estimativa de Custo
nr: o nmero de tuplas na relao r;
br: o nmero de blocos que contm tuplas da relao r;
sr: o tamanho em bytes de uma tupla da relao r;
fr: o fator de bloco da relao r, ou seja, o nmero de tuplas da relao r que cabe em um bloco;
V(A,r): o nmero de valores distintos que aparecem na relao r para o atributo A. Esse valor igual ao tamanho (em nmero de tuplas) de A(r). Se A uma chave para a relao r, V(A,r) nr.
-
SC(A,r): a cardinalidade de seleo (seletividade) do atributo A da relao r.
Dados uma relao r e um atributo A da relao, SC(A,r) o nmero mdio de registros que satisfazem uma condio de igualdade no atributo A, dado que pelo menos um registro satisfaz a condio de igualdade.
Exemplo: SC(A,r) = 1 se A um atributo-chave de r; Para um atributo que no chave, estimamos que os valores distintos de V(A,r) so distribudos uniformemente entre as tuplas, produzindo SC(A,r) = (nr / V(A,r))
Catlogo de Informaes para Estimativa de Custo
-
As duas ltimas estatsticas podem ser estendidas de forma a valer para um conjunto de atributos, ao invs de valer para apenas um atributo.
Se as tuplas da relao r estiverem armazenadas fisicamente juntas em um arquivo, a seguinte equao vlida:
Br = [nr, fr]
Catlogo de Informaes para Estimativa de Custo
-
Informaes sobre ndices: fi: o fan-out (nmero de ponteiros) mdio dos ns internos do ndice i para ndices estruturados em rvore, como rvores B+;
HTi: o nmero de nveis no ndice i, ou seja, a altura do ndice i.
LBi: o nmero de blocos de ndice de nvel mais baixo no ndice i, ou seja, o nmero de blocos no nvel de folha do ndice (o nmero de blocos que contm os registros folha de um ndice).
Catlogo de Informaes para Estimativa de Custo
-
As variveis estatsticas so usadas para estimar o tamanho do resultado e o custo para vrias operaes e algoritmos.
A estimativa de custo do algoritmo A EA.
Para manter as estatsticas precisas, toda vez que uma relao for modificada tem-se que atualizar as estatsticas. Contudo, a maioria do sistema no atualiza as estatsticas em todas as modificaes. Atualiza-as periodicamente.
Quanto mais informaes forem utilizadas para estimar o custo da consulta e quanto mais precisas forem essas informaes, melhores sero as estimativas de custo.
Catlogo de Informaes para Estimativa de Custo
-
Medidas do Custo de uma Consulta
O custo de uma consulta pode ser estimado de diversas formas:
Por acessos a disco; Por tempo de uso da CPU; Pelo tempo de comunicao nos BD paralelos e/ou distribudos;
O tempo de execuo de um plano poderia ser usado para estimar o custo da consulta, contudo em grandes sistemas de BD, utiliza-se o nmero de acessos a disco, porque estes estabelecem o tempo crtico de execuo do plano (j que so lentos quando comparados s operaes realizadas em memria).
-
Para simplificar nossos clculos assumiremos que todas as transferncias de blocos (do disco para memria) tm o mesmo custo. Desconsideraremos o tempo de latncia e o tempo de busca. Tambm desconsideramos o custo de escrever o resultado final de uma operao de volta para o disco.
Os custos dos algoritmos dependem significativamente do tamanho do buffer na memria principal. No melhor caso, todos os dados podem ser lidos para o buffer e o disco no precisa ser acessado novamente. No pior caso, supomos que o buffer pode manter apenas alguns blocos de dados aproximadamente um bloco por relao. Geralmente faremos a suposio do pior caso.
Medidas do Custo de uma Consulta
-
Operao de Seleo
a varredura de arquivos: o operador de mais baixo nvel para se ter acesso aos dados.
So algoritmos de procura que localizam e recuperam os registros que esto de acordo com uma condio de seleo.
Tem-se vrios algoritmos diferentes, que variam de acordo com a complexidade da seleo e o uso ou no de ndices.
-
Exemplo de algoritmos usados na implementao do operador select:
Busca Linear (ou fora bruta); Busca Binria; Utilizao de ndice primrio (atributo chave); Utilizao de ndice primrio para recuperar mltiplosregistros (atributo chave);
Utilizao de um ndice cluster para recuperarmltiplos registros (atributo no chave);
Utilizao de um ndice secundrio (rvore B+) emuma comparao de igualdade;
Busca para selees complexas
Operao de Seleo
-
Busca para selees complexas:
Se uma condio de uma instruo select uma condio conjuntiva ou seja, formada por diversas condies simples conectadas pelo conectivo lgico AND, o SGBD pode usar os seguintes mtodos:
Seleo conjuntiva utilizando um ndice individual; Seleo conjuntiva utilizando um ndice composto; Seleo conjuntiva por meio da interseo de registros.
Operao de Seleo
-
Busca para selees complexas:
Se uma condio de uma instruo select uma condio disjuntiva ou seja, formada por diversas condies simples conectadas pelo conectivo lgico OR, a otimizao mais simples.
Pouca otimizao pode ser feita, pois os registros que satisfazem a condio disjuntiva so a unio dos registros que satisfazem as condies individuais.
Operao de Seleo
-
Veremos dois deles (os bsicos):
Aquele que envolve uma Busca Linear; Aquele que envolve uma Busca Binria.
Considere uma operao de seleo em uma relao cujas tuplas so armazenadas juntas em um nico arquivo.
Operao de Seleo
-
Seleo por Busca Linear A1
Em uma busca linear, cada bloco de arquivo varrido e todos os registros so testados para verificar se satisfazem a condio de seleo.
Como todos os blocos precisam ser lidos, EA1 = br.
No caso da seleo ser aplicada em um atributo-chave, podemos supor que a metade dos blocos varrida antes de o registro ser encontrado, ponto no qual a varredura termina. A estimativa ento ser EA1 = (br/2).
-
Seleo por Busca Binria A2
Se o arquivo ordenado em um atributo e a condio de seleo uma comparao de igualdade neste atributo, podemos usar uma busca binria para localizar os registros que satisfazem a seleo.
Neste caso, a estimativa :
EA2 = [log2(br)] + [SC(A,r)/fr] -1
O primeiro termo [log2(br)] contabiliza o custo para localizar a primeira tupla por meio da busca binria nos blocos;
O nmero total de registros que satisfaro a seleo SC(A,r), e esses registros ocuparo [SC(A,r)/fr] blocos, dos quais um j havia sido recuperado (por isso o -1).
Se a condio de igualdade estiver em um atributo-chave, ento SC(A,r) = 1, e a estimativa se reduz a EA2 = [log(br)].
-
Clculo do Custo da Busca Binria
Acesso aos blocos: Primeiro acesso (ao bloco central) no encontro o registro
procurado; Segundo acesso (ao bloco central do lado esquerdo ou direito) .... At o pior caso (nono acesso), o registro encontrando na
ltima diviso disponvel (ou no encontrado).
Para 500 blocos: 500 250 125 62,5 31,25 15,62 7,8 3,9
1,9 (nove divises)
Clculo: log2(500) = 9 29 = 516 (=~ 500)
-
Exemplo de Seleo por Busca Binria
Suponha as seguintes informaes estatsticas para uma relao conta:
fconta = 20 (ou seja, 20 tuplas de conta cabem em um nico bloco);
V(nome_agncia, conta) = 50 (ou seja, existem 50 agncias com nomes diferentes);
V(saldo, conta) = 500 (ou seja, existe 500 valores diferentes desaldos nesta relao);
nconta = 10.000 (ou seja, a relao conta possui 10.000 tuplas).
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);
Uma varredura de arquivo simples faria 500 acessos a blocos, supondo que o atributo da condio no fosse atributo-chave. Seno, seriam em mdia 250 acessos;
Suponha que conta esteja ordenado por nome_agncia.
Como V(nome_agncia, conta) = 50, esperamos que 10.000/50=200 tuplas da relao conta pertenam agncia Perryridge;
Essas tuplas caberiam em 200/20 = 10 blocos;
Uma busca binria para encontra o primeiro registro [log2(500)] = 9;
Assim o custo total seria: 9 + 10 1 = 18 acessos a bloco.
-
A otimizao de consulta para uma operao SELECT necessria principalmente em condies de seleoconjuntiva, sempre que mais de um dos atributosenvolvidos nas condies possurem um caminho de acesso.
O otimizador deve escolher o caminho de acesso querecupera o menor nmero de registros (gera blocos de respostas menores), de maneira mais eficiente.
As selees que separam o menor nmero de tuplasdevem ser realizadas primeiro.
Na escolha entre mltiplas opes o otimizadorconsidera tambm a seletividade de cada condio.
Operao de Seleo
-
A ordenao bastante importante, uma vez que o algoritmo utilizado:
Na implementao do order by. Como um componente-chave nos algoritmos de sort-merge usado no join, union e intersection e emalgoritmos de eliminao de duplicatas para a operao project.
A ordenao pode ser evitada se um ndice apropriadoexistir de forma a permitir o acesso ordenado aosregistros.
Classificao
-
Classificao
Formas de ordenao:
Lgica: construo de um ndice na chave de classificao, o qual ser usado para ler a relao na ordem de classificao. A leitura de tuplas na ordem de classificao pode conduzir a um acesso de disco para cada tupla.
Fsica: as tuplas so gravadas de forma ordenada no disco.
-
Classificao
O problema de classificao pode ser tratado sob duas condies:
Quando a relao cabe completamente na memria principal: Tcnicas padres de classificao (quicksort entre outras) podem ser usadas.
Quando a relao maior que a memria principal classificao externa: Algoritmo comum: sort-merge externo
Para entend-lo, considere M o nmero de frames de pginas no buffer da memria principal ( o nmero de blocos de disco cujos contedos podem ser colocados no buffer da memria principal).
-
Ordenao Externa
A ordenao externa adequada para manipulararquivos de registros grandes, que so armazenadosem disco e que no cabem inteiramente na memriaprincipal.
A ordenao nesse algoritmo feita por partes estratgia merge-sort.
Fases: Fase de ordenao; Fase de fuso.
-
Inicializao:
i 1;j b; (tamanho do arquivo em blocos)k n0; (tamanho do buffer em blocos)m (j/k) (maior inteiro)
Fase de ordenao
Enquanto (i
-
Fase de fuso: fundir os subarquivos at que reste apenas 1
Inicializao
i 1;p logk-1m ; (p o nmero de passagens da fase de fuso)j m;
enquanto (i
-
Exemplo no Navathe
Se o nmero de blocos do arquivo = 1024 Se o tamanho do buffer = 5 blocos Na fase de ordenao sero criados 205 subarquivos
204 com 5 blocos e 1 com 4 blocos
Na fase de fuso, em cada uma das 4 passagens, sero gravados, respectivamente:
52 subarquivos 13 subarquivos 04 arquivos 01 arquivo
Nmero de subarquivos / tamanho do buffer -1 bloco
Por que -1?Porque um bloco de buffer fica reservado para armazenar um bloco resultado da fuso.
-
Sort-merge Externo (Korth)
1. Vrias classificaes temporrias so executadas:
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 Externo2. 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 bufferna memria;
repeat
escolha a primeira tupla (na ordem de classificao) entre todas as pginas do buffer;escreva a tupla no resultado e apague-a da pgina de buffer;
if a pgina de buffer de qualquer temporrio Ri est vazia and not fim de arquivo (Ri) then leia o prximo bloco de Ri na pgina de buffer;
until todas as pginas de buffer estarem vazias;
-
Consideraes Geralmente, se a relao muito maior que a memria, pode haver
M ou mais temporrios gerados na primeira fase, e no ser possvel alocar um frame de pgina para cada temporrio durante a fase de merge.
Neste caso, faz-se a operao de merge em mltiplos passos.
Como h memria suficiente para M-1 pginas de buffer de entrada, cada merge ter M-1 temporrios como entrada.
Funcionamento prximo slide.
Exemplo: Suponha agora que apenas um tupla caiba em um bloco (f = 1), e suponha que a memria mantm trs frames de pgina no mximo. Durante os estgios de merge, dois frames de pgina so usados para entrada e um para o resultado.
-
Funcionamento
Faz-se o merge sobre os primeiros M-1 temporrios (conforme descrito anteriormente) para obter um nico temporrio para o prximo passo;
Faz-se o merge dos prximos M-1 temporrios de forma semelhante, e assim por diante, at que todos os temporrios iniciais tenham sido processados;
Nesse ponto, o nmero de temporrios foi reduzido a um fator de M1;
Se esse nmero reduzido de temporrios ainda maior ou igual a M, outro passo dado, usando os temporrios criados pelo passo anterior;
Esses passos so repetidos tantas vezes quantas forem necessrias, at que o nmero de temporrios seja menor que M;
Ento, um passo final gera o resultado classificado.
-
Exemplo
g
a
d
c
b
e
r
d
m
p
d
a
24
19
31
33
14
16
16
21
3
2
7
14
a 19
g 24
d 31
b 14
e 16
c 33
d 21
r 16
m 3
a 14
p 2
d 7
a 19
c 33
b 14
d 31
g 24
e 16
a 14
d 21
d 7
m 3
r 16
p 2
a 14
b 14
a 19
c 33
d 21
d 7
d 31
g 24
e 16
m 3
r 16
p 2
Relao inicial
Criar temporrios
Temporrios
Passo 1:de merge
Temporrios
Passo 2:de merge
Resultado classificado
-
Nmero de Acessos a Disco
Fase de ordenao:
2 * b, onde b o nmero de blocos do arquivo que est sendo ordenado
Cada bloco b ser acessado duas vezes, uma vez para leitura e outra vez para escrita
Fase de fuso:
2 * (b * log Dm nr), onde Dm o nmero de subarquivos fundidos em cada fuso e nr nmero de subarquivos.
O 2 se d por conta da leitura e escrita de cada bloco O termo interno ao parnteses conta quantas vezes cada bloco
ser analisado (lido e escrito)
-
Operao de Juno equi_join: designao para uma juno da forma r |X|r.A=s.B s, em que A e B
so atributos ou conjuntos de atributos das relaes r e s, respectivamente.
O exemplo usado ser:depositante |X| cliente
Suponha as seguintes informaes de catlogo:
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
Suponha ainda que nome-cliente em depositante seja uma chave estrangeira vinda de cliente
-
Estimativa do Tamanho das Junes
O produto cartesiano r X s contm nr * ns tuplas. Cada tupla deste produto cartesiano ocupa sr + ss bytes. Assim podemos calcular o tamanho do produto
cartesiano.
Para juno natural ... Sejam r(R) e s(S) duas relaes: Se R S = , ento r |X| s igual a r X s; Se R S uma chave para R, ento sabemos que uma tupla de s ir juntar-se com no mximo uma tupla de r. Assim, o nmero de tuplas na juno no maior que o nmero de tuplas de s.
Se R S uma chave estrangeira para S vinda de R , ento o nmero de tuplas em r |X| s exatamente igual ao nmero de tuplas em s.
-
Estimativa do Tamanho das Junes
No exemplo: depositante |x| cliente, nome_cliente em depositante uma chave estrangeira vinda de cliente.
O tamanho do resultado exatamente ndepositante, que 5.000;
Com calcular o tamanho da juno quando R S no uma chave para R ou para S?
-
Estimativa do Tamanho das Junes
Suponha que cada valor aparece com probabilidade igual.
Considere uma tupla t de r e suponha R S = {A}.
Estima-se que a tupla t produz
ns / V(A,s)
tuplas em r |X| s, uma vez que esse o nmero mdio de tuplas em s com um determinado valor para os atributos A.
Considerando todas as tuplas em r, estima-se que h
nr * ns / V(A, s)
tuplas em r |X| s.
-
Estimativa do Tamanho das Junes
Observe que se invertermos os papis de r e s, as estimativas resultariam em valores diferentes se V(A,r) V(A,s).
Se isso acontece, h a probabilidade de haver tuplas pendentes que no participam da juno . A estimativa mais baixa ser, provavelmente, a mais precisa.
Tcnicas mais sofisticadas para a estimativa do tamanho da juno devem ser usadas se a hiptese de distribuio uniforme no puder ser considerada.
-
Estimativa do Tamanho das Junes
Calculando a estimativa do tamanho para depositante |X| clientes, sem utilizar informaes sobre chaves entrangeiras.
Como V(nome_cliente, depositante) = 2.500 e V(nome_cliente, cliente) = 10.000, as duas estimativas que obtemos so:
(10.000 * 5.000) / 2.500 = 20.000(5.000 * 10.000)/10.000 = 5.000
-
Juno de Lao Aninhado
for each tupla tr in r do begin
for each tupla ts in s do begin
teste o par (tr, ts) para ver se satisfazem a condio de juno;se satisfizerem, adicione tr.ts ao resultado
endend
r: relao externas: relao internatr.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.
um algoritmo caro j que examina todos os pares de tuplas nas duas relaes. O nmero de pares de tuplas a ser considerado nr * ns (para cada registro r tem-se que executar uma varredura completa em s).
No pior caso o buffer pode manter apenas um bloco de cada relao, e um total de nr * bs + br acessos blocos sero necessrios (ou seja, os blocos da relao r (br) so lidos uma vez por ocasio do lao mais externo e, os blocos da relao s (bs) so lidos para cada vez que uma tupla de r precisa ser comparada com todas as tuplas de s por ocasio do lao mais interno)
No melhor caso, h espao suficiente para que ambas as relaes caibam na memria, assim cada bloco ter de ser lido somente uma vez, conseqentemente, apenas br + bs acessos blocos sero necessrios.
Note que, se a relao menor couber completamente na memria, melhor usar essa relao como a mais interna.
-
Exemplo
Considere a juno natural de depositante e cliente. Suponha que no existem ndices para estas relaes. Suponha que depositante a relao mais externa e cliente a relao mais interna.
5.000 * 10.000 tuplas sero examinadas.
Pior caso: 5.000 * 400 + 100 = 2.000.100 acessos disco.
Melhor caso: 400 + 100 = 500 acessos disco.
Trocando as relaes dos laos internos e externos: 10.000 * 100 + 400: 1.000.400 acessos disco.
-
Merge-juno (Korth)
Sejam r(R) e s(S) relaes cuja juno natural ser calculada, e seja R S a notao para seus atributos em comum.
Suponha que ambas as relaes estejam classificadas nos atributos R S.
A juno destas relaes pode ser feita por meio de um merge.
-
pr := endereo da primeira tupla de r;ps := endereo da primeira tupla de s;
while (ps nulo and pr nulo) do
begin
ts := tupla para qual ps aponta;Ss := {ts};configure ps para apontar para a prxima tupla de s;acabou := false;
while (not acabou and ps nulo) dobegin
ts := tupla para qual ps aponta;if (ts[AtribJuno] = ts[AtribJuno])then begin
Ss = Ss {ts};configure ps para apontar para a prxima tupla de s; end
else acabou := verdadeiro;end;
// permanece varrendo s enquanto as tuplas contiverem valores iguais para o atributo de juno, e as coloca em uma relao auxiliar.
-
tr := tupla para a qual pr aponta;
while ( pr nulo and tr[AtribJuno] < ts[AtribJuno]) dobegin
configure pr para apontar para a prxima tupla de r;tr := tupla para qual pr aponta;
end
// percorre r enquanto no encontrar uma tupla com um valor no atributo de juno igual ou maior ao valor no atributo de juno das tuplas de s que esto na relao auxiliar
while (pr nulo and tr[AtribJuno] = ts[AtribJuno]) dobegin
for each rs in Ss dobegin
adicione ts.tr ao resultado;end
configure pr para apontar para a prxima tupla de r;tr := tupla para a qual pr aponta;
end;
// encontrando a tupla de r que deve ser juntar s tuplas de Ss, realiza a concatenao das tuplas, percorrendo r para ver se existem outras a serem concatenadas.
End;
-
Merge-juno
Suponha depositante |x| cliente. Com o atributo de juno sendo o nome do cliente. As relaes j esto ordenadas neste atributo.
O custo da juno 400 + 100 = 500 acessos disco.
Caso a exigncia de S caber em memria principal no puder ser atendida, um algoritmo de juno parte deve ser executado para juno tr Ss.
Caso as relaes no estejam ordenadas mas possuam ndices, o merge-juno pode ser executado usando os ndices.
-
Se os registros de R e S estiverem classificados (ordenados) fisicamente pelos atributos de juno A e B, respectivamente, poderemos implementar a juno da maneira mais eficientepossvel.
Ambos os arquivos so varridos simultaneamente na ordem dos atributos de juno, fazendo a correspondncia dos registros quepossuem os mesmos valores para A e B.
Se os arquivos no estiverem classificados, eles devero ser classificados primeiro por meio de uma ordenao externa.
Pares de blocos de arquivos so ordenadamente copiados parabuffers de memria, e os registros de cada arquivos so varridosapenas uma vez (a menos que A e B no sejam atributos chaves e, nesse caso, o mtodo precisa ser modificado).
ndices proporcionam a capacidade de acessar (varrer) os registrosna ordem dos atributos de juno, mas os registros de fato estofisicamente espalhados pelos blocos do arquivo.
Juno Sort-merge (Navathe)
-
Juno Sort-merge
A seguir, um esboo do algoritmo para Juno, Projeo, Unio, Interseo e Diferena por meio de sort-merge, quando R possui n tuplas e S possui m tuplas.
-
T R |X| A=B S
Ordenar as n tuplas de R baseando-se no atributo A;Ordenar as m tuplas de S baseando-se no atributo B;
Inicializar i 1 , j 1;Enquanto (i
-
{ (* Ri[A] = Sj[B], portanto realizamos o output de uma tupla: resultado
da juno*)output a tupla combinada em T;
(* output outras tuplas correspondentes a Ri se houver*)l j + 1;enquanto (l
-
T (R)
Criar uma tupla t[] em T para cada tupla t de R;
(*T contm o resultado da projeo ANTES da eliminao de duplicatas*)
Se incluir uma chave de Rento T T;
Seno{
ordenar as tuplas de Tinicializar i 1, j 2;enquanto i
-
T R SOrdenar as tuplas de R e S utilizando os mesmos e nicos atributos de ordenao;
Inicializar i 1; j 1;Enquanto (i
-
T R S
Ordenar as tuplas de R e S utilizando os mesmos e nicos atributos de ordenao;
Inicializar i 1; j 1;Enquanto (i
-
T R - SOrdenar as tuplas de R e S utilizando os mesmos e nicos atributos de ordenao;
Inicializar i 1; j 1;Enquanto (i
-
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.
Dado que as relaes esto na ordem de classificao, as tuplascom o mesmo valor nos atributos de juno esto em ordem consecutiva. Assim, cada tupla na ordem de classificao precisa ser lida somente uma vez, e, como resultado, cada bloco tambm lido somente uma vez.
Em relao ao algoritmo do Navathe, tem-se que assumir queconjuntos de tuplas com o mesmo valor no atributo de junoprecisam estar carregadas na memria ao mesmo tempo;
Ento, para ambos, o nmero de acessos disco igual soma donmero de blocos em ambos as relaes, br + bs.
-
Implementao do Outer Join
A juno externa pode ser obtida por meio da modificao dos algoritmos de juno, como a juno de laos aninhados, sort-merge ou de juno hash;
Ou, de forma alternativa e simplificada, por meio da execuo de uma combinao de operadores da lgebra relacional.
-
Por exemplo, considere a consulta:
select unome, pnome, dnome
from empregado left outer join departamento ondno=dnumero;
Essa operao de juno externa equivalente seguinte seqncia de operaoes da lgebra relacional:
Implementao do Outer Join
-
Calcule a juno interna entre as tabelas.
Temp1 unome, pnome, dnome (empregado |X| departamento)
Encontre as tuplas de empregado que no aparecem no resultado da juno.
Temp2 unome, pnome (empregado) - unome, pnome (Temp1)
Implementao do Outer Join
-
Complete cada tupla da relao Temp2 com valor nullpara o campo dnome.
Temp2 Temp2 X NULL
Aplique a operao union em Temp1 e Temp2 para produzir o resultado do left outer join.
Resultado Temp1 Temp2
O custo dessa juno externa a soma dos custos da juno interna, das projees e da unio realizadas.
Implementao do Outer Join
-
Junes Complexas
Juno com condio conjuntiva:r |X| ... s
As junes nas condies individuais podem ser resolvidas, por exemplo, pelo algoritmo de juno por laos aninhados:
r |X| s, r |X| s, r |X| s e assim por diante.
A juno global por ser realizada calculando, primeiro o resultado de uma dessas junes mais simples e depois testando (a esse resultado) as tuplas produzidas pelas outras junes.
1 2 n
1 2 n
-
Junes Complexas
Juno com condio disjuntiva:
r |X| ... s
Neste caso, a juno pode ser calculada como a unio dos registros nas junes individuais.
1 2 n
-
Suponha r1 r2 ... rn em que as junes esto expressas sem ordem. Com n = 3, h 12 ordens de juno diferentes:
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
-
Em geral, com n relaes, h (2(n-1))! / (n-1)! Ordens de juno diferentes. Exemplos: Com n = 5 o n 1680 e com n = 7, o n 665.280.
Felizmente, no necessrio gerar todas as expresses equivalentes a uma determinada expresso.
Uma desvantagem da otimizao baseada no custo o custo da prpria otimizao.
Junes Complexas
-
Duas rvores de consulta (juno) profundas
esquerda
Junes Complexas
-
O otimizador escolher a rvore que possuir o menor custo estimado.
Com rvores profundas a esquerda, o filho direita considerado ser a relao interna, para o caso da execuo de laos aninhados.
A idia-chave sob o ponto de vista do otimizadorem relao ordem das junes encontrar uma ordem que ir reduzir o tamanho dos resultados intermedirios.
Junes Complexas
-
Junes Complexas
Considere uma juno envolvendo trs relaes:emprstimo |X| depositante |X| cliente
Neste caso, alm da escolha da estratgia para o processamento da juno, tem-se ainda que escolher qual juno calcular primeiro. Vejamos algumas estratgias:
Estratgia 1: calcule a juno depositante |X| cliente usando qualquer tcnicas. Usando o resultado intermedirio, calcule: emprstimo |X| (depositante |X| cliente);
Estratgia 2: faa como na Estratgia 1, mas calcule primeiro emprstimo |X| depositante, e ento faa a juno do resultado com cliente.
Outra ordem de junes pode ser feita.
-
Junes Complexas
Estratgia 3: Em vez de executar duas junes, execute o par de junes, da seguinte forma: Construa dois ndices:
Um para o nmero_emprstimo em emprstimo;
Um para o nome_cliente em cliente.
Considere cada tupla t em depositante. Para cada t, procure as tuplas correspondentes em cliente e as tuplascorrespondentes em emprstimo.
Assim, cada tupla de depositante examinada exatamente uma vez.
O custo relativo desse procedimento depende da forma como as relaes esto armazenadas, da distribuio de valores dentro das colunas e da presena de ndices.
-
Eliminao de Duplicidade
Pode-se implementar a eliminao de duplicidade usando a classificao.
As tuplas idnticas aparecero adjacentes umas s outras aps a classificao, e todas, exceto uma cpia, podem ser removidas.
No sort-merge, as duplicatas encontradas enquanto um temporrio est sendo criado podem ser removidas antes que ele seja escritono disco, reduzindo, assim, o nmero de transferncias de blocos.
Assim, pode-se dizer que o custo de eliminar as duplicatas o custo de classificar uma relao.
Devido ao custo relativamente alto da eliminao de duplicidade, as linguagens de consulta comerciais exigem um pedido explcito do usurio para remover duplicatas; caso contrrio, as duplicatas so mantidas.
-
Operao de Projeo
Pode-se executar a projeo por meio da execuo da projeo em cada tupla, resultando uma relao que poderia ter registros duplicados, e ento, remover os registros duplicados.
Se os atributos na lista de projeo incluem as chaves da relao (primria e/ou candidatas), nenhuma duplicata existir.
O tamanho de um projeo da forma A(r) calculado como V(A,r), uma vez que a projeo elimina as duplicatas.
-
Transformaes de Expresses Relacionais
Uma consulta pode ser expressa de diversas maneiras diferentes, com diferentes custos de avaliao.
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 ( cidade_agncia = Brooklyn (agncia |X| (conta |X| depositante)))
Para resolver esta expresso, seguindo a forma como ela est escrita, necessrio criar uma relao intermediria grande (a juno das trs relaes, como posto no slide 86).
-
710000BrooklynBrighton
370000RyeNorth Town
30000BenningtonPownal
8000000HorseneckRound Hill
40000HorseneckMianus
170000HorseneckPerrydige
210000Palo AltoRedwood
900000BrooklynDowntown
fundoscidade_agncianome_agncia
StamfordWalnutGreen
BrooklynSenatorBrooks
WoodsideSand HillGlenn
Palo AltoAlmaJohnson
PittsfieldSpringAdams
PrincetonNassauWilliams
StamfordPutnamTurner
PittfieldParkLindsay
RyeNorthCurry
HarrisonMainHayes
RyeNorthSmith
HarrisonMainJones
cidade_clienterua_clientenome_cliente
A-222Lindsay
A-217Jones
A-201Johnson
A-305Turner
A-102Hayes
A-215Smith
A-101Johnson
nmero_contanome_cliente
agncia
depositante
cliente
750A-217Bringhton
700A-222Redwood
900A-201Bringhton
350A-305Round Hill
400A-102Perryridge
700A-215Mianus
500A-101Downtown
saldonmero_contanome_agncia
conta
-
Juno (conta |X| depositante)
750A-217Bringhton
700A-222Redwood
900A-201Bringhton
350A-305Round Hill
400A-102Perryridge
700A-215Mianus
500A-101Downtown
saldonmero_contanome_agncia
710000BrooklynBrighton
710000BrooklynBrighton
8000000HorseneckRound Hill
170000HorseneckPerrydige
40000HorseneckMianus
210000Palo AltoRedwood
900000BrooklynDowntown
fundoscidade_agncianome_agncia
A-217Jones
A-222Lindsay
A-201Johson
A-305Turner
A-102Hayes
A-215Smith
A-101Johnson
nmero_contanome_cliente
Juno (agncia |X| (conta |X| depositante))
750A-217Bringhton
700A-222Redwood
900A-201Bringhton
350A-305Round Hill
400A-102Perryridge
700A-215Mianus
500A-101Downtown
saldonmero_contanome_agncia
Jones
Lindsay
Johson
Turner
Hayes
Smith
Johnson
nome_cliente
-
Entretanto, somente as tuplas que pertencem s agncias localizadas no Brooklyn so interessantes.
Reescrevendo a consulta, consegue-se eliminar a necessidade de considerar as tuplas que no tm cidade_agncia = Brooklyn, reduzindo o tamanho do resultado intermedirio:
nome_cliente (( cidade_agncia = Brooklyn (agncia)) |X| (conta |X| depositante))
Equivalncia de Expresses
-
Juno (conta |X| depositante)
750A-217Bringhton
700A-222Redwood
900A-201Bringhton
350A-305Round Hill
400A-102Perryridge
700A-215Mianus
500A-101Downtown
saldonmero_contanome_agncia
A-217Jones
A-222Lindsay
A-201Johnson
A-305Turner
A-102Hayes
A-215Smith
A-101Johnson
nmero_contanome_cliente
cidade_agncia = Brooklyn (agncia)
710000BrooklynBrighton
900000BrooklynDowntown
fundoscidade_agncianome_agncia
750A-217Bringhton
900A-201Bringhton
500A-101Downtown
saldonmero_contanome_agncia
(cidade_agncia = Brooklyn (agncia)) |X| (conta |X| depositante)
710000BrooklynJones
710000BrooklynJohnson
900000BrooklynJohnson
fundoscidade_agncianome_cliente
-
Equivalncia de Expresses
nome_cliente
cidade_agncia = Brooklyn
|X|
agncia |X|
conta depositante
(a) rvore da expresso inicial
nome_cliente
cidade_agncia = Brooklyn
|X|
agncia
|X|
conta depositante
(b) rvore da expresso transformada
-
Equivalncia de Expresses
Dada uma expresso de lgebra relacional, funo do otimizador de consulta propor um plano de avaliao da consulta que gere o mesmo resultado da expresso fornecida e que seja uma maneira menos onerosa de gerar o resultado (ou que, pelo menos, no seja muito mais cara que a maneira mais barata).
Para isso o otimizador precisa gerar planos alternativos que produzam o mesmo resultado da expresso dada e escolher o menos caro.
-
Uma regra de equivalncia diz que expresses de duas formas so equivalentes se podemos transformar uma na outra preservando a equivalncia.
Preservar a equivalncia significa que as relaes geradas pelasduas expresses tm o mesmo conjunto de atributos e contm o mesmo conjunto de tuplas, embora seus atributos possam estar ordenados de forma diferente.
As regras de equivalncia so usadas pelo otimizador para transformar expresses em outras logicamente equivalentes.
Assuma que:
: denota predicados; L: denotas listas de atributos; E: denota expresses da lgebra relacional.
Regras de Equivalncia Algbrica
-
1. Operaes de seleo conjuntivas podem ser quebradas em uma seqncia de selees individuais (cascata de ).
1 2 (E) = 1 ( 2 (E))
2. Operaes de seleo so comutativas.
1 ( 2 (E)) = 2 ( 1 (E))
3. Apenas as operaes finais em uma seqncia de operaes de projeo so necessrias, as outras podem ser omitidas (cascata de ).
L1 ( L2 (...( Ln(E))...)) = L1(E)
Regras de Equivalncia Algbrica
-
4. Selees podem ser combinadas com produtos cartesianos e junes teta.
(E1 X E2) = E1 |X| E2
5. Operaes de juno teta so comutativas.
E1 |X| E2 = E2 |X| E1
6. Operaes de juno natural so associativas.
(E1 |X| E2) |X| E3 = E1 |X| (E2 |X| E3)
7. Comutatividade de e |X| (ou X): similar 6.
Regras de Equivalncia Algbrica
-
Regras de Equivalncia Algbrica
8. Comutatividade de Operaes de Conjunto
R S S R e
R S S R
- A operao no comutativa.
9. Associatividade de Operaes Produtrias e de Conjunto (X)
(R X S) X T R X (S X T)
- Por X entenda-se: X ou X ou ou ou .- A operao no associativa.
-
Regras de Equivalncia Algbrica
9. Associatividade de Operaes Produtrias e de Conjunto (X)
(R X S) X T R X (S X T)
Observao: Predicados de juno devem ser devidamente ajustados na associatividade de operaes produtrias. Exemplo: Seja 1 um predicado sobre atributos de R e S, 2 um predicado sobre atributos de S e T, e 3 um predicado sobre atributos de R e T. Ento,
(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 ()
11. Comutatividade de Projeo e Unio
c (R S) (c (R)) (c (S))- Por entenda-se: ou ou
listaAtributos (R S) (listaAtributos (R)) (listaAtributos (S))
- As operaes e no so comutativas.
-
Regras de Equivalncia Algbrica
12. Fuso de Selees e Operaes Produtrias
(a) c (R X S) R X = c S ou
(b) c (R X S) R S ou
(c) R X = c S R S
c
c
-
Exemplos de TransformaesExemplo 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)
Exemplo3: Examinando uma subexpresso interna:cidade_agncia = Brooklyn saldo > 1000 (agncia |X| conta))cidade_agncia = Brooklyn ( saldo > 1000 (agncia |X| conta))cidade_agncia = Brooklyn (agncia) |X| saldo > 1000 (conta)
Exemplo 4: Usando projeesnome_cliente (( cidade_agncia = Brooklyn (agncia) |X| conta) |X| depositante)
nome_cliente((nmero_conta(( cidade_agncia = Brooklyn (agncia)) |X| conta)) |X| depositante)
-
Ordenando Junes Uma boa ordenao de operaes de juno importante para reduzir o tamanho
dos resultados intermedirios.
nome_cliente (( cidade_agncia = Brooklyn (agncia)) |X| conta |X| depositante)
Poderamos executar conta |X| depositante primeiro e, ento, fazer a juno do resultado com:
cidade_agncia = Brooklyn (agncia).
Entretanto, conta |X| depositante provavelmente uma relao grande, j que contm uma tupla para cada conta. Em contrapartida,
cidade_agncia = Brooklyn (agncia) |X| conta
, provavelmente, uma relao pequena.
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
Uma rvore de consulta pode ser transformada passo a passo em outra rvore de consulta mais eficiente.
Entretanto preciso assegurar que os passos de transformao sempre levem a uma rvore de consultaequivalente.
Determinadas regras de transformao preservam essaequivalncia.
-
Passo1: A regra 1, ao ser usada, quebra quaisquer
operaes SELECT com condies conjuntivas emuma cascata de operaes SELECT, permitindoum maior grau de liberdade para transferiroperaes 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 parabaixo na rvores, que forem permitido pelosatributos 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 osns 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 operaoSELECT subseqente na rvore, gerando umaoperao JOIN se a condio representa umacondio de juno.
Passo 5:
Usando as regras 3, 4, 7 e 11, relativas cascata de PROJECT e comutao de PROJECT com outrasoperaes, quebra e transfere as listas de atributosde projeo para baixo na rvore.
Algoritmo de Otimizao Algbrica
-
Passo 6:
Identifica subrvores que representam grupos de operaes que podem ser executadas por um nicoalgoritmo (execues em pipeline).
Como exemplo, considere a consulta:
select unomefrom Empregado, Trabalha_Em, Projetowhere pnome = Aquarius and pnumero = pno and
essn = ssn and datanasc > 31-12-1957;
Algoritmo de Otimizao Algbrica
-
Passos na converso de uma rvore de consulta durante a otimizao heurstica. (a) rvore de consulta inicial (cannica) para a consulta. (b) Transferncia das operaes SELECT para baixo na rvore de consulta. (continua)
Exemplo:
-
Passos na converso de uma rvore de consulta durante a otimizao heurstica. (c) Aplicao, em primeiro lugar, da operao SELECT mais restritiva. (d) Substituindo PRODUTO CARTESIANO e SELECT por operaes JOIN.
Exemplo:
-
Passos na converso de uma rvore de consulta durante a otimizao heurstica. (e) Transferncia das operaes PROJECT para baixo na rvore de consulta.
Exemplo:
-
A Escolha de Planos de Avaliao
A gerao de expresses apenas parte do processo de otimizao de consultas.
Um plano de avaliao define exatamente qual algoritmo ser usado para cada operao e como a execuo das operaes coordenada.
nome_cliente (classificar para remover duplicatas)
|X| (hash-juno)
|X| (merge_juno) depositante
cidade_agncia = Brooklyn saldo < 1000(use o ndice 1) (use a varredura linear)
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.
Entretanto, essa estratgia pode no ser a melhor. Embora uma merge-juno, sob certas condies, possa ser mais cara que uma hash-juno, ela consegue prover um resultado classificado que torna mais barata a avaliao de uma operao posterior (como uma eliminao de duplicatas ou uma outra merge-juno).
Para escolher o melhor algoritmo global, se deve considerar at mesmo os algoritmos que no so os melhores para as operaes individuais.
Abordagens para escolha do melhor plano de avaliao: Baseada no custo de todos os planos; Heurstica.
-
Otimizao Baseada em Custo
O otimizador baseado no custo gera uma faixa de planos de avaliao a partir de uma determinada consulta usando as regras de equivalncia e escolhe aquele de menor custo.
Para uma consulta complexa, o nmero de planos diferentes por ser muito grande.
Diferentes tcnicas podem ser usadas para diminuir o nmero de planos a serem avaliados:
Quando se examina os planos para uma expresso, possvel terminar aps examinar apenas uma parte da expresso, se for determinado que o plano mais barato para aquela parte j est mais caro que a avaliao mais barata para uma expresso completa j examinada.
-
Otimizao Heurstica
Regras heurstica so utilizadas para transformar consultas da lgebra relacional;
No otimizador heurstico, a estratgia mais eficiente para cada operao escolhida.
-
Estrutura dos Otimizadores de Consulta
Na prtica, a maioria dos otimizadores de consultas combinam estratgias baseadas em custo com estratgias heursticas.
Alguns SGBDs consideram a probabilidade de j haver no buffer a pgina que contm o dado que se est precisando (isso mais um dado estatstico e pode resultar em estimativas de custos menores).
possvel usar a estratgia heursticas de dividir as consultasem sub-consultas que no utilizem mais de duas tabelas.
Transforma consultas em SQL em outras consultas em SQL que utilizam junes onde for possvel facilita a transformao da consulta em SQL em uma consulta em lgebra relacional.
-
Otimizao em PostgreSQL
Seguem alguns breves comentrios sobre otimizao e desempenho em PostgreSQL.
Para otimizao e desempenho, PostgreSQL utiliza-se dos comandos vacuum, analyze e explain.
-
VACUUM O comando Vacuum tanto recupera espao em disco, quanto otimiza o desempenho do banco e previne contra perda de dados muito antigos, devido ao recomeo do ID das transaes. Portanto, deve ser utilizado constantemente, pois tambm atualiza as estatsticas dos dados utilizados pelo planejador de comandos.
Na linha de comando:
vacuumdb -faze ou vacuumdb -fazq.
Otimizao em PostgreSQL
-
Exemplo de uso do vacuum:
Em uma tabela:
VACUUM VERBOSE ANALYZE nometabela;
Em um banco de dados completo:
Somente VACUUM ou VACUUM FULL ANALYZE;
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
-
ANALYZE O comando ANALYZE coleta estatsticas sobre o contedo das tabelas do banco de dados e armazena os resultados na tabela do sistema pg_statistic. Posteriormente, o planejador de comandos utiliza estas estatsticas para ajudar a determinar o plano de execuo mais eficiente. Caso estas estatsticas no sejam atualizadas com freqncia, pode ser comprometido o desempenho do banco de dados, por uma escolha errada do plano de execuo dos comandos.
Normalmente, operaes DELETE ou UPDATE no removem os registros automaticamente (somente aps a execuo do vacuum isso acontece).
Otimizao em PostgreSQL
-
No PostgreSQL, pode ser utilizado o comando explain para ver o plano (conjunto executvel de instrues) criado pelo sistema para qualquer comando.
O comando explain traz informaes sobre custo, como tamanho da tupla, custo estimado de execuo, entre outros.
Exemplo de uso do explain:
EXPLAIN SELECT * FROM NOMETABELA;
Otimizao em PostgreSQL
-
EXPLAIN ANALYZE Executa a consulta e mostra o tempo real acumulado dentro de cada n do plano de execuo, junto com os custos estimados que o comando explain simples mostraria.
Otimizao em PostgreSQL
-
Referncias Bibliogrficas
Sistemas de Banco de Dados. (Cap. 12) Abraham Silberchatz, Henry F. Korth e S. Sudarshan. 3 Edio. Makron Books, 1999.
Sistemas de Banco de Dados. (Cap. 15) RamezElsmari, Shamkant B. Navathe. 4 Edio. Pearson Addison Wesley, 2005.
Manuais do PostgreSQL.