Fiz um mergulho profundo no SQL Server Query Store e frequentemente vejo referências a consultas 'ad-hoc'. No entanto, eu não vi o que o Query Store determina uma consulta ad-hoc. Já vi lugares em que poderia ser deduzido uma consulta sem parâmetros ou uma consulta executada apenas uma vez. Existe uma definição formal para isso? Eu 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 uma. Essa parece ser uma definição ímpar de uma consulta ad-hoc. BTW, se você for para a página, procure por 'Excluir consultas ad-hoc'.
sql-server
query-store
Randy Minder
fonte
fonte
Respostas:
Após um pouco de pesquisa, não consegui encontrar uma fonte concreta e satisfatória da 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 pela especificidade dessa pergunta, acho que uma próxima à fonte é ideal.
Passando por definições genéricas (mas ainda precisas) como esta postagem do SO (obrigado SqlWorldWide), se examinarmos 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 podemos levar isso de 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 sendo executada e gerar o mesmo plano, ela não será mais tratada como tal.
O artigo sobre Práticas recomendadas para o Query Store também se alinha com isso,
Obviamente, isso é para consultas que ainda não são usadas como procedimentos armazenados, parametrizados etc., porque podem ser reconhecidas e tratadas adequadamente logo de cara.
Portanto, com base em tudo isso, podemos dizer que uma consulta é tratada como ad hoc se:
fonte
Para consultas ad-hoc, a coluna object_id na
sys.query_store_query
DMV será 0, conforme declarado na documentação sys.query_store_query :Você pode identificar consultas ad-hoc com base nesse valor, mesmo que não seja declarado explicitamente como "essa é a definição de consultas ad-hoc ". :)
fonte
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ê menciona sobre a exclusão de consultas ad-hoc inclui esta definição específica "Excluir consultas ad-hoc: exclui as consultas que foram executadas apenas uma vez e com mais de 24 horas".
fonte
Ad-hoc da coluna sys.dm_exec_cached_plans dmv
objtype
em docs.microsoft.com.Um uso dessa coluna é ver no caso de consultas com vários planos para ver se os vários planos são causados por
Adhoc
.fonte