SQL Server内存使用情况不相符

编辑对不起忘记的细节,我正在运行SQL Server 2008 R2 16GB的RAM

我的最小/最大内存分配设置为13 GB。 运行perfmon – SQL Server:内存pipe理器。 目标服务器内存和总服务器内存证实了这一点。 任务pipe理器中的内存计数器为15 GB(假设2GB用于其他应用程序)

我不明白为什么进程sqlservr.exe只显示任务pipe理器中的82KB的使用情况? 除此之外,从任务pipe理器运行在我的服务器上的进程消耗的所有内存也不会增加到15 GB。

那么是什么给了

115982是一个非常相似的问题

这是一个64位的服务器 – 你有内存本地策略启用locking页面吗?

最可能的原因是这个SQL Server 64位实例正在使用“locking页面”,正如我在前面的问题中所描述的那样。 请注意,任务pipe理器列中的名称称为内存(专用工作集)。 还记得我们还说过,如果SQL Server 64位实例使用“locking页面”,这个内存将不会成为工作集的一部分(因为记得AWE API在64位上用来“locking”页面,而且内存不是工作集的一部分) 。 因此,由于locking的页面不是工作集的一部分,所以它们不会出现在任务pipe理器的这一列中。 在Windows Server 2003的任务pipe理器中,此列被称为“内存使用情况”,但也反映了进程的工作集。

这是一篇深入解释的文章

你也可以在SQL中查看计数器

SELECT object_name ,Counter_name ,cntr_value ,ROUND(( cntr_value * 8192.0 ) / 1048576, 0) AS cntr_value_MB FROM sys.dm_os_performance_counters WHERE object_Name LIKE '%Buffer Manager%' AND RTRIM(counter_name) IN ( 'Free pages', 'Total pages', 'Database pages' ) UNION SELECT object_name ,Counter_name ,cntr_value ,ROUND(( cntr_value / 1024 ), 0) AS cntr_value_MB FROM sys.dm_os_performance_counters WHERE counter_name IN ( 'Target Server Memory (KB)', 'Total Server Memory (KB)' ) 

你使用的是什么版本的SQL Server? 是x64还是x86?

我猜测这是一个使用AWE的x86机器。 使用AWE时,任务pipe理器不报告正在使用的正确内存量。 这是正常的,使用perfmon计数器来查看有多less内存在使用中。