Você está na página 1de 6

Agenda

• Introdução
• Enumerar possíveis planos
– traduzir consultas SQL em álgebra relacional
Otimização de consultas – equivalências em álgebra relacional
• Avaliando um plano
João B. Rocha-Junior
joao@uefs.br
• Estimando o custo de um plano
• Resumo
Departamento de Ciências Exatas
Universidade Estadual de Feira de Santana

Otimização de consultas João B. Rocha-Junior 1

0 1

Introdução SQL
Álgebra
relacional
Analisador Normalizador
• Existem diferentes formas de processar uma
catálogo Álgebra
consulta relacional
Consulta inválida
– cada uma dessas forma é chamada de plano de ou não autorizada
execução
dados Otimizador
estatísticos

• Entre o universo de possíveis planos, o Plano


otimizador deve selecionar apenas um plano
– o plano selecionado deve ter um baixo custo Banco de Executor
Dados
– o otimizador utiliza dados do catálogo para
estimar esse custo
Resultado
Otimização de consultas João B. Rocha-Junior 2 Otimização de consultas João B. Rocha-Junior 3

2 3

Plano SELECT S.sname


Passos da otimização FROM Reserves R, Sailors S
Consulta
WHERE R.sid=S.sid AND SQL
R.bid=100 AND S.rating>5
• Enumerar possíveis planos
Consulta
– em geral, apenas um subconjunto de possíveis ∏sname(σ bid=100 ∧ rating > 5 (Reserves sid=sid Sailors)) Álgebra
planos são considerados Relacional
• Estimar o custo dos planos enumerados ∏
sname

• Selecionar o plano com menor custo Plano de


σ bid=100 execução
estimado rating > 5

sid=sid

Reserves Sailors

Otimização de consultas João B. Rocha-Junior 4 Otimização de consultas João B. Rocha-Junior 5

4 5

1
Agenda Consultas SQL vs. álgebra relacional
• Introdução • Toda consulta SQL pode ser expressada através em
álgebra relacional
• Enumerar possíveis planos
– o SELECT corresponde a projeção (∏)
– traduzir consultas SQL em álgebra relacional
– o WHERE corresponde a restrição (σ)
– equivalências em álgebra relacional – o FROM corresponde ao produto cartesiano (×)
• Avaliando um plano – as demais clausulas possuem operadores próprios
• Estimando o custo de um plano SELECT S.sname
FROM Reserves R, Sailors S
• Resumo WHERE R.sid=S.sid AND
R.bid=100 AND S.rating>5
∏sname(σ bid=100 ∧ rating > 5 (Reserves sid=sid Sailors))

Otimização de consultas João B. Rocha-Junior 6 Otimização de consultas João B. Rocha-Junior 7

6 7

Equivalência: álgebra relacional


Equivalência em álgebra relacional
• Restrição (σ)
• Duas expressões da álgebra relacional são – cascata
equivalentes se σ c1∧c2∧…∧cn ≡ σ c1(σ c2(… (σ cn(R))…))

– para a mesma entrada produzem a mesma saída • útil quando apenas parte da condição é atendida, mover
apenas algumas condições
• A equivalência de expressões é um passo – comutativa
importante para identificar planos alternativos σ c1(σ c2(R)) ≡ σ c2(σ c1(R))
– colocar uma restrição antes de um join pode • a ordem dos operadores não altera o produto

reduzir bastante o curso de processamento • Projeção(∏)


– cascata
∏ c1∧c2∧…∧cn ≡ ∏ c1(∏ c2(… (∏ cn(R))…))
• eliminações sucessivas equivale a eliminar todos de uma vez

Otimização de consultas João B. Rocha-Junior 8 Otimização de consultas João B. Rocha-Junior 9

8 9

Equivalência: álgebra relacional Equivalência: álgebra relacional


• Join ( ) e Produto Cartesiano (×) • Envolvendo mais de um tipo de operador
– comutativa – comutativa: restrição e projeção
R×S ≡ S x R ∏a(σc(R)) ≡ σa(∏c(R))
R S≡S R • desde que todo atributo envolvido na restrição (outer) esteja
• permite escolher qual relação ficará por fora (outer) e por incluído na projeção
dentro (inner) durante a execução – restrição e produto cartesiano para formar um join
– associativa σc(R × S) ≡(R c S)
R × (S × T) ≡ (R x S) x T – cascata: restrição e produto cartesiano
R (S T) ≡ (R S) T σc (R x S)≡ σc1∧c2∧c3(R x S)
• independente da ordem o resultado é o mesmo σc1(σc2(σc3(R x S)))
σc1(σc2(R) X σc3(S))

