UNIVERSIDADE FEDERAL DE CAMPINA GRANDE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO (DSC / CEEI) DISCIPLINA BANCO DE DADOS / PROF. MARCUS SAMPAIO Consultas em Banco de Dados Amplamente Distribuídos Cláudio E. C. Campelo Helton Santa Cruz 26 de Abril de 2006 Roteiro • • • • • • • • • • Processamento de consultas Otimizadores de Consultas Otimizadores em Consultas Distribuidas Programação Dinâmica Iterativa IDP Standard vs Balanced BestPlan vs BestRow Seleção de bons sub-planos Avaliação de Desempenho Conclusões Referências Consultas em Banco de Dados Amplamente Distribuídos 2 Processamento de consultas Passos na execução de consultas • Análise e tradução • Otimização • Avaliação Consultas em Banco de Dados Amplamente Distribuídos 3 Processamento de consultas Consultas em Banco de Dados Amplamente Distribuídos 4 Otimizadores de Consultas Recebe uma consulta feita de forma declarativa com SQL ou OQL e encontra a melhor forma de executar a consulta; Passos: a) b) c) d) e) quais índices serão utilizados para executar a consulta; qual a ordem de execução das operações da consulta; enumera planos alternativos de execução; estima os custos de todos usando um modelo de custos; escolhe o plano com menor custo; Consultas em Banco de Dados Amplamente Distribuídos 5 Otimizadores de Consultas Classes de Algoritmos de Otimização: • Busca Exaustiva – Tempo de complexidade Exponencial, Programação Dinâmica; • Heurísticas – Tempo e complexidade Polinomial, Algoritmos Gulosos; • Algoritmos Randômicos – Tempo de execução indefinido (Algoritmo indeterminístico); Consultas em Banco de Dados Amplamente Distribuídos 6 Programação Dinâmica • Aplicável a problemas onde a solução ótima pode ser computada a partir da solução ótima previamente calculada e memorizada • Componente Central de um otimizador - Estratégia de pesquisa ou o algoritmo de enumeração • O algoritmo de enumeração clássico de otimizadores é baseado em programação dinâmica Consultas em Banco de Dados Amplamente Distribuídos 7 Programação Dinâmica • Existe um tradeoff entre a complexidade de um algoritmo de enumeração e a qualidade dos planos gerados pelo algoritmo; • Programação dinâmica representa o ponto extremo complexidade exponencial e gera planos ótimos; • Num sistema centralizado: Tempo de complexidade:O(3n ) Espaço de complexidade : O(2n) Consultas em Banco de Dados Amplamente Distribuídos 8 Programação Dinâmica Consultas em Banco de Dados Amplamente Distribuídos 9 Programação Dinâmica O algoritmo trabalha na forma bottom-up: • • • • Gera plano de acesso para todas as tabelas envolvidas – função accesPlans; considera todas as formas possíveis de junção das tabelas com chamadas à função joinPlans; Os planos de junção de n relações são passados para a função finalizePlans onde tornam-se planos completos para a consulta (operadores de projeção, junção ou group-by são incorporados, se necessário); Descarta blocos de construção anteriores a cada passo. Função prunePlans; Consultas em Banco de Dados Amplamente Distribuídos 10 Programação Dinâmica Exemplo: Passo 1: Mais Rápida! Passo 2: Não é Enumerada! Consultas em Banco de Dados Amplamente Distribuídos 11 Algoritmos Gulosos • É uma alternativa para programação dinâmica. • Sempre realiza a escolha que parece ser a MELHOR no momento; • Rodam mais rápido que a programação dinâmica; • Também apresenta três fases e constrói planos de uma forma bottom-up. Consultas em Banco de Dados Amplamente Distribuídos 12 Algoritmos Gulosos Consultas em Banco de Dados Amplamente Distribuídos 13 Algoritmos Gulosos • Também faz uso das mesmas funções para gerar planos(accessPlan, joinPlans e finalizePlans). • Na segunda fase ela faz uma simples e rigorosa seleção das ordens das junções. • Aplica uma função de avaliação de plano para selecionar a melhor nova junção. Consultas em Banco de Dados Amplamente Distribuídos 14 Algoritmos Gulosos • Exemplo: Uma junção da consulta com as tabelas A,B,C,D e E. – A função de avaliação de plano poderia determinar que a junção de A e D deveria ser primeiro. – Depois faz a junção do resultado de A e D com C. Depois B e E. – E finalmente a junção seria o resultado: • O resultado depende da função de avaliação de plano. Consultas em Banco de Dados Amplamente Distribuídos 15 Algoritmos Gulosos • Sistema Centralizado – Tempo de complexidade: O(n3) – Espaço de complexidade: O(n) Consultas em Banco de Dados Amplamente Distribuídos 16 Otimizadores em Consultas Distribuidas • Otimizadores de consultas baseados em programação dinâmica, são facilmente estendidos ! • Como o algoritmo pode estendido para otimizar consultas de sistemas de banco de dados distribuídos ?? R- variações nas funções: accessPlans, joinPlans e finalizePlans Consultas em Banco de Dados Amplamente Distribuídos 17 Otimizadores em Consultas Distribuidas • Se a tabela for replicada, a função accessPlans deve gerar diferentes planos de acesso para todos os locais onde a tabela estiver replicada; • A função joinPlans deve gerar diferentes planos de junção em ordem para especificar que a junção pode ser realizada: – no local em que a tabela exterior foi produzida; – no local em que a tabela interna foi produzida; – em todos os outros lugares interessantes; Consultas em Banco de Dados Amplamente Distribuídos 18 Otimizadores em Consultas Distribuidas • A função finalizePlans deve acrescentar um operador de transporte se o plano não for executado no local onde os resultados da consulta devem ser retornados. • Precisamos ajustar a função prunePlans e ter cuidado quando for dispensar planos que produzem seus resultados em diferentes locais. Consultas em Banco de Dados Amplamente Distribuídos 19 Otimizadores em Consultas Distribuidas • Exemplo: Se a tabela Emp estiver armazenada em Patos e Sousa e a tabela Dept estiver armazenada somente em Patos • não podemos excluir o plano de acesso table_scan(Emp, Patos) até mesmo se ela é mais cara que o plano de acesso table_scan(Emp,Sousa) Consultas em Banco de Dados Amplamente Distribuídos 20 Otimizadores em Consultas Distribuidas • Um plano de acesso ou de junção P1 deve ser excluído se existir outro plano de acesso ou de junção P2 que envolve as mesmas tabelas e obedece os critérios seguintes: • Para todo i є locais_interessantes(P1) : custo(ship(P1,i)) >= custo(ship(P2,i)) (eq. 1) Consultas em Banco de Dados Amplamente Distribuídos 21 Otimizadores em Consultas Distribuidas Se a fonte e o destino entre dois locais são idênticos, o custo de um ship 0. Ex: cost(ship(table_scan(Emp, Patos), Patos)) = cost(table_scan(Emp, Patos). • Outro caso em que P1 deve ser descartado é se: custo(P1) >= custo(ship(P2,x)) (eq. 2) x = local em que P1 produz os resultados Consultas em Banco de Dados Amplamente Distribuídos 22 Otimizadores em Consultas Distribuidas • Complexidade: – Num sistema distribuído: • tempo: O(S3 x 3n) • espaço: O(S x 2n + S3) • s = (numero de locais onde existe ao menos uma das tabelas envolvidas na consulta) + (o local para onde retorna os resultados) Consultas em Banco de Dados Amplamente Distribuídos 23 Otimizadores em Consultas Distribuidas •Cada ponto representa a consulta na junção de 10 relações •Tempo de execução cresce de acordo com o número de lugares ! • Precisamos de caminhos alternativos para otimizar consultas em sistemas de banco de dados distribuídos. Consultas em Banco de Dados Amplamente Distribuídos 24 Problema – A maioria dos otimizadores comerciais de hoje são baseados em um algoritmo de programação dinâmica; – Devido a sua alta complexidade, o processamento de consultas complexas podem fazer com que o algoritmo não seja interessante; Consultas em Banco de Dados Amplamente Distribuídos 25 Programação Dinâmica Iterativa • Nova classe de algoritmos de enumeração: – Iterative Dynamic Programming • Idéia da IDP: aplicar programação dinâmica iterativamente; • IDP tem complexidade razoável (polinomial); Consultas em Banco de Dados Amplamente Distribuídos 26 Programação Dinâmica Iterativa • Combinação de programação dinâmica com algoritmo guloso; • Oito variações: – Quando uma iteração ocorre (IDP1 vs IDP2); – Os blocos gerados em toda iteração (standard vs balanced); – O numero de blocos produzidos em toda iteração(bestPlan vs bestRow). Consultas em Banco de Dados Amplamente Distribuídos 27 Programação Dinâmica Iterativa Consultas em Banco de Dados Amplamente Distribuídos 28 IDP 1 • Respeita os limites de recursos de uma máquina/aplicação; • Usuário pode limitar o tempo. Consultas em Banco de Dados Amplamente Distribuídos 29 IDP 1 • Vamos assumir os planos de junção de k relações para uma consulta com n tabelas, com n > k; • Não há memória para considerar os planos de junção de (K + 1) ! • O que IDP1 faz nesse ponto ? • IDP1 pára quando: - foram enumerados planos de acesso de k relações; - a memória está cheia; - acaba o time-out. Consultas em Banco de Dados Amplamente Distribuídos 30 IDP 1 Exemplo: junção com 5 tabelas, k = 3 Consultas em Banco de Dados Amplamente Distribuídos 31 IDP 1 Consultas em Banco de Dados Amplamente Distribuídos 32 IDP 1 • Quanto maior o valor de k, maiores recursos; • Se k >= n , se comporta igual a programação dinâmica; • Se k = 2, se comporta igual a algoritmo guloso. Consultas em Banco de Dados Amplamente Distribuídos 33 IDP 1 Complexidade em BD Distrubuído: • Tempo: O(s3 * nk) , para 2 < k < n ; • Espaço: O(s * nk + s3). Consultas em Banco de Dados Amplamente Distribuídos 34 IDP 2 • Aplica algoritmo guloso em cada iteração; • Em seguida, aplica programação dinâmica para encontrar planos; • Continua aplicando o processo nas tabelas temporárias(T) ... Consultas em Banco de Dados Amplamente Distribuídos 35 IDP 2 Complexidade: • Tempo: O(n * (n2 + s3 * 3k)) para muitas tabelas... • Espaço: O(n + s x 2k + s3) para muitas tabelas... Consultas em Banco de Dados Amplamente Distribuídos 36 IDP 1 vs IDP 2 • Ambos os algoritmos aplicam heurísticas para selecionar subplanos; • Ambos fazem uso da programação dinâmica; • Ambos podem facilmente ser otimizador existente baseado PD; integrados Consultas em Banco de Dados Amplamente Distribuídos em um 37 IDP 1 vs IDP 2 • IDP2 - decisões heurísticas primeiro; - aplica a programação dinâmica depois; • IDP1 - começa com a programação dinâmica; - aplica as decisões heurísticas depois; • IDP1 é adaptável e k é um parâmetro opcional; • No IDP2 k tem que ser configurado antes de começar o algoritmo; • IDP2 tem complexidade assintótica menor que IDP1; Consultas em Banco de Dados Amplamente Distribuídos 38 IDP Standard vs Balanced • Diferem nas restrições que eles impõem no tamanho dos blocos selecionados; • A Standard não impõe restrição; • A balanceada restringe o tamanho dos blocos selecionados de duas formas: - O numero de tabelas envolvidas nos subplanos selecionados deve: - ser o mesmo; - ser menor ou igual a | d/2 |, para d = numero de tabelas na lista TODO. Consultas em Banco de Dados Amplamente Distribuídos 39 IDP Standard vs Balanceada Melhores planos: • Balanceadas - em situações em que um plano “bushy” é necessário; • Standard - em outras situações porque consideram blocos maiores. Consultas em Banco de Dados Amplamente Distribuídos 40 IDP Standard vs Balanceada Sub-Plano Selecionado pela versão Standard Plano Ótimo Planos Selecionados Consultas em Banco de Dados Amplamente Distribuídos 41 BestPlan vs BestRow • BestPlan - Somente um único plano é selecionado em cada iteração; • BestRow - estende BestPlan retendo toda entrada da estrutura optPlan; - vários planos incomparáveis envolvendo as mesmas tabelas. • BestRow produz melhores planos que BestPlan; • BestRow possui maior tempo de execução e consome mais memória; Consultas em Banco de Dados Amplamente Distribuídos 42 Selecionar bons Sub Planos • Três classes de funções de avaliação de planos: - Flat; - Ballooning; - Híbrida; Consultas em Banco de Dados Amplamente Distribuídos 43 Selecionar bons Sub Planos • “Flat” - Verifica apenas as propriedades do plano; - Fácil de implementar; - Tempo constante; • “Ballooning” - Gera um plano completo a partir do sub plano e utiliza o custo do completo como métrica para avaliar o sub-plano - Aumenta muito a complexidade, mas gera os melhores planos; • Híbrida - Seleciona alguns sub-planos com uma função “flat” e então aplica “ballooning” para gerar um único. Consultas em Banco de Dados Amplamente Distribuídos 44 Avaliação de desempenho (entre as variantes) • Tempo de otimização IDP1 / k variável / consulta em cadeia com 10 tabelas Consultas em Banco de Dados Amplamente Distribuídos 45 Avaliação de desempenho (entre as variantes) • Tempo de otimização IDP2 / k variável / consulta em cadeia com 10 tabelas Consultas em Banco de Dados Amplamente Distribuídos 46 Avaliação de desempenho (entre as variantes) • Tempo de execução da primeira iteração comparado com as demais para “IDP1-standard-bestRow” Consultas em Banco de Dados Amplamente Distribuídos 47 Avaliação de desempenho (entre as variantes) • Custos IDP1 / k variável / consulta em cadeia com 10 tabelas Consultas em Banco de Dados Amplamente Distribuídos 48 Avaliação de desempenho (entre as variantes) • Custos IDP1 / k variável / consulta em estrela com 10 tabelas Consultas em Banco de Dados Amplamente Distribuídos 49 Avaliação de desempenho (entre as variantes) • Custos IDP2 / k variável / consulta em cadeia com 10 tabelas Consultas em Banco de Dados Amplamente Distribuídos 50 Avaliação de desempenho (entre as variantes) • Custos IDP2 / k variável / consulta em estrela com 10 tabelas Consultas em Banco de Dados Amplamente Distribuídos 51 Avaliação de desempenho (entre as variantes) • Conclusões – As variantes “bestRow” produzem planos melhores que “bestPlan”; – As variantes “Balanced” produzem planos melhores que as “Standard” – Tanto para IDP1 como para IDP2 a melhor opção é “Balanced-bestRow” Consultas em Banco de Dados Amplamente Distribuídos 52 Avaliação de desempenho (IDP X “Dynamic Programming” X 2PO) • Custos por tempo de execução s = 3 / consulta com 10 tabelas Estrela Cadeia Consultas em Banco de Dados Amplamente Distribuídos 53 Conclusões • IDP produz, na maioria das situações, planos muito bons devido a programação dinâmica e overhead aceitável usando heurísticas se necessário; • O IDP produz melhores planos que outros algoritmos em situações que a programação dinâmica não viável; • Facilmente integráveis a um otimizador existente baseado em programação dinâmica; Consultas em Banco de Dados Amplamente Distribuídos 54 Conclusões • IPD também é capaz de se adaptar em casos onde não existem recursos suficientes disponíveis ou a consulta é muito complexa para a programação dinâmica. •IDP é melhor que aproximações randômicas e heurísticas para otimização de consultas. Consultas em Banco de Dados Amplamente Distribuídos 55 Conclusões • IDP1 e IDP2 poderiam ser combinados - Assim, o otimizador sempre gerará planos seguros porque IDP1 é adaptável e usuários podem sobrescrever valores “default” de k quando for usar IDP2 no processo de otimização. • Testes se tornam difiíceis diante da alta complexidade. Consultas em Banco de Dados Amplamente Distribuídos 56 Referências DONALD KOSSMANN and KONRAD STOCKER. ACM Transactions on Database Systems, Vol. 25, No. 1, March 2000, Pages 43–82. • Consultas em Banco de Dados Amplamente Distribuídos 57 Agradecemos a atenção! Consultas em Banco de Dados Amplamente Distribuídos 58