Explorar consultas SQL Dica OPTION (FAST N)

Explorar consultas SQL Dica OPTION (FAST N)

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Neste artigo, apresentaremos a dica de consultas SQL e analisaremos a dica OPTION (Fast ‘N’) em detalhes.

Introdução

Depois que o usuário envia qualquer consulta ao SQL Server, ele cria um plano de execução otimizado e econômico, dependendo das estatísticas, índices e distribuição de dados. Na maioria dos casos, é um plano eficaz e não requer nenhuma intervenção para o desempenho de uma consulta se todas as outras coisas, como estatísticas e índices, estiverem na forma adequada.

Caso você seja novo nos Planos de Execução no SQL Server, consulte este artigo, Visão geral dos Planos de Execução do SQL Server para entender sobre eles.

O SQL Server fornece dicas de consulta nas quais você pode forçar o otimizador de consulta a usar um operador específico no plano de execução. Para usar um operador específico, o SQL Server também pode precisar alterar outros operadores. Temos as seguintes dicas de consulta no SQL Server.

Dicas de tabela

Suponha que você queira usar um índice específico para sua consulta para evitar uma varredura de tabela. Podemos usar dicas de tabela. Uma das dicas de tabela populares é WITH (NOLOCK) para evitar o nível de isolamento da transação padrão e evitar problemas de bloqueio nas instruções Select.

Dicas de consultas SQL

Ele instrui o otimizador de consulta a aplicar a dica durante a execução da consulta SQL. Alguns exemplos são Recompilar, MAXDOP, OPTIMIZE FOR UNKNOWN.

Neste artigo, exploraremos a dica de consulta OPTION (FAST ‘N’) para melhorar o desempenho de uma consulta para recuperar rapidamente o número específico de linhas, juntamente com seu impacto.

Pré-requisitos

Neste artigo, usarei o seguinte ambiente do SQL Server.

  • SQL Server 2019 – 15.0.2070.41 – RTM – GDR

  • Banco de dados de exemplo {AdventureWorks]. Se você não o tiver em sua instância, poderá fazer o download do arquivo .bak no GitHub e restaurar o arquivo de backup. Altere o nível de compatibilidade conforme a versão da instância SQL

Dica Explorando OPTION (FAST ‘N’) em consultas SQL

Suponha que você execute o seguinte script SQL que recupera os registros usando uma instrução Select. Ele usa um INNER JOIN entre [SalesOrderDetails] mesa e [Product] tabela.

Esta consulta retorna 121.317 linhas e levou 2 segundos no meu laptop, como mostrado abaixo:

Saída de exemplo de consultas SQL

Vamos ativar o plano de execução real para esta consulta usando o comando CTRL + M tecla de atalho. Também habilitaremos estatísticas e perfil de E / S para esta sessão usando a instrução SET STATISTICS IO, TIME.

No plano de execução real abaixo, ele usa uma verificação de índice em cluster e uma correspondência de índice (junção interna) como dois operadores dispendiosos.

Plano de execução real

Se olharmos para a guia de mensagens, você poderá ver leituras lógicas, físicas, tempo da CPU, tempo decorrido. Para analisar essas saídas, podemos copiar a saída da guia de mensagens no analisador de estatísticas. Você obtém a saída em um formato tabular e ajuda a analisar a saída rapidamente.

Aqui, você pode ver que temos um total de 1261 leituras lógicas, das quais 1246 leituras lógicas são para o [SalesOrderDetails] tabela.

Estatísticas IO

Às vezes, vemos que as consultas SQL levam muito tempo para serem concluídas e queremos exibir ou exibir o número especificado de linhas o mais rápido possível em um aplicativo cliente. O SQL Server fornece uma dica de consulta OPTION (FAST ‘N’) para recuperar o número N de linhas rapidamente enquanto continua a execução da consulta. Essa dica de consulta rápida informa (força) o otimizador de consultas SQL a fornecer um número específico de linhas (representado por ‘N’) rapidamente, sem aguardar o conjunto completo de dados.

Você pode pensar nisso como um aplicativo de usuário em que não deseja que o usuário aguarde seus dados. Eles podem visualizar N número de linhas rapidamente à medida que atualizam a página da web. Por exemplo, digamos que desejamos recuperar uma linha rapidamente, para que possamos especificar uma dica de consulta, conforme mostrado abaixo na consulta acima.

Ele preenche rapidamente uma linha na saída enquanto o restante das linhas está sendo recuperado. Vamos ver o plano de execução da consulta acima com OPTION (RÁPIDO 1).

