A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Optimização de Interrogações

Apresentações semelhantes


Apresentação em tema: "Optimização de Interrogações"— Transcrição da apresentação:

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

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

3 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

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

5 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

6 Processamento Interrogações

7 Query Graph Model Exemplo:
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.nome FROM alunos Q1 WHERE Q1.aid IN ( SELECT Q3.aid FROM inscricoes Q WHERE Q3.nota >= Q1.media AND Q3.cid = ‘TFC’ ) Alunos: tabela de alunos, onde consta a sua média de curso Inscricoes: tabela contendo as inscrições nas cadeiras do curso, onde ‘nota’ representa a nota obtida à cadeira Ratificação Query alternativa: SELECT Q1.aid, Q1.nome FROM alunos Q1, inscricoes Q3 WHERE Q1.aid = Q3.aid and Q3.cid = 'TFC' and Q3.nota >= Q1.media + 3 Média é actualizada da seguinte forma: -- actualizar a nota média com base na média aritmética -- das notas que o aluno teve nas disciplinas update alunos set media = t1.media from ( select aid, avg( cast( nota as real ) ) AS media from inscricoes group by aid ) t1 where alunos.aid = t1.aid

8 Query Graph Model Construtores para o Query Graph Model (QGM):
Qi’s – iteradores, representam acessos a tabelas: Setformers (F) – podem aparecer no resultado final Quantifiers (, ) – usados para eliminar tuplos do resultado final Conjunção de Predicados: p1  p2  …  pn p1 pn Quantifiers are represented by dark circles in the QGM. They provide a mechanism to pass information between boxes. F: ForEach - regular tuple variable A: ALL - universal quantifier E: EXISTS - existential quantifier S: Scalar - scalar subquery Tabelas: Materializadas – existe na BD Derivadas – gerada a partir de uma operação (interrogação) Der. Mat.

9 Query Graph Model aid nome Q1.aid = Q2.aid aid … alunos … inscricoes
T1 OP1: aid nome Q1(F) Q2() Q1.aid = Q2.aid aid T2 OP2: Q3(F) Q3.cid = ‘TFC’ Q3.nota >= Q1.media + 3 alunos inscricoes

10 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 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

11 Query Graph Model aid nome Q1.aid = Q2.aid aid … alunos … inscricoes
T1 OP1: aid nome head.distinct = true body.distinct = preserve Q1(F) Q2() Q1.aid = Q2.aid aid T2 OP2: head.distinct = true body.distinct = preserve Q3(F) Q3.cid = ‘TFC’ Q3.nota >= Q1.media + 3 HEAD.DISTINCT = TRUE – se a tabela tiver valores distintos (i.e. não há dois tuplos diferentes com atributos iguais) BODY.DISTINCT: ENFORCE – a operação tem de eliminar tuplos para garantir ‘head.distinct = TRUE’ PRESERVE – operação pode manter os duplicados porque ‘head.distinct = FALSE’ ou porque pela sua natureza não gera duplicados PERMIT – a operação pode gerar ou eliminar duplicados arbirtrariamente (ex.: note-se que para o quantificador existêncial e para o universal é indiferente se existem duplicados ou não: 4 >= ALL {1, 2, 2, 4, 5, 5} o mesmo para ANY, SOME, EXISTS e IN) alunos inscricoes

12 Query Rewrite aid nome … alunos … inscricoes T1 OP1: Q1.aid = Q3.aid
Q1(F) Q3(F) Q3.cid = ‘TFC’ Q3.nota >= Q1.media + 3 Equivalente à query: SELECT Q1.aid, Q1.nome FROM alunos Q1, inscricoes Q3 WHERE Q1.aid = Q3.aid and Q3.cid = 'TFC' and Q3.nota >= Q1.media + 3 alunos inscricoes

13 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

14 Passo 1 – Plano Acesso a Tabelas
Encontrar métodos eficientes para aceder aos ficheiros; guardar os melhores planos. STARs para acesso aos ficheiros: TableAccess(T,C,P) = TableScan(T,C,P) i I(T) GET(TableScan(i, {TID}, P), T, C, P ), Cond1 Parâmetro T é a tabela armazenada, C é o conjunto de colunas a aceder, P conjunto de predicados a aplicar, i sobre a tabela T a usar O STAR TableAccess acede à tabela armazenada e obtém a sequência de tuplos que obedecem aos predicados P. Se a condição Cond1 for verdadeira a segunda alternativa é executada uma vez por cada índice sobre a tabela T para aceder ao index 1 e a sequência de identificadores de tuplos resultante vai ser usada para obter (GET) as colunas C da tabela T. TableScan(T,C,P) = ACCESS(Heap, T, C, P), Armazenamento = ‘Heap’ ACCESS(B+tree, T, C, P), Armazenamento = ‘B+tree’