Otimização de consultas João B. Rocha-Junior 10 Otimização de consultas João B. Rocha-Junior 11

10 11

2
Plano avaliado inclui métodos de acesso
Agenda SELECT S.sname
FROM Reserves R, Sailors S
• Introdução WHERE R.sid=S.sid AND
R.bid=100 AND S.rating>5
• Enumerar possíveis planos
– traduzir consultas SQL em álgebra relacional ∏sname(σ bid=100 ∧ rating > 5 (Reserves sid=sid Sailors))

– equivalências em álgebra relacional


∏ ∏ (on-the-fly)
• Avaliando um plano
sname sname

• Estimando o custo de um plano σ bid=100 rating > 5


σ bid=100 rating > 5 (on-the-fly)

• Resumo
sid=sid sid=sid (nested loop)

Reserves Sailors (file scan) Reserves Sailors (file scan)


Otimização de consultas João B. Rocha-Junior 12 Otimização de consultas João B. Rocha-Junior 13

12 13

Avaliação encadeada (pipeline) Otimizador R


• O resultado de uma operação ∏ • Os SGBDs atuais foram influenciados pelo Sistema R
(on-the-fly)
é enviado para outra de forma sname
• Algumas decisões de otimização
encadeada σ bid=100 rating > 5 (on-the-fly) – utilizar dados estatísticos para estimar o custo
– segue o padrão iterador – considerar apenas planos binários para reduzir o número
– produz os primeiros resultados de possiblidades
rapidamente (nested loop)
sid=sid – focar apenas nas consultas SQL não aninhadas
• Pode ou não materializar • consultas aninhadas são tratadas individualmente
Reserves Sailors
parte dos dados – não eliminar entradas duplicadas em projeções
– quando não há materialização • apenas como último passo, quando um DISTINCT for utilizado
• não há custo de I/O (on-the-fly) – utilizar modelo de custo que computa CPU e I/O
– materialização é encapsulada
pelo iterador

Otimização de consultas João B. Rocha-Junior 14 Otimização de consultas João B. Rocha-Junior 15

14 15

Catálogo (Metadados) Dados estatísticos armazenados no catálogo


• O catálogo contém metadados • Para cada Relação
– metadados são dados (informações) sobre os dados – cardinalidade: número de registros (rows)
• Para cada relação – tamanho: número de páginas
– nome da relação (tabela) e nome do arquivo onde está • Para cada índice
armazenada (ou ponteiro para o início dos dados) – cardinalidade: número de chaves distintas (entradas únicas)
– nome e tipo dos atributos (incluindo tamanho) – tamanho: número de páginas
– tipo de todos os índices associados aos atributos – altura: para índices hierárquicos
– restrições de integridade (chave primária, estrangeira, ...) – intervalo: menor e maior valor das
• Para cada índice chaves armazenadas no índice
– o nome do índice e a estrutura (B+-tree, hash, etc...)
• Para cada view
– nome da view e definição
Otimização de consultas João B. Rocha-Junior 16 Otimização de consultas João B. Rocha-Junior 17

16 17

3
Estimando o tamanho dos resultados
Agenda
• Como os operadores estão encadeados
• Introdução – estimar a quantidade de dados que será produzida por
cada operador é fundamental
• Enumerar possíveis planos
SELECT lista de atributos
– traduzir consultas SQL em álgebra relacional FROM lista de relações
WHERE termo1∧ termo2 ∧… ∧ termon
– equivalências em álgebra relacional
• Por exemplo, nesta consulta
• Avaliando um plano – o número máximo de tuplas no resultado é dado pelo
• Estimando o custo de um plano cartesiano sobre a lista de relações
– cada termo da cláusula WHERE reduz esse número
• Resumo
– fator de redução: é uma taxa que indica o quanto cada
termo pode reduzir o tamanho da entrada (ex. cartesiano)
• considera apenas o termo isoladamente e a entrada
Otimização de consultas João B. Rocha-Junior 18 Otimização de consultas João B. Rocha-Junior 19

18 19

Fatores de redução (FR) Otimização de consulta: exemplo


