Клиент сообщил о неоднократных случаях очень странного поведения при выполнении хранимой процедуры.
У них есть код, который запускает кэшированное преобразование изменчивого набора данных. Сохраненный процесс был записан для повторной обработки набора данных по требованию, если:
1. Набор данных изменился с момента последней обработки
2. Набор данных не изменялся в течение 5 минут
(Второе условие останавливает массивный повторный пересчет во время изменений.)
Это работало нормально в течение пары недель, SP занимал 1-2 секунды, чтобы завершить повторную обработку, и он делал это только при необходимости. Тогда ...
- SP внезапно "перестал работать" (он просто продолжал работать и больше не возвращался)
- Мы сменили SP тонким способом, и он снова заработал
- Через несколько дней он снова перестал работать
- Кто-то тогда сказал: «Мы видели это раньше, просто перекомпилируем SP»
- Без изменений в коде мы перекомпилировали SP, и он заработал
- Через несколько дней он снова перестал работать
Это теперь повторяется много-много раз. SP внезапно «перестает работать», никогда не возвращается, и время ожидания клиента истекло. (Мы попытались запустить его через Management Studio и отменили запрос через 15 минут.)
И все же каждый раз, когда мы перекомпилируем SP, он внезапно снова срабатывает.
Я еще не пробовал WITH RECOMPILE на соответствующих показателях EXEC, но я особо не хочу этого делать. Он вызывается сто раз в час и обычно ничего не делает (он перерабатывает данные только несколько раз в день). Если возможно, я хочу избежать перекомпиляции того, что является относительно сложным SP, «просто чтобы избежать того, что« не должно »произойти ...»
- Кто-нибудь испытывал это раньше?
- У кого-нибудь есть предложения по его преодолению?
Приветствия
Демс.
EDIT:
Псевдо-код будет выглядеть следующим образом:
- читать "a" из таблицы_x
- читать "b" из таблицы_x
- Если (a
НАЧАЛО СДЕЛКИ
- УДАЛИТЬ table_y
- INSERT INTO table_y <3 выбирает объединенные вместе>
- ОБНОВЛЕНИЕ table_x
- совершение транзакции
Селекты "не красивые", но при выполнении в строке они выполняются в кратчайшие сроки. В том числе, когда ИП отказывается завершать. А профилировщик показывает, что это ВСТАВКА, у которой ИП "глохнет"
У SP нет параметров, и sp_lock ничего не показывает, блокируя процесс.