Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Explorando a GUI do repositório de consultas do SQL Server 2016

Introdução


O armazenamento de consultas é um novo recurso, introduzido no SQL Server 2016, que permite que os administradores de banco de dados revisem historicamente as consultas e seus planos associados usando a GUI disponível no SQL Server Management Studio, bem como analisem o desempenho da consulta usando determinadas Exibições de Gerenciamento Dinâmico. O Query Store é uma opção de configuração com escopo de banco de dados e está disponível para uso se o nível de compatibilidade do banco de dados em questão for 130.





O Query Store é semelhante a tecnologias na plataforma de banco de dados Oracle como Automatic Workload Repository (AWR). O AWR captura estatísticas de desempenho em uma escala ainda maior do que o Query Store e permite que um administrador de banco de dados analise historicamente o desempenho. Conceitos como período de retenção e limites de armazenamento de dados coletados estão disponíveis na arquitetura AWR como no Repositório de Consultas. As seguintes opções de configuração de chave estão disponíveis ao habilitar o Repositório de Consultas:
  • Modo de operação: Determina se o Query Store aceitará dados recém-capturados (Modo ReadWrite) ou apenas armazenará dados antigos disponíveis para relatórios (Modo somente leitura)
  • Intervalo de liberação de dados: Determina com que frequência os buffers de memória do Repositório de Consultas são liberados em um disco. Lembre-se de que os dados do Repositório de Consultas são armazenados no banco de dados em que o Repositório de Consultas está habilitado. O valor padrão é 15 minutos.
  • Intervalo de coleta de estatísticas: Determina com que frequência as estatísticas de tempo de execução do repositório de consultas são coletadas.
  • Tamanho máximo: Determina quanto o repositório de estatísticas do Repositório de Consultas pode crescer. Por padrão, são 100 MB.
  • Modo de captura do repositório de consultas: Determina a granularidade das capturas de consulta. ALL, AUTO e NONE são as opções disponíveis. O valor padrão é AUTO.
  • Modo de limpeza com base no tamanho: Determina se o Repositório de consultas liberará dados antigos quando o tamanho máximo for atingido.
  • Limite de consulta obsoleta: Determina o número de dias pelos quais o Repositório de Consultas retém dados. O valor padrão é definido como trinta dias.

Fig. 2 Opções do repositório de consultas

O repositório de consultas é um recurso com escopo de banco de dados que pode ser habilitado usando a GUI (SQL Server Management Studio) ou executando o seguinte comando:
ALTER DATABASE [WideWorldImporters] SET QUERY_STORE =ON;

A telemetria de consulta coletada pelo Repositório de Consultas é armazenada em tabelas do sistema no banco de dados em que o Repositório de Consultas foi habilitado.

Exemplos de consultas e relatórios padrão


Até agora, tudo o que escrevi está disponível em muitas outras fontes; alguns deles podem ser encontrados na seção de referências.

Nesta seção, examinaremos um pouco mais detalhadamente o que podemos realmente fazer com o Query Store depois de habilitá-lo usando exemplos simples. Vamos considerar as duas consultas a seguir:

Listagem 1:Buscando registros usando um filtro específico
use WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders ainner join Purchasing.PurchaseOrderLines bon a.PurchaseOrderID=b.PurchaseOrderID onde a.SupplierReference='ML0300202';go 1000 
Listagem 2:Buscando registros usando um intervalo
use WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders ainner join Purchasing.PurchaseOrderLines bon a.PurchaseOrderID=b.PurchaseOrderID onde a.SupplierReference like 'ML%';go 1500 
Preste atenção à versão alternativa dessas consultas escritas em maiúsculas:

Listagem 1:Buscando registros usando um filtro específico (maiúsculas)
USE WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASERDERS AINNER JOIN PURCHASING.PURCHASEORDERLINES BON A.PURCHASEORDERID=B.PURCHASEORDERIDWHERE A.SUPPLIERREFERENCE='ML0300202'; pré> 
Listagem 2:Buscando registros usando um intervalo (maiúsculas)
USE WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASERDERS AINNER JOIN PURCHASING.PURCHASEORDERLINES BON A.PURCHASEORDERID=B.PURCHASEORDERIDONDE A.SUPPLIERREFERENCE LIKE 'ML%'; /pré> 
Como você pode ver, executamos essas consultas várias vezes usando a palavra-chave GO. Assim, temos uma quantidade razoável de dados para trabalhar. A primeira coisa que devemos estar cientes ao usar o Repositório de Consultas para analisar o desempenho é que existem seis relatórios padrão integrados ao Repositório de Consultas do SQL Server 2016, conforme mostrado na Fig. 3.

Fig. 3 Relatórios do repositório de consultas

Os nomes dos relatórios são descritos em detalhes nos artigos anteriores, bem como na documentação da Microsoft. Os dados fornecidos por esses relatórios são recuperados das principais exibições de gerenciamento dinâmico listadas abaixo:

Planeje DMVs de estatísticas
  • sys.query_store_query_text – contém textos de consulta exclusivos executados no banco de dados
  • sys.query_store_plan – contém um plano estimado para a consulta com as estatísticas de tempo de compilação
  • sys.query_context_settings – contém algumas combinações exclusivas do plano que afetam as configurações sob as quais as consultas são executadas
  • sys.query_store_query – entradas de consulta que são rastreadas e forçadas separadamente no Query Store

DMVs de estatísticas de tempo de execução
  • sys.query_store_runtime_stats_interval – O Query Store divide o tempo em janelas de tempo geradas automaticamente (intervalos) e armazena estatísticas agregadas nesse intervalo para cada plano executado
  • sys.query_store_runtime_stats – contém estatísticas de tempo de execução agregadas para planos executados

Muito mais detalhes sobre como usar esses DMVs estão disponíveis na Documentação da Microsoft referenciada. Neste artigo, vamos simplesmente usar a GUI principalmente.

Como você pode ver na Fig. 4, revisamos o relatório de consumo geral de recursos, enquanto na próxima seção vamos restringir as consultas listadas anteriormente e os dados que podemos recuperar dessas consultas simples.

Fig. 4 Relatório geral de consumo de recursos

Analisando consultas usando a GUI


Algumas coisas importantes devem ser consideradas úteis ao usar os relatórios do repositório de consultas:
  • Você pode configurar o ambiente clicando no botão destacado na Fig. 4. A Fig. 5 mostra os detalhes que podemos alterar para se adequar ao nosso caso de uso:critérios de dados a serem retornados, intervalo de datas e conjunto de dados a serem retornados. Por exemplo, se eu quiser ver claramente o ID de consulta associado às consultas que estou revisando, gostaria de reduzir meu conjunto de dados do padrão Top 25 para Top 10, por exemplo.
    Fig. 5 Opções de configuração do relatório

    Fig. 6 As 25 principais consultas executadas em 1º de maio de 2018

    Fig. 7 As 10 principais consultas executadas em 1º de maio de 2018

  • Os gráficos de barras exibem dados principalmente com o tempo no eixo x, mas você pode detalhar um ponto de dados específico para visualizar dados com base em IDs de consulta. Cada ID de consulta determina uma consulta específica. É importante observar que uma consulta é identificada exclusivamente pelo hash do texto. Assim, uma consulta em letras minúsculas difere da mesma consulta em letras maiúsculas. Isso deve ser um conhecimento comum:consultas ad-hoc são uma preocupação para o cache do plano e também são ruins para o armazenamento de consultas, tanto em termos de uso de espaço quanto de análise adequada.
    Fig. 8 Consulta na Listagem 1 (minúsculas, consulta 42480)


    Fig. 9 Consulta na Listagem 3 (Maiúsculas, Consulta 42490)
  • A terceira observação importante é o fato de que quando um ponto de dados é destacado em verde, o plano de execução detalhado mostrado no painel inferior pertence a esse ponto de dados. Na Fig. 7, este ponto de dados refere-se ao ID de consulta 42481 que executamos anteriormente (consulta completa mostrada na Listagem 2). Passar o mouse sobre esse ponto de dados exibe a consulta, seu ID e o número de planos associados a essa consulta (consulte a Fig. 8).
    Fig. 10 Detalhes da Consulta 42481

    Nossa consulta foi executada 1391 vezes, pois é capturada com precisão pelo Query Store e exibida no eixo y (contagem de execução) do gráfico de barras na Fig. 10. O relatório estava sendo obtido enquanto o lote ainda estava em execução. Assim, não temos a contagem completa (1500) nos informando que há uma captura de dados em tempo real cada vez que uma consulta é executada. No lado direito, vemos também o Plano sendo utilizado para essas múltiplas execuções (Plano 675). Podemos verificar isso usando a consulta na Listagem 5.

Listagem 5
USE WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_id =Qry.query_idJOIN sys.query_store_query_text AS Txt ON Qry.query_text_id =Txt .query_text_idwhere Qry.query_id=42481;

Fig. 11 ID da consulta e ID do plano dos DMVs

Um pouco de ajuste


Vamos dar uma olhada em outra consulta.

Quando executamos a consulta na Listagem 6 e examinamos os detalhes do Repositório de Consultas, os detalhes do plano de execução revelam que precisamos de um índice para obter uma melhoria de 51%.

Lista 6:consulta abaixo do ideal
SELECT TOP (1000) [OrderLineID] ,[OrderID] ,[StockItemID] ,[Description] ,[PackageTypeID] ,[Quantity] ,[UnitPrice] ,[TaxRate] ,[PickedQuantity] ,[PickingCompletedWhen] ,[LastEditedBy ] ,[LastEditedWhen] FROM [WideWorldImporters].[Sales].[OrderLines] onde unitPrice> 1000 GO 2000

Fig. 12 Detalhes da consulta sub-ótima