Número de chaves
distintas em I (índice)
• coluna (atributo ou campo) = valor • Sistema
– com índice (ou dados estatísticos) FR = 1/NK(I) – espaço na memória para 5 páginas, cada página ocupa 4096B
– sem índice ou informação FR = 1/10 • Reserves (sid: integer, bid: integer, day: dates, rname: string)
Pode utilizar no. de entradas
• coluna1 = coluna2 distintas se houver – tabela com 100 000 registros
– com índice nas duas colunas: FR= 1/MAX(NK(I1 ), NK(I2 )) – cada tupla (record) ocupa 40 bytes, aproximadamente 100
– com índice em uma coluna = FR = 1/NK(I) tuplas por página o que dá um total de 1000 páginas
– sem índice ou informação FR = 1/10 – 100 boats distintos (fator redução 1/100)
Pode utilizar no. de entradas
• coluna > valor distintas se houver • Sailors (sid: integer, sname: string, rating: integer, age: real)
– com índice: FR=(High(I)-valor)/(High(I)-Low(I)) – tabela com 40 000 registros
– sem índice ou informação: FR=1/3 – cada tupla ocupa 50 bytes, aproximadamente 80 tuplas por
• coluna IN lista de valores página o que dá um total de 500 páginas
– FR para coluna multiplicado por |lista| – 10 ratings distintos (fator redução 1/10)

Otimização de consultas João B. Rocha-Junior 20 Otimização de consultas João B. Rocha-Junior 21

20 21

Exemplo: calculando o custo em termos de I/Os Exemplo: calculando o custo em termos de I/Os
• Custo= 1000 + 1000*500 = 501.000 • Custo= 500 + 250*1000= 250.500
Reserves (sid, bid, day, rname) ∏ Reserves (sid, bid, day, rname) ∏
Sailors (sid, sname, rating, age) (on-the-fly) Sailors (sid, sname, rating, age) (on-the-fly)
sname sname
Não tem

σ
custo de I/O σ
bid=100 (on-the-fly)
bid=100 rating > 5 (on-the-fly)
(nested loop)
(nested loop) s 10
00
ge sid=sid pa
10
00 Redução de 50% 0 pa ge
g es *5 0 25 s
a sid=sid
0 0p 0p
σ rating > 5 Reserves (file scan)
10
(file scan) (file scan)
500 p
Reserves Sailors

(file scan) Sailors


Otimização de consultas João B. Rocha-Junior 22 Otimização de consultas João B. Rocha-Junior 23

22 23

4
Exemplo: calculando o custo em termos de I/O Exemplo: calculando o custo em termos de I/Os
• Custo= 1000 + 10*500= 6000 • Custo= 500+1000 + 250*10= 4000
∏ (on-the-fly) Reserves (sid, bid, day, rname)
sname
Sailors (sid, sname, rating, age)
Reserves (sid, bid, day, rname) ∏
Sailors (sid, sname, rating, age) sname (on-the-fly)
σ rating > 5
(nested loop)
(nested loop) 25
es 0 *1
10 ag sid=sid 0p
sid=sid *5 0 Redução de 50% 0p
p 0p 25
Redução de 99% 10 σ bid=100 (on-the-fly)
σ rating > 5
σ bid=100 (file scan)

1000 p
(on-the-fly) Sailors

500 p
1000 p
(file scan) Sailors Reserves (file scan)

(file scan) Reserves

Otimização de consultas João B. Rocha-Junior 24 Otimização de consultas João B. Rocha-Junior 25

24 25

Exemplo: calculando o custo em termos de I/O


Agenda
• Custo= 10 + 10*250 = 2510
• Introdução
Reserves (sid, bid, day, rname) ∏
sname
(on-the-fly) • Enumerar possíveis planos
Sailors (sid, sname, rating, age)
– traduzir consultas SQL em álgebra relacional
(nested loop) – equivalências em álgebra relacional
sid=sid • Avaliando um plano
• Estimando o custo de um plano
(on-the-fly) σ bid=100 σ rating > 5 (on-the-fly)
• Resumo

250p
10p

(hash index on bid) Reserves Sailors (file sorted on rating)

Otimização de consultas João B. Rocha-Junior 26 Otimização de consultas João B. Rocha-Junior 27

26 27

Referências
Resumo
• Raghu Ramakrishnan and Johannes Gehrke.
• Existem diversas formas de executar uma Database Management Systems. Third Edition,
uma consulta McGraw-Hill, 2003.

• Passos de um otimizador
– enumerar planos equivalentes
• utilizando equivalência da álgebra relacional
– computar o custo desses planos
• utilizando índices e metadados
– escolher planos com menor custo

Otimização de consultas João B. Rocha-Junior 28 Otimização de consultas João B. Rocha-Junior 29

28 29

5
Otimização de consultas
João B. Rocha-Junior
joao@uefs.br

Departamento de Ciências Exatas


Universidade Estadual de Feira de Santana

30

Você também pode gostar