MSSQLSERVER_1204
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
详细信息
Attribute | 值 |
---|---|
产品名称 | SQL Server |
事件 ID | 1204 |
事件来源 | MSSQLSERVER |
组件 | SQLEngine |
符号名称 | LK_OUTOF |
消息正文 | SQL Server 数据库引擎的实例此时无法获得 LOCK 资源。 请在活动用户较少时重新运行该语句。 请询问数据库管理员,检查此实例的锁定和内存配置,或检查是否有长时间运行的事务。 |
说明
在执行期间,查询经常获取和释放其访问的资源上的锁。 获取锁会占用锁结构可用池中的锁结构。 由于池中没有更多可用的锁结构,因此无法获取新锁,将返回错误 1204 消息。 此问题可能是由于以下任何原因造成的:
SQL Server 无法分配更多内存,要么是因为其他进程正在使用它,或者 SQL Server 已用尽其所有内存,并且已达到使用配置选项 最大服务器内存配置的值。
锁管理器不能使用 SQL Server 可用的超过 60% 的内存,并且已满足阈值。
在 SQL Server 上启用了跟踪标志 1211、 1224 或两者,以控制锁升级行为,并且正在执行需要许多锁的查询。
用户操作
如果怀疑 SQL Server 无法分配足够的内存,请尝试以下选项:
通过使用如下所示的查询,确定 SQL Server 中是否有任何其他内存 clerk 使用了大部分 SQL Server 配置的内存:
SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
然后减少该内存分配器的内存占用,以允许锁定内存使用更多资源。 有关详细信息,请参阅 SQL Server 中的内存不足或内存不足问题疑难解答。
如果除 SQL Server 外的应用程序正在占用资源,请尝试停止这些应用程序,或者考虑在单独的服务器上运行它们。 这会从 SQL Server 的其他进程释放内存。
如果配置 了最大服务器内存,请 增加最大服务器内存 设置。
如果怀疑锁管理器使用了最大可用内存量,请确定持有最多锁并终止它的事务。 以下脚本标识具有最多锁的事务:
SELECT request_session_id, COUNT (*) num_locks FROM sys.dm_tran_locks GROUP BY request_session_id ORDER BY count (*) DESC;
获取最高会话 ID,并使用 KILL 命令将其终止。
如果使用非默认值
locks
,请使用sp_configure
以下语句更改其默认设置的值locks
:EXEC sp_configure 'locks', 0;
如果在使用 SQL Server 跟踪标志 1211、1224 或两者时遇到上述错误消息,请在执行需要大量锁的查询时查看其用法并禁用它们。 有关详细信息,请查看 DBCC TRACEON - 跟踪标志(Transact-SQL), 并 解决 SQL Server 中锁升级导致的阻塞问题。