No plano de execução abaixo, ele altera os operadores caros, conforme abaixo.

  • A verificação de índice clusterizado: 35%

  • O índice clusterizado busca: 67%

Não alteramos a consulta, mas ainda assim, ela altera o plano de execução para atender à dica de consulta especificada.

Verificação de Índice em Cluster

A dica de consulta FAST ‘N’ permite que o otimizador retorne um número especificado de linhas o mais rápido possível para consultas SQL. Imagine que você tenha um aplicativo personalizado no qual os usuários colocam uma condição específica e aguardem a exibição dos dados.

Isso aumentará a experiência do usuário se a consulta SQL retornar os resultados mais rapidamente. Suponha que usemos uma dica de tabela FAST 75, para retornar os primeiros 75 registros do conjunto de resultados enquanto ainda trabalhamos para retornar as linhas restantes. Ele permite que os usuários comecem a trabalhar com os dados antes que o restante da tela seja carregado.

Vejamos a imagem abaixo, mostrando a dica de ferramenta para o operador select na consulta sem dica de consulta e com a dica Rápida (1).

  • O otimizador de consulta usa o número estimado de 121317 linhas por execução sem nenhuma dica de consulta. Podemos observar que o número total de linhas retornadas pela instrução select acima no SQL Server também é 121317 linhas

  • No outro caso, forçamos o otimizador de consultas SQL a usar a dica de consulta. Ele usa a 1 linha como o número estimado de linhas por execução. Você pode obter resultados rápidos para o número especificado de linhas, mas colocou o otimizador de consulta do SQL Server para preparar um plano de execução ruim

Dica Consultas SQL

Semelhante à comparação do plano de execução real, vamos comparar as leituras lógicas de ambas as consultas.

  • [SalesOrderDetail] as leituras lógicas da tabela são iguais nas duas consultas 1246
  • Você pode observar um aumento significativo nas leituras lógicas para o [Product] tabela. Anteriormente, tinha 15 leituras lógicas, mas obtivemos 242634 leituras lógicas para ele com dica de consulta

Comparação com diferentes valores da dica de consulta

Vamos explorar mais alguns exemplos com valores diferentes de ‘N’ na dica de consulta em uma única janela de consulta. Usamos o operador Go para executar essas consultas em lotes de consultas separados.

  • Consulta com opção (rápida 1)

  • Consulta com opção (rápido 10)

  • Consulta com opção (100 rápido)

  • Consulta com opção (rápido 1000)

Na captura de tela abaixo, vemos que, à medida que aumentamos o valor em ‘N’ na dica de consulta, o custo geral é aumentado em comparação com os outros lotes. Ele mostra um custo de consulta de 57% para o FAST 1000, enquanto um custo de consulta de 5% para a dica de consultas SQL do FAST 1.

Valores OPTION (FAST N)

Na captura de tela acima, podemos ver planos de execução com diferentes valores de dica de consulta rápida. Destaca que a consulta sem nenhuma dica é mais rápida. Nesse caso, o SQL Server conseguiu criar o plano de execução otimizado. Depois de especificar uma dica de consulta rápida, o otimizador para de pensar e prepara um plano de execução estimando o número de linhas que especificamos na dica. Funciona bem com o pequeno conjunto de dados e o baixo valor da dica de consulta rápida. À medida que aumentamos a contagem de linhas, o custo da consulta se torna significativo e pode causar um gargalo de desempenho em vez de obter o benefício dele.

Dica de consulta é uma espada de arestas duplas. Evite usar a dica e deixe o otimizador criar o melhor plano de execução. Às vezes, você vê um benefício imediato no desempenho da consulta depois de usar uma dica, mas à medida que os dados aumentam, eles podem não ser adequados para seus requisitos. Você deve analisar o plano de consulta, focar nos operadores de custo, recursos, estatísticas, índices e suas fragmentações para corrigir problemas no longo prazo.

Conclusão

Neste artigo, exploramos as dicas de consultas SQL e focamos na dica OPTION (FAST ‘N’). Você nunca deve usar essa dica em um ambiente de produção sem testes adequados em sistemas que não são de prod. Se você planeja usá-los, consulte os planos de execução da consulta, seus custos, leituras lógicas e leituras físicas.

Rajendra Gupta
Últimas mensagens de Rajendra Gupta (ver todos)

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Leia Também  How to resolve deadlocks in SQL Server