Я глубоко погрузился в хранилище запросов SQL Server и часто вижу ссылки на специальные запросы. Тем не менее, я не видел, как Query Store определяет специальный запрос. Я видел места, где можно сделать вывод, что это запрос без параметров или запрос, выполненный только один раз. Существует ли для этого формальное определение? Я не имею в виду в целом. Я имею в виду, как это относится к Query Store.
В качестве примера на этой странице показан пример удаления специальных запросов из хранилища запросов, но, похоже, что используемые им критерии - это счетчик выполнения только одного. Это кажется странным определением специального запроса. Кстати, если вы перейдете на страницу, выполните поиск «Удалить специальные запросы».
sql-server
query-store
Рэнди Миндер
источник
источник
Ответы:
После небольшого поиска я не смог найти конкретный и удовлетворительный источник из документации Microsoft, чтобы ответить на этот вопрос. Существует много хороших сторонних описаний и определений adhoc / ad-hoc / ad hoc, но для специфичности этого вопроса я думаю, что одно из них близко к источнику идеально.
Переходя от общих (но все еще точных) определений, таких как этот пост SO (спасибо SqlWorldWide), если мы посмотрим, что документация говорит по этой теме, она согласуется с тем, что вы упомянули об определении, основанном на количестве выполнений. Я думаю, что мы можем принять это как факт.
В статье об оптимизации для специальных рабочих процессов говорится:
Таким образом, может показаться, что опция конфигурации сервера запросов ad hoc также использует определение отдельного выполнения в качестве определения ad hoc. Если запрос продолжает выполняться и генерирует тот же план, он больше не будет рассматриваться как таковой.
Статья о Best Practices для Query Store также согласуется с этим,
Это, конечно, для запросов, которые еще не используются в качестве хранимых процедур, параметризации и т. Д., Поскольку они могут быть распознаны и обработаны надлежащим образом сразу же.
На основании всего этого можно сказать, что запрос обрабатывается как специальный, если:
источник
Для специальных запросов столбец object_id в
sys.query_store_query
DMV будет равен 0, как указано в документации sys.query_store_query :Вы можете идентифицировать запросы одноранговых на основе этого значения, даже если это прямо не указано, «это определение из специальных запросов ». :)
источник
Термин ad-hoc используется для обозначения запросов, которые были выполнены только один раз. Это соответствует определению, используемому для параметра базы данных «Оптимизация для специальных рабочих нагрузок».
Ссылка, на которую вы ссылаетесь в отношении удаления специальных запросов, включает в себя это конкретное определение «Удалить специальные запросы. При этом удаляются запросы, которые были выполнены только один раз и имеют возраст более 24 часов».
источник
Ad-hoc из столбца sys.dm_exec_cached_plans dmv
objtype
в docs.microsoft.com.Одно из применений этого столбца - в случае запросов с несколькими планами увидеть, вызваны ли эти несколько планов
Adhoc
.источник