KB4077105 - 修复:当SQL Server进程的虚拟地址空间非常低时出现内存不足错误SQL Server

应用对象
SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

症状

假设在运行 Windows Server 2012 或早期版本的 Windows 操作系统的计算机上安装 64 位版本的 Microsoft SQL Server 2014、2016 或 2017。 当SQL Server用完所有用户模式虚拟地址空间时,可能会在SQL Server错误日志中收到内存不足错误消息。 此外,查询需要很长时间才能完成执行,并且发生SOS_MEMORY_TOPLEVELBLOCKALLOCATOR等待。

检查以下信息点时,你会发现虚拟地址空间非常少:

  • DBCC MEMORYSTATUS - 进程/系统计数部分 - 可用虚拟内存
  • DMV:sys.dm_os_process_memory - 列virtual_address_space_available_kb

在 x64 进程中,这些值从大约 8 TB (TB) 开始,然后继续向下攀升, (GB) 达到几千兆字节。

如果处于可用虚拟地址空间非常少的阶段,尝试执行内存分配的查询也可能会遇到等待类型的 CMEMTHREAD。

随着时间推移,以下数据点将继续增加:

  • DMV:sys.dm_os_process_memory和sys.dm_os_memory_nodes - 列virtual_address_space_reserved_kb
  • DBCC MEMORYSTATUS - 内存管理器部分 - VM 保留

这些值通常以“最大服务器内存”值的倍数增加,高达近 8 TB。

注意知识库3074434中也介绍了相关问题。

解决方法

此更新包含在以下SQL Server累积更新中:

2017 SQL Server累积更新 4

SQL Server 2016 SP1 的累积更新 8

SQL Server 2014 Service Pack 2 的累积更新 10

关于SQL Server的累积更新:

SQL Server的每个新累积更新都包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看SQL Server的最新累积更新:

SQL Server 2017 的最新累计更新

SQL Server 2016 年的最新累积更新

SQL Server 2014 年的最新累积更新

注意 应用此更新后,必须添加跟踪标志 8075 作为启动参数才能启用此更改。

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

了解 Microsoft 用于描述软件更新的术语