Houve deadlock dos recursos da transação com outro processo, e a transação foi escolhida como vítima do deadlock. Execute a transação novamente

Microsoft.SQLServer.2008.Transaction_was_deadlocked_on_resources_with_another_process_and_has_been_chosen_as_the_deadlock_victim._Rerun_the_transaction_1_5_Rule (Rule)

Knowledge Base article:

Resumo

Este erro ocorre quando o Microsoft® SQL Server™ encontra um deadlock. Um deadlock ocorre quando dois (ou mais) processos tentam acessar um recurso bloqueado pelo outro processo. Como cada processo tem uma solicitação para outro recurso, nenhum processo pode ser concluído. Quando um deadlock é detectado, o SQL Server reverte o comando com o tempo de processamento mínimo e retorna a mensagem de erro 1205 ao aplicativo cliente. Esse erro não é fatal e talvez não resulte no encerramento do lote.

Resoluções

Em algumas instâncias, uma condição de deadlock fará com que uma função DB-Library (como dbsqlexec, dbsqlok, dbresults ou dbnextrow) retorne FAIL. O programa sempre será responsável por verificar os códigos de retorno de cada função DB-Library. Se FAIL for retornado por uma dessas funções DB-Library, o programa deverá cancelar o lote e não tentará continuar. Em alguns casos, é possível continuar a execução de funções subsequentes no lote. No entanto, como ocorreu uma situação de deadlock e as funções que a causaram foram revertidas, as funções posteriores no lote provavelmente falharão com um erro mais grave, como "objeto não encontrado".

Em outras instâncias, uma condição de deadlock não fará com que uma função DB-Library retorne FAIL. Nesses casos, o programa deve procurar a mensagem de erro 1205 no manipulador de mensagens e usar a função dbsetuserdata para comunicar essa informação ao aplicativo. Em seguida, o programa deverá procurar o indicador de deadlock após cada chamada DB-Library e cancelar o lote se um deadlock for detectado.

Embora possa parecer desnecessário cancelar um lote após o recebimento da mensagem de deadlock 1205, esse procedimento é necessário porque o servidor nem sempre encerra o lote em uma situação de deadlock. Se o lote não for cancelado, todas as tentativas de envio de um novo lote poderão resultar no erro de biblioteca de banco de dados 10038, "Resultados Pendentes".

Você também pode usar a instrução SET DEADLOCK_PRIORITY (LOW ou NORMAL). SET DEADLOCK_PRIORITY controla como a sessão reage em uma situação de deadlock. Se estiver definido como LOW, o processo será a vítima preferencial de uma situação de deadlock. Se estiver definido como NORMAL, a sessão usará o método padrão de manipulação de deadlock.

Se a situação de deadlock continuar, é sempre útil usar o sinalizador de rastreamento 1204 para reunir mais informações. O sinalizador de rastreamento 1204 imprime as cadeias e vítimas de deadlocks, conforme nesta saída de amostra:

*** Deadlock detectado *** == Processo 7 escolhido como vítima de deadlock == Deadlock detectado em: 1998-09-10 16:39:29.17 == Informações do participante da sessão: SPID: 7 ECID: 0 Tipo de instrução: ATUALIZAR Entrada Buf: atualizar t1 conjunto c1 = c1 no qual c1 = 2 SPID: 8 ECID: 0 Tipo de instrução: ATUALIZAR Entrada Buf: atualizar t1 conjunto c1 = c1 no qual c1 = 1 == Informações do participante do Bloqueio de Deadlock: == Bloqueio: CHAVE: 2:117575457:1 (010001000000) Banco de dados: tempdb Tabela: t1 Índice: i1 - Mantido por: SPID 7 ECID 0 Modo "S" - Solicitado por: SPID 8 ECID 0 Modo "X" == Bloqueia: CHAVE: 2:117575457:1 (020002000000) Banco de dados: tempdb Tabela: t1 Índice: i1 - Mantido por: SPID 8 ECID 0 Modo "S" - Solicitado por: SPID 7 ECID 0 Modo "X"

Essas informações de deadlock podem ser interpretadas da seguinte maneira:

Parâmetros Substituíveis

Nome

Descrição

Valor padrão

Habilitado

Habilita ou desabilita o fluxo de trabalho.

Sim

Prioridade

Define a Prioridade do Alerta.

1

Severidade

Define a Severidade do Alerta.

1

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID1205
Event Source$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
Houve deadlock dos recursos da transação com outro processo, e a transação foi escolhida como vítima do deadlock. Execute a transação novamente
{0}
Event LogApplication
CommentMom2008ID='{5DEC3ED6-3871-44AB-9D4B-2433D8BAA8A5}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.Windows.EventProvider Microsoft.SQLServer.SQLDefaultAccount
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.2008.Transaction_was_deadlocked_on_resources_with_another_process_and_has_been_chosen_as_the_deadlock_victim._Rerun_the_transaction_1_5_Rule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2008ID='{5DEC3ED6-3871-44AB-9D4B-2433D8BAA8A5}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Windows!Microsoft.Windows.EventProvider" RunAs="SQL!Microsoft.SQLServer.SQLDefaultAccount">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>1205</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2008.Transaction_was_deadlocked_on_resources_with_another_process_and_has_been_chosen_as_the_deadlock_victim._Rerun_the_transaction_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>