MSSQLSERVER_1205
Se aplica a: SQL Server Azure SQL Database Azure 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 actualiza Table1.Row1, mientras que Transaction2 actualiza Table2.Row2.
- Transaction1 intenta actualizar Table2.Row2, pero está bloqueado porque Transaction2 aún no se ha confirmado y no ha liberado sus bloqueos
- Transaction2 ahora intenta actualizar Table1.Row1, pero está bloqueado porque Transaction1 no se ha confirmado y no ha liberado sus bloqueos
- Se produce un interbloqueo porque Transacción1 está esperando a que Transacción2 finalice, pero Transacción2 está esperando a que finalice Transacción1.
El sistema detectará este interbloqueo y elegirá una de las transacciones implicadas como "víctima". Seguidamente, emitirá este mensaje de error y revertirá la transacción de la víctima. Para obtener información detallada, consulte Interbloqueos.
Acción del 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. Consulte este blog para obtener un ejemplo de cómo reintentar: controlar el interbloqueo y volver a ejecutar la consulta: 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 volver a intentar y probablemente se realizará correctamente, en función de qué operaciones se estén ejecutando simultáneamente.
Para evitar la aparición de interbloqueos, valore la posibilidad de hacer que todas las transacciones accedan a las filas en el mismo orden (primero, Table1; después, Table2). De esta forma, aunque se puedan producir bloqueos, no se generarán interbloqueos.
Para obtener más información, consulte Control de interbloqueos y Minimización de interbloqueos.