Я не могу понять это. На SQL Server у меня есть процесс, который выполняется десятки раз в секунду (данные отправляются на сервер). Процесс работает отлично, обработка запросов занимает от 50 до 200 мс. Затем примерно (но время от времени) каждые 1,5 минуты все запросы внезапно занимают от 15000 до 22000 мс (от 15 до 22 секунд). В то же время загрузка ЦП на сервере резко падает. Иногда (примерно в 70% случаев) средняя длина очереди диска возрастает непосредственно перед тем, как процессор падает, а запросы замедляются.
Я наблюдаю за процессором на perfmon, он обычно скачет между 20% и 70%, со средним процессором около 50%. Когда все останавливается, оно падает до 0% с парой 20% всплесков примерно на 20 секунд.
В то же время я наблюдаю за монитором активности SQL. Обычно в списке находится от 1 до 4 транзакций EXECUTE, но когда это происходит, транзакции EXECUTE начинают увеличиваться до 20 или 30 транзакций. Транзакции приходят, но не являются процессами.
Я проверяю блоки и никогда не вижу:
Select A.*
From master.dbo.sysprocesses as A with (nolock)
Where A.blocked <> 0
Обратите внимание, что я работаю в режиме "изоляции моментального снимка"
У меня есть система записи условий взаимоблокировки в журнал ошибок, никто не сообщил.
Я проверил агент SQL на другие запущенные процессы, ни один из которых не был запланирован на момент возникновения этих событий.
Я смотрю SQL Profiler, чтобы узнать о других событиях, ничего не было. Я также наблюдал за событиями File Growth, и он ничего не сообщает.
Даже если запросы занимают 20000 мс, отчеты SQL Profiler читаются как под 2000, а процессор - под 50. Сами процессы, похоже, не потребляют ресурсы. Однако события выхода из системы сообщают о высоких чтениях и процессоре (я не уверен, что это вообще актуально).
Во время этих событий в моем журнале событий также ничего нет.
Есть идеи? Любое другое место, чтобы посмотреть?
Запуск SQL Server 2005 Standard в Windows 2003 32-битной версии.