Каждые несколько месяцев несколько избранных страниц сайта начинают отвечать
Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.
Я запустил SQL Server Profiler, чтобы увидеть, где зависает база данных. Это по определенной хранимой процедуре. Поэтому я взял вызов хранимой процедуры и провел его через Management Studio. Возвращает несколько тысяч строк за секунду.
Открывая процедуру, я вижу, что это просто выражение выбора. Если я возьму оператор select и запустю его в новом окне запроса, Management Studio зависнет.
Итак, я запускаю его по частям и нахожу строку, из-за которой запрос зависает
and GetDate() between EffectiveDate and ISNULL(ExpiryDate, @CurrentDate)
GetDate()
в любом случае должен быть @CurrentDate
, поэтому, если я его переключу, он будет работать нормально. Почему это даже имеет значение, хотя? Как я понимаю, GetDate
не должен быть дорогим звонком. Я понимаю, что IsNull
есть, но это тоже не должно иметь значения, так как он прекрасно справится с запросом, если я просто поменяю GetDate на CurrentDate.
Правильно ли я считаю, что getdate
вызывает прерывание этого запроса? Как / почему он это сделал?
Немного предыстории, как я уже говорил, эта ошибка появлялась раньше, 23 марта, 27 июля, 25 октября, а теперь и 21 ноября. Кажется, что это всегда случается ближе к концу месяца. Я был уверен, что в это время ничего не происходит (запланированные задания, обслуживание и т. Д.)
Это на рабочем сервере, поэтому я не смог потратить время на устранение проблемы. Как только сайт выходит из строя, он должен быть восстановлен. Я знаю, как это исправить, мне просто нужно перекомпилировать хранимую процедуру, но кто-нибудь знает, что может быть причиной этого?
SQL Server также имеет другую базу данных UAT, та же процедура будет зависать и для этой базы данных. Но другие хранимые процедуры с одинаковой строкой кода нормально работают в обеих базах данных.
Редактировать: мне пришлось восстановить веб-сайт, поэтому я перекомпилировал хранимую процедуру. Сайт теперь работает нормально. Однако запрос все еще не выполняется сам по себе.