适用于: SQL Server 2025 (17.x) 及更高版本
服务器 max lock manager cache memory (%) 配置选项将锁管理器缓存可以使用的内存量限制为 SQLOS 提交内存总量的百分比。 默认情况下,配置设置为 20%。
Availability
以下 SQL 平台和版本提供了此配置选项:
- SQL Server 2025 (17.x) 累积更新 (CU) 5 及更高版本
Remarks
释放锁时,锁结构使用的内存不会释放,而是由锁管理器缓存,以避免后续锁获取中的内存分配开销并提高性能。
在 SQL Server 2025 (17.x) CU 5 之前以及更早版本的 SQL Server 中,锁管理器缓存可增长到锁管理器内存的最大上限,该上限为 SQLOS 已提交内存总量的 60%。 工作负荷可以增大锁管理器缓存的大小,达到此限制。 例如,当数据库引擎实例禁用了锁升级时,这种不常见的情况可能会在大规模并发查询工作负载中发生。 如果锁管理器缓存变得很大,SQL Server 实例的缓冲池、计划缓存和其他内存缓存就会缩小,从而降低性能。
在 SQL Server 2025 年 (17.x) CU 5 及更高版本中,锁管理器缓存的最大大小默认限制为 20%。 如果工作负载需要,锁管理器内存仍可增长到 SQLOS 已提交内存的 60%。 但是,在释放锁时,如果锁管理器缓存已达到其配置的上限,则内存会被释放,而不是被缓存。
不建议将 max lock manager cache memory (%) 配置设置为大于 20% 的值,但支持向后兼容。 可以在 20-60% 范围内设置值。
可以使用 sys.dm_os_memory_clerks 监视锁管理器内存的总大小,其中 OBJECTSTORE_LOCK_MANAGER 为内存分配对象类型。 在空闲数据库引擎实例上,报告的值是锁管理器缓存内存的大小。
示例
答: 设置锁管理器缓存内存的最大大小
以下示例将最大锁管理器缓存内存设置为 25% :
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'max lock manager cache memory (%)', 25;
RECONFIGURE;
B. 监控锁管理器内存
以下示例显示了锁管理器内存的当前大小。 该值包括获取的锁持有的内存(如果有)和缓存的内存,以提高后续锁获取的性能。
SELECT SUM(pages_kb) / 1024. AS lock_manager_cache_memory_mb
FROM sys.dm_os_memory_clerks
WHERE type = 'OBJECTSTORE_LOCK_MANAGER';