Habilitei o Query Store no SQL 2017 e estou vendo uma consulta que está ocorrendo com frequência SELECT *
em uma tabela específica.
Eu gostaria de restringir de onde esta solicitação está vindo e ver se podemos encontrar uma maneira melhor do que fazer o SELECT *
.
Eu tenho um id de consulta, é claro, do Query Store. Recentemente, também pedi aos meus desenvolvedores que incluíssem o Nome do Aplicativo em suas cadeias de conexão, o que muitos fizeram.
Existe uma maneira (talvez usando um DMV, por exemplo) que eu possa descobrir o Nome do Aplicativo associado a esta consulta?
Consulte as DMVs do repositório de consultas para o hash de consulta e, em seguida, use esse hash de consulta em uma sessão de eventos estendidos para capturar os detalhes pertinentes.
Isso deve levá-lo até lá:
Na consulta acima, eu tenho
LIKE '%some-pertinent-SQL%'
- isso limita os resultados da consulta para corresponder ao destino que você procura - você precisa substituirsome-pertinent-SQL
por uma parte exclusiva da sua consulta de destino.Use o valor da
query_hash
coluna retornada acima na definição da sessão Extended Events:Substitua o
0x00000000
pelo valor de hash da consulta real.Inicie a sessão de Eventos Estendidos com:
Clique com o botão direito do mouse na sessão Extended Events no Object Explorer para ver detalhes sobre o nome do host do cliente, nome de usuário, etc., para consultas à medida que elas acontecem.
Para testar isso, executei o seguinte código na minha instância de teste do SQL Server 2016:
Aqui, criarei alguns objetos no banco de dados QueryStoreTest e uma consulta de teste:
Aqui, obterei o hash de consulta do repositório de consultas:
Resultados:
Agora, vou criar a Sessão de Eventos Estendidos:
E inicie a sessão:
Agora, se eu executar a consulta de teste e observar os dados ativos da sessão, vejo:
Limpar: