SQL Server 转而只使用页面文件而不是 RAM 并有效地冻结了世界

Ela*_*tor 1 sql-server memory

昨天我敲打我的 SQL Server 实例大约 3 个小时,运行密集计算,消耗了所有分配的物理 RAM (由于我的工作站硬件有限,我将它限制为 2GB),突然它(和许多其他东西?)释放了所有他们的内存明显切换到专门使用页面文件。

在我被迫重新启动之后,我的计算机出现了令人难以置信的滞后(仅访问电源选项就花了 10 分钟)。

我能够在重新启动之前获得任务管理器的屏幕截图(我以低更新速度在后台运行)。调整窗口大小以显示最大历史记录后,如下所示:

在此处输入图片说明

这种令人惊讶的行为导致了停机。这是记录在案的功能吗?

我正在运行带有 Enterprise 2014 数据库引擎的 Windows Server 2008 R2。

谢谢。

Sha*_*nky 6

这种令人惊讶的行为导致了停机。这是记录在案的功能吗?

是的,它记录在 Windows中的RAM、虚拟内存、页面文件和内存管理中。引自这篇支持文章

RAM 是一种有限的资源,而对于大多数实际用途而言,虚拟内存是无限的。可以有很多进程,每个进程都有自己的 2 GB 私有虚拟地址空间。当所有现有进程使用的内存超过可用 RAM 时,操作系统会将一个或多个虚拟地址空间的页面(4 KB 片段)移动到计算机的硬盘上。这将释放该 RAM 帧以供其他用途。在 Windows 系统中,这些“调出”的页面存储在分区根目录中的一个或多个文件(Pagefile.sys 文件)中。每个磁盘分区中可以有一个这样的文件。页面文件的位置和大小在系统属性中配置(单击高级,单击性能,然后单击设置按钮)。

之所以冻结,是因为磁盘速度比内存速度慢得多。分页后,磁盘的一部分表现得像 RAM。

要了解在给定时间分页的内存量,您可以使用 DMV sys.dm_os_process_memory。看看 columnphysical_memory_in_use_kb和 的区别virtual_address_space_committed_kb。这两列的差异将为您提供使用分页内存的 SQL Server。

select (virtual_address_space_committed_kb/1024) as Total_Memory_Used_MB, --Ram+page file
(physical_memory_in_use_kb/1024) as Total_physical_memory_used_MB ,--PhysicalMemory Used
((virtual_address_space_committed_kb-physical_memory_in_use_kb)/1024) as Page_file_Utilization_MB
from sys.dm_os_process_memory.
Run Code Online (Sandbox Code Playgroud)

您可以通过在内存特权中为 SQL Server 服务帐户锁定页面来更大程度地避免这种情况。这将不允许对 SQL Server 内存进行分页,但 Windows 仍然可以要求 SQL Server 将其内存利用率调整到最小服务器内存之后,如果仍然存在严重的内存压力,操作系统进程将被分页,这甚至可能导致操作系统意外关闭所以要小心。更好的解决方案是添加更多 RAM,特别是在这种情况下。

编辑:从你的评论

我已经将整个 SQL Server 实例限制为 2GB 内存

哦!!这对于 SQL Server 来说真的太小了,无法工作,而且在您进行一些严格的测试时也是如此