Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Ten błąd pojawia się losowo, gdy jedna z moich witryn jest zajęta. Wiem z grubsza, na których zestawach tabel się dzieje, ale z doświadczenia z innymi programami zwykle zwracam SQL w miejscu impasu. Czy jest jakaś flaga, którą powinienem włączyć, aby tak się stało?
Spróbuję sam debugować impas jako osobną kwestię, ponieważ na razie to moje główne pytanie.
Używam SQL Server 2008 Standard Edition.
sql-server-2008
deadlock
webnoob
źródło
źródło
;-T1204
aby flaga śledzenia zakończyła się i ponownie uruchomiła usługę.-1
parametrDBCC TRACEON
oznaczający globalny.Odpowiedzi:
Potrzebne dane są zapisywane w domyślnym śledzeniu zdarzeń rozszerzonych.
Chociaż już go nie będzie, jeśli zrestartowałeś usługę -eg, aby zastosować flagę śledzenia lub jeśli bufor był w międzyczasie cykliczny.
Możesz skonfigurować własne śledzenie zdarzeń rozszerzonych, które przechowuje wykres impasu w miejscu docelowym pliku w celu trwałego przechowywania nieulotnego. Przykładowy kod tutaj . Osobiście uważam, że XML impasu jest bardziej przyjazny niż wyjście flagi śledzenia.
Edytować
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
naSELECT
liście, jak opisano tutaj .źródło
Odpowiedź Zaakceptowany nie działa dla mnie konsekwentnie. Bufor pierścieniowy najwyraźniej znany jest z upuszczania zdarzeń w pewnych okolicznościach.
ConnectItem
Problemy z buforem pierścieniowym
Pliki zdarzeń dziennika system_health można przeanalizować (z tej odpowiedzi ):
Pole XdlFile można zapisać w pliku .xdl i wczytać do SSMS. Testowane w Sql Server 2012.
źródło