我有一台 12 GB 物理内存的服务器。我只是将其'Max Server Memory (MB)'
设置从 10 GB 降低到 8 GB。
如果我在 Perfmon 中查看进程提交的内存,我会看到:
select *
from sys.dm_os_performance_counters
where [object_name] like 'SQLServer:Memory Manager%';
go
目标服务器内存 (KB):8388608 总服务器内存 (KB):8388608
显示 SQL Server 已经从缓冲池中释放了额外的 2 GB 内存。
但是,如果我看一下sys.dm_os_sys_info
:
select [bpool_committed]
, [bpool_commit_target]
, [bpool_visible]
from sys.dm_os_sys_info;
go
我得到不一致的结果:
bpool_committed = 1048576 bpool_commit_target = 1048576 bpool_visible = 1048576
不应该sys.dm_os_sys_info
反映性能计数器上的信息吗?
我在 Windows Server 2003 上运行 Microsoft SQL Server 2005 SP1。
没有不一致:
Perfmon 和
sys.dm_os_sys_info
显示 8 GB;[bpool_visible], [bpool_commit_target] and [bpool_committed]
- 在 SQL 2005 中,所有这些都被定义为“8 KB 缓冲区的数量......” (http://msdn.microsoft.com/en-us/library/ms175048(v=sql.90).aspx),所以您必须将结果乘以 8 才能得到 KB;从 SQL 2008 R2 开始,您不再需要进行乘法运算。如果您想在查询中使用乘法,请尝试:
这些值确实不一致,并在实例重启后恢复正常。
我建议不要使用
sys.dm_os_sys_info
此类信息,因为它不可靠,而是使用性能计数器。