Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
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) foi bloqueada em %recursos .*ls com outro processo e foi escolhida como a vítima do deadlock. Execute novamente a transação. |
Explicação
Os recursos são acessados em ordem conflitante em transações separadas, causando um impasse . Por exemplo:
-
Transaction1atualizaTable1.Row1, enquanto o Transaction2 atualizaTable2.Row2 -
Transaction1tenta atualizarTable2.Row2mas está bloqueado porqueTransaction2ainda não se comprometeu e não liberou seus bloqueios - Transaction2 agora tenta atualizar
Table1.Row1mas está bloqueado porqueTransaction1não se comprometeu e não liberou seus bloqueios - Um impasse ocorre porque
Transaction1está esperando queTransaction2seja concluída, masTransaction2está esperando queTransaction1seja concluída.
O sistema deteta esse impasse e escolhe uma das transações envolvidas como vítima . Em seguida, 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 Deadlock Simulator for Developers: How to Handle a SQL Deadlock issue in Your App.
Você também pode revisar o aplicativo para evitar bloqueios. A transação que foi escolhida como vítima pode ser tentada novamente e provavelmente terá sucesso, dependendo de quais operações estão sendo executadas simultaneamente.
Para evitar ou evitar que ocorram bloqueios, considere ter todas as linhas de acesso de transações na mesma ordem (Table1e, em seguida, Table2). Desta forma, embora o bloqueio possa ocorrer, evita-se um impasse.
Para obter mais informações, consulte Manipulando impasses e minimizando impasses.