MSSQLSERVER_1205
Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Detalles
Attribute | Valor |
---|---|
Nombre del producto | SQL Server |
Id. de evento | 1205 |
Origen de eventos | MSSQLSERVER |
Componente | SQLEngine |
Nombre simbólico | LK_VICTIM |
Texto del mensaje | La transacción (Id. de proceso %d) quedó en interbloqueo en %.*ls recursos con otro proceso y fue elegida como sujeto del interbloqueo. Vuelva a ejecutar la transacción. |
Explicación
El orden en el que se accede a los recursos en transacciones independientes es conflictivo y provoca un interbloqueo. Por ejemplo:
-
Transaction1
actualizaTable1.Row1
, mientras que las actualizaciones de Transaction2Table2.Row2
-
Transaction1
intenta actualizarTable2.Row2
pero está bloqueado porqueTransaction2
aún no se ha confirmado y no ha liberado sus bloqueos - Transaction2 ahora intenta actualizar
Table1.Row1
pero está bloqueado porqueTransaction1
no se ha confirmado y no ha liberado sus bloqueos - Se produce un interbloqueo porque
Transaction1
espera a que se completeTransaction2
, peroTransaction2
está esperando a que se completeTransaction1
.
El sistema detecta este interbloqueo y elige una de las transacciones implicadas como víctima de . A continuación, emite este mensaje de error, lo que revierte la transacción de la víctima. Para obtener información detallada, consulte Interbloqueos.
Acción de usuario
Los interbloqueos están en la mayoría de los casos problemas relacionados con la aplicación y requieren que los desarrolladores de aplicaciones realicen cambios en el código. Un enfoque cuando recibe el error 1205 es volver a ejecutar las consultas. Para obtener más información, vea aplicación de simulador de interbloqueo para desarrolladores: Cómo controlar un problema de interbloqueo de SQL en La aplicación.
También puede revisar la aplicación para evitar los interbloqueos. La transacción elegida como víctima se puede reintentar y probablemente se realice correctamente, en función de las operaciones que se ejecuten simultáneamente.
Para evitar que se produzcan interbloqueos, considere la posibilidad de que todas las transacciones accedan a filas en el mismo orden (Table1
y, a continuación, Table2
). De este modo, aunque puede producirse un bloqueo, se evita un interbloqueo.
Para obtener más información, consulte Control de interbloqueos y Minimización de interbloqueos.