我很好奇,数据库容量为128 GB的SQL 2012 Enterprise Edition的其中一个为370 GB,并且还在不断增长,锁(OBJECTSTORE_LOCK_Manager)内存管理员使用的内存量显示7466016 KB。我也可以通过查看性能计数器来确认select * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
但是,当我运行查询时
select count(*) from sys.dm_tran_locks
它仅显示16个锁。那么,什么使用了超过7 GB的锁。有没有办法找出来?
这是否意味着一旦分配了用于锁的内存,SQL尚未释放它?在过去的1小时内,我看不到锁数超过500,但是锁内存保持不变。
最大服务器内存为106 GB,我们没有在内存中使用锁定页面,并且在过去12小时内我没有看到任何内存压力或错误日志中的任何错误。可用兆字节计数器显示了超过15 GB的可用内存。
活动监视器始终显示0个等待任务,因此显然没有阻塞。
考虑到SQL Server锁占用约100个字节的内存,因此7 GB的内存很大,并试图找出谁在使用它。
我通过锁定计数运行服务器仪表板报告的最重要的事务,它说:“当前系统上没有正在运行的锁定事务。但是,锁定内存仍然如上所示。DB在夜间工作最忙。