Starburst Optimização de Interrogações Francisco Santos.
Transcript of Starburst Optimização de Interrogações Francisco Santos.
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