我使用 SQL Server 已经有一段时间了,我知道任务管理器报告的 SQL 内存不准确。
但是,我最近一直在对其他人设置的 SQL Server 进行一些测试。
我期待看到sqlservr.exe
在大约 40mb 内存下运行。但是,任务管理器显示正在使用超过 4Gb 的内存。
SQL Server 中是否存在导致任务管理器不准确地报告此问题的设置?或者我的 SQL Server 的后台有什么问题导致它膨胀?
任务管理器报告的数字并不完全准确;你只需要了解这个数字告诉你什么。
如果您展开任务管理器列以查看整个标题,您将看到它显示:Memory (Private Working Set)。工作集不包括通过地址窗口扩展(AWE)访问的任何内存。
AWE 是一种技术 API,它允许 32 位进程访问比其 4GB 虚拟地址空间更多的内存,方法是将虚拟地址空间的小“窗口”映射和重新映射到更大的物理内存空间。
AWE 是 32 位 SQL Server 如何能够访问超过 4GB 的内存,并且在 64 位 SQL Server 中使用相同的机制来实现“锁定页面”功能。
因此,任务管理器将仅显示相对少量的内存用于:
在您的情况下,任务管理器报告使用了超过 4GB,您正在查看的 SQL Server 似乎是一个未使用锁定页面的 64 位安装。不使用任务管理器,而是使用性能监视器 SQL Server 实例计数器 Total Server Memory,或在 SQL Server 2008 及更高版本中查询sys.dm_os_process_memory DMV。
参考和进一步阅读:Fun with Locked Pages、AWE、任务管理器和Microsoft 客户服务和支持 (CSS) SQL 支持的工作集。