Мне было интересно, могли бы вы, ребята, помочь мне разобраться со странной проблемой, с которой я недавно столкнулся на SQL Server.
У меня есть хранимая процедура (давайте вызовем SPold
), которая достаточно велика с большим количеством вычислений (я не могу сделать это в приложении, так как информация для около 6000 пользователей должна вернуться за один раз (я уменьшите это до 1000 на основе фамилии)). Хранимая процедура обычно выполняется за пару секунд и вызывается раз в пару минут.
Теперь утром хранимая процедура неожиданно выполнялась в 4-10 раз дольше, что приводило к нескольким тайм-аутам. Я обнаружил, что, сделав копию процедуры с новым именем (SPnew
) и выполнив ее, я снова получу быстрое время выполнения. Это указывало на то, что план выполнения был проблемой с оригиналом, SPold
, поэтому я решил выполнить его с перекомпиляцией. Это вернет результаты быстрее (хотя и не так быстро, как SPnew
), но последующие обращения пользователей к SPold
снова будут медленными. Как будто новый план не был соблюден.
Что я сделал, так это исправил, положил Exec SPnew
в SPold
, и теперь вызовы SPold
снова быстро возвращаются.
Кто-нибудь знает, что здесь происходит? Единственное, что обновилось за одну ночь, это статистика, хотя я думаю, что это должно повлиять как на SPold
, так и на SPnew
.