Есть несколько вещей, которые вы можете сделать, чтобы исправить / диагностировать это.
1) Обновляйте свою статистику на регулярной / ежедневной основе. SQL генерирует планы запросов (думаю, оптимизирует) на основе вашей статистики. Если они «устареют», ваша хранимая процедура может работать не так, как раньше. (особенно когда ваша база данных меняется / растет)
2) Посмотрите вашу хранимую процедуру. Вы используете временные таблицы? Есть ли в этих временных таблицах индексы? Большую часть времени вы можете найти виновника, посмотрев хранимую процедуру (или таблицы, которые она использует)
3) Проанализируйте вашу процедуру, пока она "зависает", взгляните на план запроса. Есть ли какие-либо недостающие индексы, которые помогли бы не дать плану вашей процедуры сойти с ума. (Ищите такие вещи, как сканирование таблицы и другие ваши самые дорогие запросы)
Это похоже на поиск имени в телефонной книге, обязательно читайте каждое имя быстро, если ваша телефонная книга состоит только из 20 или 30 имен. Попробуйте сделать это с миллионами имен, это не так быстро.