Plano de consulta - Query plan

Um plano de consulta (ou plano de execução de consulta ) é uma sequência de etapas usadas para acessar dados em um sistema de gerenciamento de banco de dados relacional SQL . Este é um caso específico do conceito de modelo relacional de planos de acesso.

Como o SQL é declarativo , normalmente existem muitas maneiras alternativas de executar uma determinada consulta, com desempenho amplamente variável. Quando uma consulta é enviada ao banco de dados, o otimizador de consulta avalia alguns dos diferentes planos corretos possíveis para a execução da consulta e retorna o que considera a melhor opção. Como os otimizadores de consulta são imperfeitos, os usuários e administradores de banco de dados às vezes precisam examinar e ajustar manualmente os planos produzidos pelo otimizador para obter melhor desempenho.

Gerando planos de consulta

Um determinado sistema de gerenciamento de banco de dados pode oferecer um ou mais mecanismos para retornar o plano para uma determinada consulta. Alguns pacotes apresentam ferramentas que irão gerar uma representação gráfica de um plano de consulta. Outras ferramentas permitem que um modo especial seja definido na conexão para fazer com que o DBMS retorne uma descrição textual do plano de consulta. Outro mecanismo para recuperar o plano de consulta envolve consultar uma tabela de banco de dados virtual depois de executar a consulta a ser examinada. No Oracle, por exemplo, isso pode ser obtido usando a instrução EXPLAIN PLAN.

Planos gráficos

A ferramenta Microsoft SQL Server Management Studio , que vem com o Microsoft SQL Server , por exemplo, mostra este plano gráfico ao executar este exemplo de junção de duas tabelas em um banco de dados de amostra incluído:

SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Contact AS c
    ON e.ContactID = c.ContactID
ORDER BY c.LastName

A IU permite a exploração de vários atributos dos operadores envolvidos no plano de consulta, incluindo o tipo de operador, o número de linhas que cada operador consome ou produz e o custo esperado do trabalho de cada operador.

Microsoft SQL Server Management Studio exibindo um plano de consulta de amostra.

Planos textuais

O plano textual fornecido para a mesma consulta na captura de tela é mostrado aqui:

StmtText
----
  |--Sort(ORDER BY:([c].[LastName] ASC))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID], [Expr1004]) WITH UNORDERED PREFETCH)
            |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e]))
            |--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].[Contact].[PK_Contact_ContactID] AS [c]),
               SEEK:([c].[ContactID]=[AdventureWorks].[HumanResources].[Employee].[ContactID] as [e].[ContactID]) ORDERED FORWARD)

Isso indica que o mecanismo de consulta fará uma varredura no índice da chave primária na tabela Employee e uma busca correspondente no índice da chave primária (a coluna ContactID) na tabela Contact para encontrar as linhas correspondentes. As linhas resultantes de cada lado serão mostradas a um operador de junção de loops aninhados, classificadas e retornadas como o conjunto de resultados para a conexão.

Para ajustar a consulta, o usuário deve compreender os diferentes operadores que o banco de dados pode usar e quais podem ser mais eficientes do que outros, ao mesmo tempo que fornece resultados semanticamente corretos da consulta.

Ajuste de banco de dados

A revisão do plano de consulta pode apresentar oportunidades para novos índices ou alterações nos índices existentes. Também pode mostrar que o banco de dados não está aproveitando adequadamente as vantagens dos índices existentes (consulte o otimizador de consulta ).

Ajuste de consulta

Um otimizador de consulta nem sempre escolherá o plano de consulta mais eficiente para uma determinada consulta. Em alguns bancos de dados, o plano de consulta pode ser revisado, os problemas encontrados e, em seguida, o otimizador de consulta fornece dicas sobre como melhorá-lo. Em outros bancos de dados, alternativas para expressar a mesma consulta (outras consultas que retornam os mesmos resultados) podem ser tentadas. Algumas ferramentas de consulta podem gerar dicas embutidas na consulta, para uso pelo otimizador.

Alguns bancos de dados - como o Oracle - fornecem uma tabela de plano para ajuste de consulta. Esta tabela de plano retornará o custo e o tempo para a execução de uma consulta. A Oracle oferece duas abordagens de otimização:

  1. CBO ou otimização baseada em custos
  2. RBO ou Otimização Baseada em Regras

O RBO está lentamente sendo preterido. Para que o CBO seja utilizado, todas as tabelas referenciadas pela consulta devem ser analisadas. Para analisar uma tabela, um DBA pode lançar o código do pacote DBMS_STATS.

Outras ferramentas para otimização de consulta incluem:

  1. SQL Trace
  2. Oracle Trace e TKPROF
  3. Plano de Execução do Microsoft SMS (SQL)
  4. Gravação de desempenho do Tableau (todo banco de dados)

Referências