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
atualizaTable1.Row1
, enquanto o Transaction2 atualizaTable2.Row2
-
Transaction1
tenta atualizarTable2.Row2
mas está bloqueado porqueTransaction2
ainda não se comprometeu e não liberou seus bloqueios - A Transaction2 agora tenta atualizar
Table1.Row1
mas está bloqueada porqueTransaction1
não se comprometeu e não liberou seus bloqueios - Um deadlock ocorre porque
Transaction1
está aguardandoTransaction2
ser concluído, masTransaction2
está aguardandoTransaction1
ser concluído.
O sistema detecta esse deadlock e escolhe uma das transações envolvidas como vítima. Em seguida, ele emite 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 ao aplicativo 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. Para obter mais informações, consulte aplicativo De simulador de deadlock para desenvolvedores: como lidar com um problema de deadlock do SQL em seu aplicativo.
Você também pode revisar o aplicativo para evitar deadlocks. A transação escolhida como vítima pode ser repetida e provavelmente bem-sucedida, dependendo de quais operações estão sendo executadas simultaneamente.
Para impedir ou evitar que deadlocks ocorram, considere ter todas as linhas de acesso de transações na mesma ordem (Table1
e, em seguida, Table2
). Dessa forma, embora o bloqueio possa ocorrer, um deadlock é evitado.
Para obter mais informações, consulte Manipulando deadlocks e minimizando deadlocks.