MSSQLSERVER_1204

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Detalles

Attribute Value
Nombre del producto SQL Server
Id. de evento 1204
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico LK_OUTOF
Texto del mensaje La instancia del motor de base de datos de SQL Server no puede obtener un recurso LOCK en este momento. Vuelva a ejecutar la instrucción cuando haya menos usuarios activos. Pida al administrador de la base de datos que compruebe la configuración de bloqueos y memoria de esta instancia o si hay transacciones que se ejecutan durante mucho tiempo.

Explicación

Durante la ejecución, las consultas suelen adquirir y liberar frecuentemente bloqueos en los recursos a los que acceden. La adquisición de un bloqueo utiliza las estructuras de bloqueo de un grupo disponible de estructuras de bloqueo. Cuando no se pueden adquirir bloqueos nuevos porque no hay más estructuras de bloqueo disponibles en el grupo, se devuelve el mensaje de error 1204. Este problema puede deberse a cualquiera de los siguientes motivos:

  • SQL Server no puede asignar más memoria, ya sea porque otros procesos lo usan o porque SQL Server ha usado toda su memoria y ha alcanzado el valor configurado mediante la opción de configuración max server memory (Memoria máxima del servidor).

  • El administrador de bloqueos no usará más del 60 % de la memoria disponible para SQL Server y ya se ha cumplido el umbral.

  • Ha configurado los bloqueos de opción de configuración del procedimiento almacenado del sistema sp_configure en un valor no dinámico y no predeterminado.

  • Ha habilitado las marcas de seguimiento 1211, 1224 o ambas en SQL Server para controlar el comportamiento de escalación de bloqueos y está ejecutando consultas que requieren muchos bloqueos.

Acción del usuario

  • Si sospecha que SQL Server no puede asignar memoria suficiente, pruebe lo siguiente:

    • Identifique si algún otro distribuidor de memoria dentro de SQL Server ha usado una gran parte de la memoria configurada de SQL Server mediante una consulta como la siguiente:

      SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
      
      FROM sys.dm_os_memory_clerks
      
      ORDER BY pages_kb DESC
      

      A continuación, reduzca el consumo de memoria de ese distribuidor de memoria para permitir que la memoria de bloqueo use más recursos. Para obtener más información, consulte Solución de problemas de memoria insuficiente o de memoria insuficiente en SQL Server.

    • Si hay otras aplicaciones que consumen recursos aparte de SQL Server, intente detener dichas aplicaciones o considere la posibilidad de ejecutarlas en un servidor independiente. Esto liberará memoria de otros procesos para SQL Server.

    • Si ha configurado la memoria máxima del servidor, aumente la configuración de memoria máxima del servidor.

  • Si sospecha que el administrador de bloqueos ha utilizado la cantidad máxima de memoria disponible, identifique la transacción que retiene más bloqueos y finalícela. El siguiente script identificará la transacción que tiene más bloqueos:

    SELECT request_session_id, COUNT (*) num_locks  
    FROM sys.dm_tran_locks  
    GROUP BY request_session_id   
    ORDER BY count (*) DESC  
    

    Tome el identificador de sesión más alto y terminación con el comando KILL .

  • Si usa un valor no predeterminado para locks, use sp_configure para cambiar el valor de locks a su configuración predeterminada mediante la instrucción siguiente:

    EXEC sp_configure 'locks', 0
    
  • Si encontró el mensaje de error anterior al usar las marcas de seguimiento de SQL Server 1211, 1224 o ambas, revise su uso y deshabilite mientras ejecuta consultas que requieren un gran número de bloqueos. Para obtener más información, consulte DBCC TRACEON - Marcas de seguimiento (Transact-SQL) y Resolución de problemas de bloqueo causados por la extensión de bloqueo en SQL Server.