Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Я получаю эту ошибку случайно, когда один из моих веб-сайтов становится занятым. Я примерно знаю, с какими наборами таблиц это происходит, но по своему опыту работы с другими программами я обычно получаю SQL, возвращаемый там, где происходит тупик. Есть ли флаг, который я должен включить, чтобы это произошло?
Я попытаюсь отладить сам тупик как отдельную проблему, так как это мой главный вопрос на данный момент.
Я использую SQL Server 2008 Standard Edition.
sql-server-2008
deadlock
webnoob
источник
источник
;-T1204
флаг трассировки для завершения и перезапустите службу.-1
параметр,DBCC TRACEON
обозначающий глобальный.Ответы:
Необходимые данные записываются в расширенную трассировку событий по умолчанию.
Хотя этого больше не будет, если вы перезапустили сервис -eg, чтобы применить флаг трассировки, или если буфер зациклился за это время.
Вы можете настроить собственную расширенную трассировку событий, в которой график взаимоблокировки сохраняется в целевом файле для постоянного энергонезависимого хранилища. Пример кода здесь . Лично я считаю, что XML-код тупика более удобен, чем вывод флага трассировки.
редактировать
CAST(REPLACE(REPLACE(XEventData.XEvent.value('(data/value)[1]', 'varchar(max)'), '<victim-list>', '<deadlock><victim-list>'), '<process-list>', '</victim-list><process-list>') AS XML) AS DeadlockGraph
вSELECT
списке, как описано здесь .источник
Общепринятый ответ не работает для меня последовательно. Известно, что кольцевой буфер отбрасывает события при определенных обстоятельствах.
ConnectItem
Проблемы кольцевого буфера
Файлы событий журнала system_health могут быть проанализированы (из этого ответа ):
Поле XdlFile можно сохранить в файл .xdl и прочитать в SSMS. Протестировано в Sql Server 2012.
источник