SQL Server 2005:没有足够的系统内存来运行此查询


13

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

事件ID:701

说明:没有足够的系统内存来运行此查询。

我们管理此服务器的团队主要由负责sysadmin职责的开发人员组成。但是,我们的主要专长是发展。话虽这么说,我们对如何解决此问题一无所知。我们一直在搜索论坛等信息,但没有找到任何符合条件的信息

因此,这里有一些更多详细信息可帮助您进行故障排除:

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

编辑:

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

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

退货

9.00.4035.00 SP3标准版


您是否可以查看SQL Server错误日志,因为可能有关于此错误的其他详细信息。
约翰·桑索姆

Answers:


4

我建议也使用-g启动参数。它似乎适用于大多数人,并且可能也适用于您。我唯一担心的是根本的问题可能无法解决。例如,如果由于链接服务器导致内存泄漏,并且MTL增加到512Mb,那么两次内存问题之间的间隔是否更长?我不知道答案如何,但是我倾向于UnderunderFold的观点是,perfmon可能是一个好的开始。


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的最大内存设置,但我会作为最后的选择。


好文章。也感谢您编写它!我们的SQL日志中确实有几个AppDomain正在卸载。我们只有2个CLR存储过程,它们基本上只是从Web服务获取数据或从Web服务获取数据。似乎很奇怪,这2个CLR存储过程开箱即用了太多的VAS。
亚伦·丹尼尔斯

别客气。您可能知道,memToLeave的默认分配仅为256MB。对于您的AppDomain,所有CLR /托管代码,链接服务器查询,SSIS等而言,这是一个很小的沙箱,尤其是在您利用服务器上所有可用内存的情况下。我建议使用-g启动参数将其加倍至512MB。
约翰·桑索姆

1

根据此论坛主题,这可能与链接服务器驱动程序的内存泄漏有关:

以下是Microsoft告诉我们的内容。

显然,使用链接服务器处理数据特别是fox pro驱动程序会导致内存泄漏,并随着时间的推移而累积。


0

该服务器的数量是应用程序服务器(几个Windows Services)和Web服务器以及数据库服务器的三倍。

我将设置您的最小内存-这些其他进程很可能从SQL“窃取”内存

您可以使用perfmon运行计数器日志以确认这一点和/或为自己提供更多信息以标识真正的问题是什么。


0

参考来自本博客!

有解决此问题的其他方法。

首先,检查SQL Server设置中的“最小服务器内存”和“最大服务器内存”。如果您发现两个值的差异很小,请增加“最大服务器内存”。

其次,找出长期运行的查询及其内存使用情况信息,如果该查询处于空闲状态,请验证并终止该过程。数据库性能优化是内存使用方面的主要任务。

第三,找出长时间运行的查询的索引用法,因为没有正确索引您的系统,DISK I / O会增加,并且会直接影响您的内存。

第四,检查虚拟内存页面文件的大小并增加此文件的大小。

第五,检查“每个查询的最小内存”的大小,默认情况下实际为1024 KB,但在极少数情况下,可以减小此参数的大小。实际上,这是不可取的,但是您可以尝试一下。

第六,尝试执行此DBCC命令,同样不建议这样做,因为它可能会影响服务器的整体性能。但是您可以尝试一下。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.