Запит, на зразок наведеного нижче, гарантовано не повертає жодних рядків, займає від 0 до 160 секунд на одному з наших серверів:
select col1, col2, col3
from tab1
where 0 = 1
Два тижні тому це сталося шість разів з інтервалом 48 годин. Минулого тижня цей же запит зайняв ~ 0 секунд. У мене є журнали SQL нашої програми, але ще не знайдено підозрюваних. Крім того, я вважав, що зверху 0 / де 0 = 1 запит ніколи не потрапляє на сторінки даних, тож він повинен бути стійким до блокувань даних на рівні рядків / сторінок / таблиці? Схему не торкаються жодні (відомі) SQL.
Оскільки проблема не узгоджується, і сервер перебуває під дуже великим навантаженням, я хотів би зрозуміти теорію того, що відбувається перед тим, як приєднати SQL-профілер. Інші запити виконуються без проблем під час цих затримок. Відома проблема в додатку - велика кількість динамічно створених SQL-запитів - близько 200 тис. Унікальних запитів загальною кількістю 850 к (записів) протягом 48 годин, чи можуть це викликати подібні проблеми?
На сервері працює стандартне видання SQL Server 2005, 96 ГБ оперативної пам’яті, диски на SAN та 4 процесори / 16 ядер. Файли баз даних і групи файлів добре оптимізовані, і це не повинно бути проблемою (але ми розглядаємо це окремо).
Будь-які вказівки, де їх шукати, дуже вдячні.
Редагувати: Ідеально! Відтворено запит, щоб додати план виконання, і на це пішло 1 хв 35 сек. Ось план виконання та скріншот із зображенням тривалості запиту:

Редагувати 2: детальна інформація про час другого циклу. Зараз, здається, постійно повільно, тому ми додамо профайлер і парфмон:
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 97402 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
