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

Редактировать 2: статистика времени детали для второго запуска. Кажется, сейчас все идет медленно, поэтому мы добавим профилировщик и perfmon:
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.
