MSSQLSERVER_1204
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Detalles
Attribute | Valor |
---|---|
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 puede usar más del 60 % de la memoria disponible para SQL Server y ya se ha cumplido el umbral.
Configure los bloqueos de opción de configuración del procedimiento almacenado del sistema sp_configure (Transact-SQL) en un valor no dinámico y no predeterminado.
Ha habilitado 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 las siguientes opciones:
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 libera memoria de otros procesos para SQL Server.
Si configuró la memoria máxima del servidor, aumente la configuración de memoria máxima del servidor.
Si sospecha que el administrador de bloqueos usó la cantidad máxima de memoria disponible, identifique la transacción que contiene más bloqueos y la termine. El siguiente script identifica 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
, usesp_configure
para cambiar el valor delocks
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.