修复:内存超出了 SQL Server 中 memory.memorylimitmb 指定的已配置限制

现象

Linux 上的 SQL Server可能不符合 memory.memorylimitmb 配置选项设置的内存边界,如监视工具(如顶部和 ps)显示超出配置限制的内存使用量的证据。

例如,请注意,以下命令中的“驻留内存大小”(RES)或“驻留内存使用情况”(RSS)字段报告的内存高于所 memory.memorylimitmb配置的内存。

top -p $(pidof sqlservr | cut -d' ' -f1)

ps -p $(pidof sqlservr | cut -d' ' -f1) -u

解决方法

此问题已在 SQL Server 的以下累积更新中修复:

注意

应用修补程序后,对于配置了 Active Directory 身份验证的服务器,你仍可能会看到此问题或注意到内存限制 memory.memorylimitmb 已快速使用。 在此方案中,还需要将 Linux 上的 Kerberos v5 (krb5) 包版本更新为 1.19.2 或更高版本,以解决 defcred 泄漏问题 krb5_gss_inquire_cred()。 有关详细信息,请参阅 修复krb5_gss_inquire_cred()中的已解除加密泄漏。

对于 Red Hat Enterprise Linux(RHEL)8、Ubuntu 20.04 或 SUSE Linux Enterprise Server (SLES) 12 发行版,可能需要联系 Linux 分发供应商,请求更新的 krb5 包。

如果无法更新包,仍可以通过在应用程序连接字符串中使用共用连接来解决泄漏krb5_gss_inquire_cred()问题。

监视Linux 上的 SQL Server中的内存使用情况

安装 SQL Server 2022 累积更新 14(CU14)或 SQL Server 2019 CU27 或更高版本后,你将能够使用 system_low_memory_signal_state 动态管理视图中的列和 system_high_memory_signal_statesys.dm_os_sys_memory 来监视系统资源警报。 如果 system_low_memory_signal_state 一直显示 1,请考虑增加 SQL Server 的内存分配,或查看消耗最多内存的查询,然后解决其内存需求。

关于 SQL Server 的累积更新

SQL Server 的每个新的累积更新都包含上一个版本中的所有修补程序和安全修补程序。 建议为 SQL Server 版本安装最新版本:

Status

Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。

参考

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

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。