Після невеликого пошуку я не зміг знайти конкретного та задоволеного джерела з документації Microsoft, щоб відповісти на це питання. Існує багато хороших описів та визначення сторонніх сторін adhoc / ad-hoc / ad hoc, але для специфіки цього питання я думаю, що одне з джерел є ідеальним.
Переміщуючи минулі загальні (але все-таки точні) визначення, такі, як ця публікація SO (дякую SqlWorldWide), якщо ми подивимось, що документація пише на цю тему, вона погоджується з тим, що ви згадали про визначення, яке базується на кількості страт , Я думаю, що ми можемо сприймати це як факт.
У статті про оптимізацію спеціальних робочих процесів сказано:
Коли для цього параметра встановлено значення 1, Engine Database Engine зберігає невелику скомпільовану заглушку плану в кеші плану, коли пакет складається вперше замість повного складеного плану. Це допомагає зняти тиск пам'яті, не дозволяючи кешу плану заповнити складені плани, які не використовуються повторно. Скомпільована заглушка плану дозволяє двигуну баз даних визнати, що ця спеціальна партія була складена раніше, але вона зберігала лише скомпільований заглушку плану, тому коли ця партія знову викликається (компілюється або виконується), механізм бази даних збирає пакетний пакет ... і додає повний складений план до кешу плану.
Таким чином, здавалося б, параметр налаштування сервера ad hoc запитів також використовує визначення одного виконання як визначення ad hoc. Якщо запит продовжує виконуватись і генерує той самий план, він більше не розглядатиметься як такий.
Стаття про кращі практики для магазину запитів також узгоджується з цим,
Порівняйте кількість різних значень query_hash із загальною кількістю записів у sys.query_store_query. Якщо коефіцієнт близький до 1, додаткове робоче навантаження генерує різні запити.
Це, звичайно, стосується запитів, які вже не використовуються як збережені процедури, параметризовані тощо, тому що їх можна розпізнати та обробити належним чином прямо з вати.
Отже, виходячи з усього цього, можна сказати, що запит трактується як спеціальний, якщо:
- Він не параметризований
- Він не програмно зберігається в базі даних (зберігається прок, функція, тригер тощо)
- Один і той же запит виконується лише один раз АБО Той самий запит виконується кілька разів, але генерує інший план запитів для кожного наступного виконання.