Habilitei o Query Store em um banco de dados. Eu tenho uma consulta específica que eu quero acompanhar. Eu tenho muitos detalhes sobre a consulta de sp_BlitzCache (como SQL Text, SQL Handle, SQL Hash, Plan Cache Handle/Hash, etc...).
Posso pesquisar o Query Store com as informações do sp_BlitzCache para rastrear a consulta lá? Eu quero forçar um plano de execução específico porque a consulta sofre problemas de sniffing de parâmetros.
Uma maneira de fazer isso é consultar as exibições do Repositório de Consultas diretamente para obter as informações obtidas do cache do plano:
A
sys.query_store_query
tabela também tem alguns dos outros campos (query_hash
,last_compile_batch_sql_handle
,statement_sql_handle
, etc), que podem encontrar a consulta que você está procurando de forma mais confiável.Basicamente, o objetivo disso é encontrar o "id de consulta" no Query Store, pois você precisará disso para encontrar planos para ele e forçar um.
Depois de ter
query_id
em mãos, você pode acessar a interface do usuário no SSMS e encontrar a consulta usando o nó "Consultas rastreadas":A partir daí, você pode clicar no plano desejado e clicar em "Forçar Plano" para forçá-lo:
A interface do usuário é super hostil, mas você também pode pesquisar o texto da consulta diretamente no Tracked Queriespainel " ". Dado meu banco de dados de lixo com apenas 2 consultas do sistema ...
...mostrando...
..Posso clicar no ícone "Lupa ?" na caixa de pesquisa "Consulta de rastreamento"...
Isso exibirá o seguinte formulário de entrada ...
Se você inserir o teste de consulta que deseja pesquisar na barra de pesquisa (caixa em vermelho na captura de tela) e pressionar Enter ou clicar no ícone de lupa (caixa em azul), poderá navegar por ID de consulta, ID de texto de consulta e Consulta Texto de uma interface do usuário interna (por mais hostil que possa ser para acessar).
A título de exemplo, você pode ver na tela a seguir que pesquisei a letra "a" e retornei as duas consultas ...
...enquanto na próxima tela eu pesquisei a string mais seletiva "HasMemoryOptimizedObjects", que retorna apenas o texto da consulta correspondente