Compartir por


MSSQLSERVER_1205

Se aplica a: SQL ServerAzure SQL Database Azure SQL Instancia administrada

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.