Process / SPID блокируется сам по себе, как очистить / убить без перезапуска Sql Server
У нас есть процесс, который работал в течение 4 часов. Поскольку он работал так долго, это вызывало другие проблемы в базе данных, поэтому было решено убить процесс.
Теперь процесс находится в приостановленном состоянии. Он также заявляет, что блокируется сам по себе после запроса sp_who2.
В мониторе активности, вот информация об источнике ожидания:
objectlock lockPartition=0 objid=xxx subresource=FULL dbid=2 id=lockyyyy mode=X associatedObjectid=xxx
Вы заметите, что objid и associatedObjectId имеют одно и то же значение.
Запрос sys.таблица объектов не показывает результатов для этого идентификатора объекта.
Ожидает ли Sql Server блокировки объекта, который больше не существует? Как избавиться от этого процесса без перезапуска Sql Server? (наш администратор не отвечает на запросы поддержки).
Имейте в виду, что это тестовая среда, но она останавливает всю разработку/тестирование, потому что мы не можем развернуть какие-либо изменения в нашей базе данных, потому что одно из этих изменений затрагивает один из объектов, которые были обработаны процессом. подключение.
Edit: дополнительная информация из activity monitor:
Команда = 'убит/откат'
СОСТОЯНИЕ ЗАДАЧИ = 'ПРИОСТАНОВЛЕНО'
2 ответов:
Ну, это похоже на блокировку из-за параллельной обработки внутри базы данных tempdb.
Вы можете попробовать
kill [processid], Если у вас есть на это права?Другой способ-получить более подробную информацию о процессе с помощью этого:
SELECT * FROM sys.sysprocesses WHERE spid = YOURSPIDКак процесс выполняется в DB: 2 попробуйте следующее:
Как я уже видел, вы отредактировали свой вопрос. Если Spid находится в убитом / ОТКАТНОМ состоянии, вы должны подождать, пока ваша транзакция не будет откатана. После этого процесс будет убит и удален. Ты ничего не можешь сделать. остальное, как и безопасность сделки, должно быть дано.SELECT * FROM tempdb.sys.all_objects WHERE object_id = OBJECTID
Я пережил это в мае. Когда вы убиваете большой оператор INSERT/UDPATE/DELETE, восстановление (если оно вообще происходит) из этого состояния может занять несколько часов.
Выполнить kill
со статусом only. Это даст вам процент и расчетное время ожидания процесса отката.
Иногда он говорит 0% или 100% и 0 расчетное время. Если вы будете терпеливы, то со временем он может восстановиться. Если вы перезагрузите сервер, процесс отката будет завершен в автономном режиме, и база данных будет отображаться в состоянии восстановления и обычно будет быстрее, чем ожидание восстановления сервера.
Имейте в виду, что пользователи не смогут использовать базу данных до завершения процесса восстановления, но если SPID в состоянии KILLED/ROLLBACK блокирует другой процесс, его можно перезапустить.
Comments