SQL Server 2005:系统内存不足,无法运行此查询

Aar*_*els 13 memory sql-server

我们的其中一台 SQL Server 已经稳定运行了一段时间(几年),但最近出现了内存不足错误。从应用程序事件日志中,我们看到:

事件 ID:701

说明:系统内存不足,无法运行此查询。

我们管理此服务器的团队主要由兼任系统管理员职责的开发人员组成。然而,我们的主要专长是开发。话虽如此,我们对如何解决这个问题一无所知。我们一直在搜索论坛之类的东西,但没有找到任何匹配的内容

所以,这里有一些更多的细节来帮助排除故障:

  • 我们的最小服务器内存设置为 0。
  • 我们的最大服务器内存设置为 2000。
  • 总物理内存为 3,325.85 MB(来自 sysinfo)。
  • 总虚拟内存为 7.10 GB(来自 sysinfo)。
  • 我们没有使用 AWE 来分配内存,但我们现在要看看它是否有所作为。
  • 此错误是由备份事务日志而不是运行查询的作业引发的。
  • 我们有许多链接服务器。另一方面,RDBMS 的类型是 SQL Server(2005 和 2000)、Oracle 10g 和 OSI PI 系统。
  • 在这一点上是间歇性的。我们似乎无法将任何时间或事件与错误相关联。
  • 当然,重新启动似乎使它消失了一段时间,由于错误消息的性质,这是有道理的。
  • 该服务器是应用程序服务器(几个 Windows 服务)和 Web 服务器以及数据库服务器的三倍。

编辑:

我们在 SP3 上。我们发现的大多数帖子都是 SP1 之前的,这不适用于我们。

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Run Code Online (Sandbox Code Playgroud)

返回

9.00.4035.00 SP3 标准版

Joh*_*som 7

错误消息“系统内存不足,无法运行此查询。” 指的是虚拟地址空间 (VAS) 不可用,而不是传统意义上的内存,即在 SQL Server 进程空间内。

鉴于您在此服务器上仅使用 3GB 运行,并且 SQL Server 已分配至 2GB,这意味着操作系统以及更重要的是盒子上的其他任何东西都少于 1GB。那不是很多记忆。

如果此问题确实是内存泄漏的结果,那么消耗的是 SQL Server 进程空间 (memToLeave) 之外的 VAS。

我建议使用 -g 启动参数为 memToLeave 部分分配更多内存。

有关更多信息,请参阅以下文章:

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

您可能还希望减少 SQL Server 的最大内存设置,但我会将其作为最后的手段。


小智 4

我建议也使用 -g 启动参数。它似乎对大多数人都有效,也可能对你也有效。我唯一担心的是根本问题可能无法得到解决。例如,如果由于链接服务器而出现内存泄漏,并且 MTL 增加到 512Mb,那么内存问题之间的时间间隔是否会更长?我不知道答案,但我倾向于同意 UndertheFold 的观点,因为 perfmon 可能是一个好的开始。