SQL Server 占用的内存超过分配的内存。可能的内存泄漏

Sun*_*nny 5 sql-server memory sql-server-2012

使用 SQL Server 2012 64 位 (v11.0.6020.0 - 2012 SP3)

下面是场景:

在我们的生产中,我们安装了 32 GB DDR3 RAM:

在此处输入图片说明

SQL Server 中的最大内存限制已设置为 16 GB,即 50% 容量:

在此处输入图片说明

当我启动任务管理器并检查内存占用的值时,它显示 16 GB,这是正确的:

在此处输入图片说明

但是当我选择百分比占用的内存时,它显示 80%-85% 这是不正确的:

在此处输入图片说明

这将继续增加,直到它占据超过 95% 并且

  1. 整个系统会变慢
  2. 查询将超时

解决此问题的唯一方法是重新启动服务器

我的问题是

  1. SQL Server 是否泄漏内存?
  2. 有什么快速解决办法,这样我就不必重新启动了吗?
  3. 永久解决?

Sha*_*nky 5

我的问题是 SQL Server 是否泄漏内存?

极不可能,但您应该尽快计划 SQL Server 2012 SP4。根据我过去的经验,我可以说,由于 SQL Server 和其他应用程序(如 SSAS 和 SSRS)都在同一台机器上运行,SQL Server 可能面临内存压力,因此 SSAS/RS 可能也是这种情况。我见过很多这样的系统,这都归结为内存压力。

您有 32 G 的 RAM,而您只为 SQL Server 提供了 16 G 使其达到 20 G,看看这是否有帮助。如果可以的话,添加更多内存肯定会有所帮助。

查询超时的原因可能有很多,SQL Server 性能问题疑难解答可以帮助您找到它的根本原因。

但是当我选择百分比占用的内存时,它显示 80%-85% 这是不正确的:

我首先会说任务管理器不是衡量 SQL Server 内存消耗的正确位置,当 SQL Server 服务帐户具有Locked Pages in Memory(LPIM) 特权时,它不会告诉您正确的值。这是因为通常任务管理器会跟踪可分页并通过 VirtualAlloc() 函数分配的进程私有字节内存,但 LPIM 内存分配块由不可分页的 AWE API 完成,因此任务管理器不会跟踪它,这可能导致不正确价值。对于您正在查看的百分比内容,实际上Percentage of Process Private bytes并不是完整的内存,并且它不提供任何相关信息,因此请停止查看它。

SQL Server 使用分配给它的内存是很正常的,要知道 SQL Server 使用了多少物理内存,请使用查询

select * from sys.dm_os_process_memory

PS:始终建议将其他应用程序移动到不同的机器上(如果可能)并让 SQL Server 仅在自己的系统上运行,这将有助于 SQL Server 运行得更快更好


小智 1

不,这是正常的。您的数据库服务器上安装了太多应用程序。开始将数据库(SQL Server 数据库引擎)迁移到其自己的服务器,或开始卸载数据库服务器中的所有其他应用程序。

目前您的服务器已安装以下内容:IIS, RS, AS, IS, mongodb。更不用说您是否安装了监控工具或防病毒软件。当您登录服务器时,您也会使用内存。过滤器驱动程序也使用内存。

查看Jonathan的这篇博文。假设您有一个准系统数据库服务器(没有安装其他争夺内存的应用程序),您的 SQL Server 至少可以有 27GB 的内存。