starburst optimização de interrogações francisco santos
Post on 17-Apr-2015
106 Views
Preview:
TRANSCRIPT
Starburst
Optimização de Interrogações
Francisco Santos
Agenda
Introdução Objectivo do Starburst Processamento Interrogações Query Graph Model Reescrita de Interrogações Optimização do Plano Bibliografia
Introdução
O que é a optimização de interrogações?
SQL é uma linguagem declarativa e, como tal, não define o “procedimento” para a execução de uma interrogação
No entanto, a linguagem permite expressar a mesma interrogação de formas diferentes, podendo levar o SGBD a escolher um procedimento de execução (plano) sub-óptimo
Opimização é o processo de escolha do plano mais eficiente para a execução da interrogação
Introdução
Como optimizar uma interrogação?
O optimizador deve elaborar uma representação interna que lhe permita conhecer a interrogação:
Quais as tabelas acedidas? Que predicados foram empregues? Existe junção entre tabelas? Existe aninhamento de interrogações?
Usando a rep. interna, o optimizador transforma as interrogações na sua forma mais declarativa possível
Tendo a interrogação na sua forma mais declarativa possível, é escolhida a estratégia para a sua execução:
Exemplo: acesso ao ficheiro através de um Heap, Indice, Sequência; Join usando o algoritmo de merge-sort, nested loops, hash join, …
Objectivo do Starburst
O objectivo do projecto Starburst (IBM) é o de:
“Analisar as mudanças necessárias aos SGBDs tradicionais de forma a corresponder as necessidades das novas aplicações e tecnologias.” - [SCFL+86]
Exemplos de ‘novas’ aplicações incluem: aplicações estatísticas, CAD, GIS, sistemas gestão documental
Como responder às necessidades das novas aplicações preservando as vantagens dos SGBDs tradicionais?
Controlo de concorrência, recuperação, linguagem especializada para a formulação de interrogações
Processamento Interrogações
Query Graph ModelExemplo:
alunos( aid:string, nome:string, idade:integer, media:real ) inscricoes( aid:string, cid:string, nota:integer )
aid FK Alunos
Q: “Quais são os alunos: aid e nome, cuja nota no TFC é igual ou superior em três unidades à sua média de curso?”
SELECT Q1.aid, Q1.nomeFROM alunos Q1WHERE Q1.aid IN
( SELECT Q3.aid FROM inscricoes Q3
WHERE Q3.nota >= Q1.media + 3 AND Q3.cid = ‘TFC’ )
Query Graph Model
Construtores para o Query Graph Model (QGM):
Qi’s – iteradores, representam acessos a tabelas:
Setformers (F) – podem aparecer no resultado finalQuantifiers (, ) – usados para eliminar tuplos do resultado final
Qi’s – iteradores, representam acessos a tabelas:
Setformers (F) – podem aparecer no resultado finalQuantifiers (, ) – usados para eliminar tuplos do resultado final
Conjunção de Predicados:
p1 p2 … pn
Conjunção de Predicados:
p1 p2 … pn
…p1
pn
Tabelas:
Materializadas – existe na BDDerivadas – gerada a partir de uma operação (interrogação)
Tabelas:
Materializadas – existe na BDDerivadas – gerada a partir de uma operação (interrogação)
Der.Mat.
Query Graph Modelaid nome
…
alunos
…
inscricoes
aid
Q1.aid = Q2.aid
Q1(F) Q2()
Q3(F)
Q3.nota >= Q1.media + 3
Q3.
cid
= ‘T
FC
’
T1OP1:
T2OP2:
Query Rewrite
Regra 1:COND: existe no máximo um tuplo da sub-interrogação que corresponde a cada tuplo da interrogação principal.
ACÇÃO: converter iterador do tipo ‘’ num iterador do tipo ‘F’.
Regra 1:COND: existe no máximo um tuplo da sub-interrogação que corresponde a cada tuplo da interrogação principal.
ACÇÃO: converter iterador do tipo ‘’ num iterador do tipo ‘F’.
Regra 2:COND: OP1 é SELECT, OP2 é SELECT, Q2 iterador do tipo ‘F’, política de eliminação de duplicados é compatível
ACÇÃO: juntar OP1 e OP2, se OP2 elimina duplicados então OP1 também elimina duplicados
Regra 2:COND: OP1 é SELECT, OP2 é SELECT, Q2 iterador do tipo ‘F’, política de eliminação de duplicados é compatível
ACÇÃO: juntar OP1 e OP2, se OP2 elimina duplicados então OP1 também elimina duplicados
Query Graph Modelaid nome
…
alunos
…
inscricoes
aid
Q1.aid = Q2.aid
Q1(F) Q2()
Q3(F)
Q3.nota >= Q1.media + 3
Q3.
cid
= ‘T
FC
’
T1OP1:
T2OP2:
head.distinct = true
body.distinct = preserve
head.distinct = true
body.distinct = preserve
Query Rewrite
aid nome
…
alunos
…
inscricoes
Q1.aid = Q3.aidQ1(F) Q3(F)
Q3.nota >= Q1.media + 3
Q3.
cid
= ‘T
FC
’
T1OP1:
Plan Optimization
Optimizador escolhe o plano de menor custo para a execução da interrogação anterior
Através de uma gramática, as operações de alto nível (caixas do QGM) são convertidas em operações de baixo nível
Esta gramática é designada: Grammar of STrategy AlteRnatives (STARs)
As operações de baixo nível são designadas por: LOw-LEvel Plan OPerations (LOLEPOPs)
Exemplos: ACCESS: converte uma tabela materializada numa cadeia de tuplos GET: aplica uma conjunção de predicados a um conjunto de tuplos
(ref.dos pelo seu TID) e projecta as colunas da tabela acedida SORT: ordena uma cadeia de tuplos segundo um ou mais campos JOIN: faz a junção de duas cadeias de tuplos, obedecendo a uma
conjunção de predicados
Passo 1 – Plano Acesso a Tabelas
TableAccess(T,C,P) =
TableScan(T,C,P)
i I(T) GET(TableScan(i, {TID}, P), T, C, P ), Cond1
TableAccess(T,C,P) =
TableScan(T,C,P)
i I(T) GET(TableScan(i, {TID}, P), T, C, P ), Cond1
TableScan(T,C,P) =
ACCESS(Heap, T, C, P), Armazenamento = ‘Heap’
ACCESS(B+tree, T, C, P), Armazenamento = ‘B+tree’
TableScan(T,C,P) =
ACCESS(Heap, T, C, P), Armazenamento = ‘Heap’
ACCESS(B+tree, T, C, P), Armazenamento = ‘B+tree’
Encontrar métodos eficientes para aceder aos ficheiros; guardar os melhores planos.
STARs para acesso aos ficheiros:
Passo 1 – Plano Acesso a Tabelas
TableAccess
Inscricoes
{aid, nota}
{cid = ‘TFC’}
Argumentos:Nome da Função
Apontadores para definições alternativas
Exemplo: relação ‘Inscricoes’, assumindo índice B+tree ‘Index1’ sobre as colunas ‘<aid,cid>’:
Passo 1 – Plano Acesso a Tabelas
TableScan
Inscricoes
{aid, nota}
{cid = ‘TFC’}
GET
Inscricoes
{aid, nota}
{cid = ‘TFC’}
TableScan
Index1
{TID}
{cid = ‘TFC’}
Exemplo: relação ‘Inscricoes’, assumindo índice B+tree ‘Index1’ sobre as colunas ‘<aid,cid>’:
Passo 1 – Plano Acesso a Tabelas
ACCESS
Heap
Inscricoes
{aid, nota}
{cid = ‘TFC’}
GET
Inscricoes
{aid, nota}
{cid = ‘TFC’}
ACCESS
B+tree
Index1
{TID}
{cid = ‘TFC’}
Plano 2:-Ordenação segundo ‘<aid,cid>’-{cid = ‘TFC’}
Plano 1:-Tuplos desordenados-{cid = ‘TFC’}
Exemplo: relação ‘Inscricoes’, assumindo índice B+tree ‘Index1’ sobre as colunas ‘<aid,cid>’:
Passo 2 – Plano Junção Tabelas
NL – nested loops join HA – hash join P – todos os predicados elegíveis JP – predicados da junção IP – predicados só elegíveis para a relação interior (i.e. só referem
colunas da relação interior) HP – predicados da junção em forma de igualdade (ex.: T1.x = T2.y )
Glue(T, P) – acede aos tuplos da tabela ‘T’, que respeitam os predicados ‘P’, usando o planos de menor custo
JoinMethod(T1,T2,P) =
JOIN(NL, Glue(T1, ), Glue(T2, JPIP), JP, P – (JPIP)) JOIN(HA, Glue(T1, ), Glue(T2, IP), HP, P – IP), HP
JoinMethod(T1,T2,P) =
JOIN(NL, Glue(T1, ), Glue(T2, JPIP), JP, P – (JPIP)) JOIN(HA, Glue(T1, ), Glue(T2, IP), HP, P – IP), HP
Encontrar métodos eficientes para juntar as tabelas
Passo 2 – Plano Junção Tabelas
JoinMethod
Alunos
Inscricoes
{T1.aid = T2.aid, T2.nota >= T1.media + 3, T2.cid = ‘TFC’}
Argumentos:
Nome da Função
Apontadores para definições alternativas
Passo 2 – Plano Junção Tabelas
JOIN
NL
Glue(T1, )
Glue(T2, JPIP)
JP
P – (JPIP)
JOIN
HA
Glue(T1, )
Glue(T2, IP)
HP
P – IP
Join predicates = JP = {T1.aid = T2.aid, T2.nota >= T1.nota + 3}
Inner predicates = IP = {T2.cid = ‘TFC’}
Hashable predicates = HP = {T1.aid = T2.aid}
Join predicates = JP = {T1.aid = T2.aid, T2.nota >= T1.nota + 3}
Inner predicates = IP = {T2.cid = ‘TFC’}
Hashable predicates = HP = {T1.aid = T2.aid}
Passo 2 – Plano Junção Tabelas
JOIN
NL
JP
P – (JPIP) =
Exemplo: geração do plano para o algoritmo nested loops
Glue
Alunos
Glue
Inscricoes
JPIP
Join predicates = JP = {T1.aid = T2.aid, T2.nota >= T1.nota + 3}
Inner predicates = IP = {T2.cid = ‘TFC’}
Join predicates = JP = {T1.aid = T2.aid, T2.nota >= T1.nota + 3}
Inner predicates = IP = {T2.cid = ‘TFC’}
Passo 2 – Plano Junção Tabelas
JOIN
NL
JP
ACCESS
Heap
Alunos
{aid, nome, media}
GET
Inscricoes
{aid, nota}
JPIP
ACCESS
B+tree
Index1
{TID}
JPIP
Exemplo: geração do plano para o algoritmo nested loops
Index Nested Loop Join:
• para cada tuplo ‘Ta’ da tabela Alunos pesquisar no índice dos tuplos ‘Ti’ da tabela Inscricoes aqueles cujo aid coincide: Ta.aid = Ti.aid
• se Ti.cid = ‘TFC’ e Ti.nota >= Ta.media + 3, adicionar tuplo <Ta.aid, Ta.nome> ao resultado
• Custo = balunos + nalunos * cindex1
Passo 2 – Plano Junção Tabelas
JOIN
HA
HP
P – IP
ACCESS
Heap
Alunos
{aid, nome, media}
ACCESS
Heap
Inscricoes
{aid, nota}
IP
Exemplo: geração do plano para o algoritmo hash join
Hash Join:
• particionar Alunos e Inscricoes com uma função de hash ‘h’ sobre os atributos hashable da junção: HP = {T1.aid = T2.aid}
• construir um índice em memória para a relação mais pequena
• tuplos que satisfaçam a condição Ta.aid = Ti.aid, Ti.cid = ‘TFC’ e Ti.nota >= Ta.media + 3 adicionar ao resulado
• Custo = 3 * (balunos + binscricoes )
Bibliografia
[SCFL+86] - P. Schwarz, W. Chang, J. C. Freytag, G. Lohman, “Extensibility in the Starburst Database System”, IBM Almaden Research Center, 1986
[HFLP89] - L. Haas, J. Freytag, G. Lohman, H. Pirahesh, “Extensible Query Processing in Starburst”, IBM Almaden Research Center, 1989
[LFL88] – M. Lee, J. Freytag, G. Lohman, “Implementing an Interpreter for Functional Rules in a Query Optimizer”, IBM Almaden Research Center, 1988
[PHH92] – H. Pirahesh, J. Hellerstein, W. Hasany, “Extensible/Rule Based Query Rewrite Optimization in Starburst”, IBM Almaden Research Center, 1992
[Loh88] – G. Lohman, “Grammar-like Functional Rules for Representing Query Optimization Alternatives”, IBM Almaden Research Center, 1988
[SKS06] - Silberschatz, Korth, Sudarshan, “Database System Concepts”, Cap. 2 e 13, McGraw-Hill, 5 th edition, 2006
[RG03] – R. Ramakrishnan, J. Gehrke, “Database Management Systems”, Cap. 4, McGraw-Hill, 3 rd edition, 2003
[Ives05] – Z. Ives, “Query Optimization Strategies”, University of Pennsylvania, 2005, www.seas.upenn.edu/~zives/cis650/slides/6-query-opt.ppt
[PHH92] – H. Pirahesh, J. Hellerstein, W. Hasan, “Extensible/Rule Based Query Rewrite Optimization in Starburst”, SIGMOD Conference, 1992, www.mcs.vuw.ac.nz/~db/publications/comp443Prest.ppt
[WikiHash] – Wikipedia, “Hash Function”, http://en.wikipedia.org/wiki/Hash_function
top related