15 Passo 1 – Plano Acesso a Tabelas
Exemplo: relação ‘Inscricoes’, assumindo índice B+tree ‘Index1’ sobre as colunas ‘<aid,cid>’: Apontadores para definições alternativas TableAccess Inscricoes {aid, nota} {cid = ‘TFC’} Nome da Função Argumentos:

16 Passo 1 – Plano Acesso a Tabelas
Exemplo: relação ‘Inscricoes’, assumindo índice B+tree ‘Index1’ sobre as colunas ‘<aid,cid>’: TableScan Inscricoes {aid, nota} {cid = ‘TFC’} GET Inscricoes {aid, nota} {cid = ‘TFC’} TableScan Index1 {TID} {cid = ‘TFC’}

17 Passo 1 – Plano Acesso a Tabelas
Exemplo: relação ‘Inscricoes’, assumindo índice B+tree ‘Index1’ sobre as colunas ‘<aid,cid>’: Plano 2: Ordenação segundo ‘<aid,cid>’ {cid = ‘TFC’} ACCESS Heap Inscricoes {aid, nota} {cid = ‘TFC’} GET Inscricoes {aid, nota} {cid = ‘TFC’} Plano 1: Tuplos desordenados {cid = ‘TFC’} ACCESS B+tree Index1 {TID} {cid = ‘TFC’}

18 Passo 2 – Plano Junção Tabelas
Encontrar métodos eficientes para juntar as tabelas JoinMethod(T1,T2,P) = JOIN(NL, Glue(T1, ), Glue(T2, JPIP), JP, P – (JPIP)) JOIN(HA, Glue(T1, ), Glue(T2, IP), HP, P – IP), HP   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 Argumentos JOIN: join method, outer stream and required properties on that stream, inner stream and required properties on that stream, predicates applicable by that join method, residual predicates to apply after the join ) P – IP e não P – HP: colisões da função de hash, se h( expr1 ) = h( expr2 ) não garante que expr1 seja igual à expr2, necessário voltar a testar o predicado expr1 = expr2 => h( expr1 ) = h( expr2 ) h( expr1 )  h( expr2 ) => expr1  expr2 h( expr1 ) = h( expr2 ) não implica que expr1 seja igual à expr2

19 Passo 2 – Plano Junção Tabelas
Apontadores para definições alternativas JoinMethod Alunos Inscricoes {T1.aid = T2.aid, T2.nota >= T1.media + 3, T2.cid = ‘TFC’} Nome da Função Argumentos:

20 Passo 2 – Plano Junção Tabelas
JOIN NL Glue(T1, ) Glue(T2, JPIP) JP P – (JPIP) 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}

21 Passo 2 – Plano Junção Tabelas
Exemplo: geração do plano para o algoritmo nested loops JOIN NL JP P – (JPIP) =  Glue Alunos Glue Inscricoes JPIP Join predicates = JP = {T1.aid = T2.aid, T2.nota >= T1.nota + 3} Inner predicates = IP = {T2.cid = ‘TFC’}

22 Passo 2 – Plano Junção Tabelas
Exemplo: geração do plano para o algoritmo nested loops JOIN NL JP ACCESS Heap Alunos {aid, nome, media} GET Inscricoes {aid, nota} JPIP 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 Cindex1 = hindex + 1 Se existirem indices sobre ambas as tabelas, usar como outer-relation (scan) aquela que tem menos tuplos ACCESS B+tree Index1 {TID} JPIP

23 Passo 2 – Plano Junção Tabelas
Exemplo: geração do plano para o algoritmo hash join JOIN HA HP P – IP ACCESS Heap Alunos {aid, nome, media} ACCESS Heap Inscricoes {aid, nota} IP Custo: ler tuplos da tabela e escrever conjuntos de hash x 2 (duas tabelas) + construir o índice em memória para a tabela mais pequena Relação que fica em memória chama-se build a outra é a probe relation. É construido o indice hash em memória para a tabela mais pequena porque, sendo um índice denso (porque é hash => não é clustered) vai ter uma entrada por cada entrada na tabela, tabela maior => indice maior. Poupar memória e tentar trabalhar com uma das tabelas em memória. Se nenhuma couber, então é mais provável que encontre o tuplo que satisfaz a condição de junção em memória para a relação mais pequena. 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 )

24 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, 5th edition, 2006 [RG03] – R. Ramakrishnan, J. Gehrke, “Database Management Systems”, Cap. 4, McGraw-Hill, 3rd edition, 2003 [Ives05] – Z. Ives, “Query Optimization Strategies”, University of Pennsylvania, 2005, [PHH92] – H. Pirahesh, J. Hellerstein, W. Hasan, “Extensible/Rule Based Query Rewrite Optimization in Starburst”, SIGMOD Conference, 1992, [WikiHash] – Wikipedia, “Hash Function”,


Carregar ppt "Optimização de Interrogações"

Apresentações semelhantes


Anúncios Google