Fig. 13 Plano de Execução de Consulta Sub-ótimo

Assim que criamos o índice recomendado usando a instrução na Listagem 7, fazemos com que o Otimizador de Consulta gere um novo plano de execução. Nesse caso, espera-se que o novo plano de execução melhore o desempenho. No entanto, há casos em que certas alterações podem causar desempenho degradado, como alterações significativas no volume de dados que invalidam efetivamente as estatísticas ou diminuem o número de índices e assim por diante. Diz-se que essas consultas regrediram no desempenho e podem ser examinadas usando o relatório Consultas Regressadas no Repositório de Consultas.

Listagem 7:Criação de índice
USE [WideWorldImporters]GOCREATE NONCLUSTERED INDEX [Custom_IX_UnitPrice]ON [Sales].[OrderLines] ([UnitPrice])INCLUDE([OrderLineID],[OrderID],[StockItemID],[Description],[PackageTypeID],[Quantity ],[TaxRate],[PickedQuantity],[PickingCompletedWhen],[LastEditedBy],[LastEditedWhen])GO

Fig. 14 Consulta Otimizada (Mudança no Plano de Execução)

Fig. 15 Consulta otimizada (dois planos)

Fig. 16 Consulta Otimizada (Plano de Força)

Quando há vários planos para uma consulta, como mostrado na Fig. 14 e na Fig. 16, podemos dizer ao otimizador para sempre usar um plano que escolhermos clicando no botão Force Plan. Essa era uma tarefa um pouco tediosa nas versões anteriores do SQL Server.

Como você pode ver na Fig. 17, o Query Store nos permite comparar os diferentes planos associados a uma consulta usando várias métricas.

Fig. 17 Comparando Planos de Execução

Novamente, podemos usar a consulta na Listagem 8 para verificar os planos associados a esse ID de consulta usando DMVs. (Consulte a Fig. 11)

Lista 8:Planos associados à consulta 42497
USE WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_id =Qry.query_idJOIN sys.query_store_query_text AS Txt ON Qry.query_text_id =Txt .query_text_idwhere Qry.query_id=42497;

Explorando variações


Outro relatório útil que o Query Store nos oferece é o Queries With High Variation. Este relatório mostra a distância entre as métricas desejadas para uma consulta específica em um determinado período. Isso é muito útil para a análise histórica do desempenho. Usando as instruções da Listagem 9, geramos dados que podem fornecer uma imagem de como seriam as variações. As etapas do procedimento simplesmente criam uma pequena tabela e inserem registros usando diferentes tamanhos de lote.

Listagem 9:planos associados à consulta 42497
use WideWorldImportersgo-- Criar uma tabelacriar tabela tableone(ID int identity(1000,1),FirstName varchar(30),LastName varchar(30),CountryCode char(2),HireDate datetime2 default getdate());-- Inserir registros em Lotes de Tamanhos Diferentesinserir em valores tableone ('Kenneth','Igiri','NG',getdate());GO 10000inserir em valores tableone ('Kwame','Boateng','GH', getdate());GO 10inserir em valores de tableone ('Philip','Onu','NG',getdate());GO 100000inserir em valores de tableone ('Kwesi','Armah','GH', getdate());GO 100 
O Query Store nos mostra detalhes como os valores mínimo e máximo dessas métricas para intervalos de execução específicos da consulta em que estamos interessados. Neste exemplo, descobrimos que isso é simplesmente resultado do número de lotes por execução (observe que o parâmetros estão realmente sendo usados ​​para executar a instrução INSERT). Na produção, outros fatores podem ser responsáveis ​​por tais variações.

Fig. 18 Variações na Duração

Fig. 19 Variação nas Escritas Lógicas

Fig. 20 Variação nas leituras físicas

Conclusão


Neste artigo, analisamos o ambiente da GUI do SQL Server 2016 Query Store e algumas coisas que podemos deduzir sobre o desempenho de nossa instância (em relação ao SQL) usando o Query Store. Existem vários artigos na Internet que mostram casos de uso ainda mais avançados e explicações muito mais profundas dos internos. Este artigo deve ser útil para DBAs de nível médio que desejam obter uma vantagem inicial no uso do Query Store para avaliação/ajuste de desempenho.

Referências

  • Prática recomendada com o repositório de consultas
  • Cristiman, L. (2016) Repositório de consultas – configurações e limites
  • Monitorando o desempenho usando o repositório de consultas
  • Visualizações do catálogo do repositório de consultas
  • Procedimentos armazenados do repositório de consultas
  • Repositório de consultas – como funciona e como usá-lo
  • Cenários de uso do repositório de consultas
  • Van de Lar, E. (2016) SQL Server 2016 Query Store:forçando planos de execução usando o Query Store


Ferramenta útil:


dbForge Query Builder for SQL Server – permite que os usuários criem consultas SQL complexas de maneira rápida e fácil por meio de uma interface visual intuitiva sem escrita manual de código.