昨天我在我的 SQL Server 实例上运行了大约 3 个小时,运行了一个密集的计算,消耗了所有分配的物理 RAM (由于我的工作站硬件有限,我将它限制为 2GB),突然它(以及许多其他东西?)释放了所有他们的内存明显切换到专门使用页面文件。
在我被迫重新启动之后,我的计算机非常滞后(仅访问电源选项就花了 10 分钟)。
我能够在重新启动之前获得任务管理器的屏幕截图(我在后台以低更新速度运行)。调整窗口大小以显示最大历史记录后,它看起来像这样:
这种令人惊讶的行为导致停机。这是记录在案的功能吗?
我正在使用 Enterprise 2014 数据库引擎运行 Windows Server 2008 R2。
谢谢。
是的,它记录在 Windows 中的 RAM、虚拟内存、页面文件和内存管理中。引用这篇支持文章
它冻结的原因是磁盘速度比内存速度慢得多。在磁盘的分页部分表现得像 RAM 之后。
要了解在给定时间分页了多少内存,您可以使用 DMV sys.dm_os_process_memory。查看列
physical_memory_in_use_kb
和的差异virtual_address_space_committed_kb
。这两列的区别将使您使用分页内存的 SQL Server。您可以通过给 SQL Server 服务帐户Locked Pages in Memory Privilege来在更大程度上避免这种情况。这将不允许对 SQL Server 内存进行分页,但 Windows 仍然可以要求 SQL Server 将其内存利用率调整到最小服务器内存,如果仍然存在严重的内存压力,操作系统进程将被分页,这甚至可能导致操作系统意外关闭所以要小心。更好的解决方案是添加更多 RAM,特别是在这种情况下。
编辑:根据您的评论
哦!!这对于 SQL Server 来说实在是太小了,当你在做一些严格的测试时也是如此
社区维基回答:
Windows 分页,这就是虚拟内存管理器的工作方式。如果您在内存中使用锁定页面,它将无法...尽管您可能会崩溃您的系统而不是它变得迟缓。正确设置
max server memory
也是一个好的开始。如果您正在使用的数据集远大于 8GB,则可能是时候考虑将其托管在具有更合适硬件的服务器上。SQL Server 不适用于磁盘上的页面(它们必须被读入内存),并且查询可能会为某些运算符(排序、散列)请求内存。SQL Server 可以使用超出最大服务器内存的内存来授予这些内存。请参阅:您是否为 SQL Server 2012 标准版提供了足够的内存?
如果升级到 SQL Server 2012 或更高版本,请注意对内存管理进行了重大更改。请参阅从 SQL Server 2012 (11.x) 开始对内存管理的更改。特别是,SQL Server 可能会使用超出设置的限制
max server memory
(特别是对于列存储操作)的内存(例如用于排序和散列),但它仍会尝试尽快回到该限制内。