Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Estou recebendo esse erro aleatoriamente quando um dos meus sites fica ocupado. Eu sei aproximadamente em quais conjuntos de tabelas está acontecendo, mas na minha experiência com outros programas, normalmente recebo o SQL retornado onde o impasse está acontecendo. Existe uma bandeira que eu devo ativar para permitir que isso aconteça?
Vou tentar depurar o impasse em si como um problema separado, pois esta é a minha principal questão por enquanto.
Estou usando o SQL Server 2008 Standard Edition.
sql-server-2008
deadlock
webnoob
fonte
fonte
;-T1204
o sinalizador de rastreamento para finalizar e reiniciar o serviço.-1
parâmetro paraDBCC TRACEON
significa global.Respostas:
Os dados necessários são registrados no rastreamento padrão de eventos estendidos.
Embora não exista mais se você tiver reiniciado o serviço -eg para aplicar um sinalizador de rastreamento ou se o buffer tiver alternado enquanto isso.
Você pode configurar seu próprio rastreamento de eventos estendidos que armazena o gráfico de deadlock em um destino de arquivo para armazenamento não volátil persistente. Exemplo de código aqui . Pessoalmente, acho o XML do gráfico de conflito mais amigável do que a saída do sinalizador de rastreamento.
Editar
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
lista, conforme descrito aqui .fonte
A resposta aceita não funcionou para mim consistentemente. O buffer de anel aparentemente é conhecido por descartar eventos em determinadas circunstâncias.
ConnectItem
Problemas do buffer de anel
Os arquivos de eventos de log system_health podem ser analisados (a partir desta resposta ):
O campo XdlFile pode ser salvo em um arquivo .xdl e lido no SSMS. Testado no Sql Server 2012.
fonte