Starburst

24
Starburst Optimização de Interrogações Francisco Santos

description

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? - PowerPoint PPT Presentation

Transcript of Starburst

Page 1: Starburst

Starburst

Optimização de Interrogações

Francisco Santos

Page 2: Starburst

Agenda

Introdução Objectivo do Starburst Processamento Interrogações Query Graph Model Reescrita de Interrogações Optimização do Plano Bibliografia

Page 3: Starburst

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

Page 4: Starburst

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, …

Page 5: Starburst

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

Page 6: Starburst

Processamento Interrogações

Page 7: Starburst

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’ )

Page 8: Starburst

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.

Page 9: Starburst

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:

Page 10: Starburst

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

Page 11: Starburst

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

Page 12: Starburst

Query Rewrite

aid nome

alunos

inscricoes

Q1.aid = Q3.aidQ1(F) Q3(F)

Q3.nota >= Q1.media + 3

Q3.

cid

= ‘T

FC

T1OP1:

Page 13: Starburst

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

Page 14: Starburst

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:

Page 15: Starburst

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>’:

Page 16: Starburst

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>’:

Page 17: Starburst

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>’:

Page 18: Starburst

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

Page 19: Starburst

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

Page 20: Starburst

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}

Page 21: Starburst

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’}

Page 22: Starburst

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

Page 23: Starburst

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 )

Page 24: Starburst

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