MSSQLSERVER_1205

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Detalhes

Atributo Valor
Nome do produto SQL Server
ID do evento 1205
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico LK_VICTIM
Texto da mensagem A transação (ID do processo %d) entrou em deadlock em %.*ls recursos com outro processo e foi escolhida como a vítima do deadlock. Execute a transação novamente.

Explicação

Os recursos podem ser acessados em ordem conflitante em transações separadas, causando um deadlock. Por exemplo:

  • Transaction1 atualiza Table1.Row1, enquanto Transaction2 atualiza Table2.Row2
  • Transaction1 tenta atualizar Table2.Row2, mas é bloqueado porque Transaction2 ainda não confirmou e não liberou seus bloqueios
  • Transaction2 agora tenta atualizar Table1.Row1, mas está bloqueado porque Transaction1 não confirmou e não liberou seus bloqueios
  • Um deadlock acontece porque a Transação1 está esperando a conclusão da Transação2, mas a Transação2 está esperando a conclusão da Transação1.

O sistema detectará esse deadlock e escolherá uma das transações envolvidas como "vítima". Em seguida, ele emitirá essa mensagem de erro, revertendo a transação da vítima. Para obter informações detalhadas, consulte Deadlocks.

Ação do usuário

Os deadlocks são, na maioria dos casos, problemas relacionados a aplicativos e exigem que os desenvolvedores de aplicativos façam alterações no código. Uma abordagem quando você recebe o erro 1205 é executar as consultas novamente. Consulte este blog para obter um exemplo de como tentar novamente - lidar com o deadlock e executar novamente a consulta: Aplicativo Deadlock Simulator para desenvolvedores: Como lidar com um problema de bloqueio SQL em seu aplicativo

Você também pode revisar o aplicativo para evitar deadlocks. A transação escolhida como vítima pode ser testada novamente e, provavelmente, terá êxito, dependendo de quais operações estiverem sendo executadas simultaneamente.

Para impedir ou evitar a ocorrência de deadlocks, faça com que todas as transações acessem as linhas na mesma ordem (Table1 e, depois, Table2). Desse modo, embora possa acontecer um bloqueio, não ocorrerá um deadlock.

Para obter mais informações, consulte Manipulando deadlocks e minimizando deadlocks.