Eu tenho feito um mergulho profundo no SQL Server Query Store e muitas vezes vejo referências a consultas 'ad-hoc'. No entanto, não vi o que o Query Store determina como uma consulta ad-hoc. Eu vi lugares onde poderia ser inferido ser uma consulta sem parâmetros ou uma consulta executada apenas uma vez. Existe uma definição formal para isso? Não quero dizer em geral. Quero dizer, no que se refere ao Query Store.
Como exemplo, esta página mostra um exemplo de remoção de consultas ad-hoc do repositório de consultas, mas parece que o critério usado é uma contagem de execução de apenas um. Esta parece ser uma definição estranha de uma consulta ad-hoc. BTW, se você for para a página, procure por 'Excluir consultas ad-hoc'.
Depois de um pouco de pesquisa, não consegui encontrar uma fonte concreta e satisfatória na documentação da Microsoft para responder a essa pergunta. Existem muitas boas descrições e definições de terceiros de adhoc/ad-hoc/ad hoc por aí, mas para a especificidade dessa pergunta, acho que uma próxima à fonte é ideal.
Passando por definições genéricas (mas ainda precisas) como esta postagem SO (obrigado SqlWorldWide), se observarmos o que a documentação diz sobre o tópico, ela concorda com o que você mencionou sobre a definição ser baseada no número de execuções , acho que a ponto de podermos tomá-lo como fato.
O artigo sobre otimização para fluxos de trabalho ad hoc diz:
Portanto, parece que a opção de configuração do servidor de consulta ad hoc também usa a definição de uma única execução como a definição de ad hoc. Se a consulta continuar a ser executada e gerar o mesmo plano, ela não será mais tratada como tal.
O artigo sobre Práticas recomendadas para armazenamento de consultas também se alinha a isso,
Isso, é claro, é para consultas que ainda não são usadas como procedimentos armazenados, parametrizadas, etc. porque podem ser reconhecidas e tratadas adequadamente logo de cara.
Então, com base em tudo isso, podemos dizer que uma consulta é tratada como ad hoc se:
Para consultas ad-hoc, a coluna object_id
sys.query_store_query
na DMV será 0, conforme indicado na documentação sys.query_store_query :Você pode identificar consultas ad-hoc com base nesse valor, mesmo que não seja explicitamente declarado como "esta é a definição de consultas ad-hoc ". :)
O termo ad-hoc é usado para se referir a consultas que foram executadas apenas uma vez. Isso é consistente com a definição usada para a configuração do banco de dados "Otimizar para cargas de trabalho ad-hoc".
O link que você faz referência sobre a exclusão de consultas ad-hoc inclui esta definição específica "Excluir consultas ad-hoc: isso exclui as consultas que foram executadas apenas uma vez e que têm mais de 24 horas".
Ad-hoc da coluna sys.dm_exec_cached_plans dmv
objtype
em learn.microsoft.com.Um uso desta coluna é ver no caso de consultas com vários planos para ver se os vários planos são causados por
Adhoc
.