Algoritmos de Processamento e Otimização de Consultas Adriano Douglas Girardello Ana Paula Fredrich Tiago Alexandre Schulz Sippert 1 Introdução Este trabalho aborda as técnicas utilizadas por um Sistema Gerenciador de Banco de Dados para processar, otimizar e executar consultas de alto nível 2 Passos do Processamento de uma Consulta  Análise Léxica  Análise Sintática  Validação das análises  Otimizador de Consulta  Gerador de código  Processador em tempo de execução  Pode ser gerado erro nesta etapa 2 Passos do Processamento de uma Consulta: Quatro Estágios  Moldar a Consulta em Alguma Forma Interna  Converter para a Forma Canônica  Escolher Procedimentos Candidatos de Baixo Nível  Gerar Planos de Consultas e Escolher o mais  Econômico 2.1 Moldar a Consulta em Alguma Forma Interna    Conversão da consulta original para manipulação pela máquina, eliminando peculiaridades Podem ser escolhidas  Árvore de Sintaxe Abstrata  Árvore de Consulta Em geral é escolhida álgebra relacional 2.2 Converter para a Forma Canônica  Otimizações não referentes aos valores dos dados ou aos acessos físicos  Regras de transformação  Várias formas de escrita de uma consulta  Converter a representação original para uma mais eficiente 2.3 Escolher Procedimentos Candidatos de Baixo Nível  Como executar a consulta  Levar em consideração     Existência de índices, caminhos de acesso  Agrupamento físico, distribuição dos valores Para cada operação de baixo nível existem vários procedimentos implementados Cada procedimento tem a fórmula de custo O otimizador escolhe qual procedimento implementar para cada operação de baixo nível 2.4 Gerar Planos de Consultas e Escolher o mais Econômico  Elaborado um conjunto de planos de consulta  Escolhido o melhor desses planos  Muitos planos candidatos  Tarefa de escolha demorada  Limite de planos gerados   Atribuição de peso de execução (soma dos custos individuais) Avaliação dos resultados individuais 3 Traduzindo Consultas SQL para Álgebra Relacional    Linguagem SQL utilizada na maioria dos bancos comerciais Cada consulta SQL é composta de blocos de consultas, que formam as unidades básicas Unidade básica é transformada e otimizada 4 Algoritmo para Ordenação Externa  Ordenação é um dos algoritmos principais  Utilizado quando ocorre ORDER BY  Também utilizado em:   JOIN  UNION  INTERSECTION  PROJECT Adequada para registros grandes que não cabem totalmente em memória 4 Algoritmo para Ordenação Externa  Utiliza ordenação sort-merge  Ordena primeiramente sub-arquivos  Após faz a fusão nos sub-arquivos  Exige espaço de buffer na memória 5.1 Implementação da Operação SELECT  Várias opções de implementação  Podem ser divididos em:    Métodos de busca para seleção simples  Métodos de busca para seleções complexas O otimizador deve escolher o método apropriado para cada operação SELECT Escolha do método com o menor custo estimado 5.1.1 Métodos de Busca para Seleções Simples  S1 Busca Linear: Força Bruta  S2 Busca Binária  S3 Utilização de Índice Primário: Chave Hash    S4 Utilização de Índice Primário para Recuperar Registros Múltiplos S5 Utilização de um Índice Cluster para Recuperação de Múltiplos Registros S6 Utilização de um Índice Secundário em uma Comparação de Igualdade 5.1.2 Métodos de Busca para Seleções Complexas    S7 Seleção Conjuntiva Utilizando um Índice Individual S8 Seleção Conjuntiva Utilizando um Índice Composto S9 Seleção Conjuntiva por Meio da Integração de Registros 5.1 Implementação da Operação SELECT  Se existir caminho de acesso direto   Se não existir caminho     O método correspondente é utilizado É utilizado força bruta para escolha Otimizar consultas de seleção conjuntiva (AND) Otimizador sempre escolhe a consulta que retorna o menor número de registros Seleção disjuntiva é muito mais difícil de otimizar (OR) 5.2 Implementação da Operação JOIN    Uma das operações que mais consome tempo de consulta Possibilidade de duas ou mais vias (dois ou mais arquivos) O número de maneiras para executar as junções múltiplas aumenta rapidamente 5.2.1 Métodos para a Implementação de Junções  J1 Junção de Laços Aninhados  J2 Junção de Laço Único  J3 Junção Sort-Merge  J4 Junção-Hash 5.2.2 Efeitos da Disponibilidade de Espaço de Buffer  Efeito importante sobre operações de junção   Ler para a memória a quantia máxima de blocos do arquivo   Tamanho do buffer Reduz o número de acessos ao disco Quando o buffer está cheio ele é escrito no disco 6 Combinação de Operações Usando Pipelines      Cada SQL é traduzida em uma expressão composta de várias operações Cada operação gera arquivos temporários gerando sobrecarga excessiva Utilizar códigos de execução correspondentes que realizem uma só consulta Criar dinamicamente código de execução Conforme resultado é produzido pode ser utilizado para as próximas operações 7 Utilização de Heurísticas na Otimização de Consultas     Regras heurísticas para muda representação interna Otimizado a partir da análise sintática Uma das principais heurísticas é utilizar SELECT e PROJECT antes de aplicar o JOIN As operações SELECT e PROJECT reduzem o tamanho do arquivo de entrada para o JOIN 7.1 Notações de Árvores de Consulta e de Grafos de Consultas  Árvore de consulta:     Estrutura de dados de árvore correspondente a uma expressão algébrica relacional Representa relações de entrada como nós folhas e operações como nós internos Execução dos nós internos até chegar à raiz No final produz a relação de resultados da consulta 7.2 Conversões de Árvores de Consulta em Planos de Execução de Consultas   O plano de execução inclui informações sobre os métodos de acesso disponíveis para cada relação Inclui algoritmos a serem utilizados na computação dos operadores 8 Utilização de Seletividade e Estimativa de Custo na Otimização de Consultas   Otimizador não deve depender somente de heurísticas Estimar e comparar custos usando diferentes estratégias  Escolher a estratégia com menor custo  Estimativas precisas são necessárias  Comparação de maneira correta e realista  Limitar número de estratégias 8.1 Componentes do Custo para a Execução de uma Consulta  1. Custo de Acesso ao Armazenamento Secundário  2. Custo de Armazenamento  3. Custo de Computação  4. Custo de Uso de Memória  5. Custo de Comunicação 9 Otimização Semântica de Consultas    Utilização de restrições no banco de dados para tornar uma consulta mais eficiente Pode ser utilizada em conjunto com as outras técnicas Otimizador semântico verifica a existência de restrições.   Dependendo das restrições ele modifica a consulta ou nem a executa Economiza tempo considerável de processamento 9 Otimização Semântica de Consultas    Número de restrições X Tempo de execução Pesquisar muitas restrições para ver quais são aplicadas realmente Bancos de Dados Futuros:  Técnicas de otimização semântica podem ser incorporadas totalmente ao SGBD 10 Otimização Física  Pode ser dividido em dois discos  Permite acessos paralelos  Escolha de boa distribuição dos dados  Fatiamento de disco:  Divide as tuplas de relações individuais entre os diversos discos  Ligação física ótima difere entre consultas  Administrador do BD escolhe melhor ligação 11 Estatísticas de Bancos de Dados  Utilizado na seleção de caminhos de acesso  Uso das chamadas estatísticas no catálogo  Listamos estatísticas em dois exemplos:   DB2  Ingres Tais estatísticas são usadas para entender como o banco é usado e como otimizá-lo 11.1 Estatísticas do BD2   Para cada tabela básica:  Cardinalidade  Número de páginas ocupadas por esta tabela  Fração de "espaço de tabela" ocupado Para cada coluna de cada tabela básica:  Número de valores distintos nesta coluna  Segundo valor mais alto nesta coluna  Segundo valor mais baixo nesta coluna  Somente para colunas indexadas, os dez valores que ocorrem com maior freqüência nesta coluna 11.1 Estatísticas do BD2  Para cada índice:   Uma indicação quanto a ser este um "índice de agrupamento" (isto é, um índice usado para agrupar dados logicamente relacionados em posições fisicamente contíguas no disco). Se for o caso, a fração da tabela indexada ainda em seqüência de agrupamento em cluster.  Número de páginas por folhas neste índice.  Número de níveis neste índice. 11.2 Estatísticas do Ingres   Para cada tabela básica:  Cardinalidade  Número de páginas primárias para esta tabela  Número de páginas de overflow para esta tabela Para cada coluna de cada tabela básica:  Número de valores distintos nesta coluna  Valores máximo, mínimo e médio para esta coluna  Valores efetivos nesta coluna e o número de vezes em que eles ocorrem. Conclusões  Existem muitos métodos de otimização  Métodos de otimização são importantes:    Reduzem tempo de execução  Reduzem custos de processamento  Melhoram o desempenho em geral Existem muitos inibidores ao tentar realizar otimizações no processamento de consultas Inibidores impedem que o otimizador faça uma consulta tão boa quanto poderia