Compartir a través de


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 actualiza Table1.Row1, mientras que las actualizaciones de Transaction2 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 Transaction1 espera a que se complete Transaction2, pero Transaction2 está esperando a que se complete Transaction1.

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 (Table1y, 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.