我们的一个SQL服务器,运行稳定一段时间(几年),最近一直在抛出不足的内存错误。 从应用程序事件日志中,我们看到:
事件ID:701
说明:没有足够的系统内存来运行此查询。
我们pipe理这个服务器的团队主要由开发人员组成,这些开发人员在系统pipe理职责上倍增。 但是,我们的主要专长是发展。 这就是说,我们对如何解决这个问题感到茫然。 我们一直在search论坛,什么也没有find任何匹配的东西
所以,这里有一些更多的细节来帮助解决问题:
编辑:
我们在SP3上。 我们发现的大部分post都是SP1以前的版本,不适用于我们。
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
回报
9.00.4035.00 SP3标准版
我会build议使用-g启动参数。 它似乎适用于大多数人,也可能会为你工作。 我唯一担心的是,潜在的问题可能无法解决。 例如,如果由于链接的服务器而导致内存泄漏,并且MTL增加到512Mb,那么这只是内存问题之间的较长时期? 我不知道答案是什么,但我倾向于同意UndertheFold,因为一个perfmon可能是一个好的开始。
错误消息“没有足够的系统内存来运行此查询。” 指虚拟地址空间(VAS)不可用,而不是传统意义上的内存,即在SQL Server进程空间内。
假设你只在这个服务器上运行3GB,并且SQL Server已经被分配到了2GB,这意味着操作系统,更重要的是,其他任何东西都不到1GB。 这不是一个很大的记忆。
如果这个问题确实是内存泄漏的结果,那么它就是正在使用的SQL Server进程空间(memToLeave)之外的VAS。
我会build议使用-g启动参数将更多的内存分配给memToLeave部分。
请参阅以下文章以获取更多信息:
http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/
您也可能希望减lessSQL Server的最大内存设置,但我会做这最后的手段。
这可能与链接服务器驱动程序的内存泄漏有关, 根据此论坛主题 :
以下是微软告诉我们的。
显然,使用链接的服务器处理数据,特别是狐狸pro驱动程序导致随着时间的推移内存泄漏。
此服务器作为应用程序服务器(几个Windows服务)和Web服务器以及数据库服务器组成三元组。
我会设置你的最小内存 – 这些其他进程很可能是从SQL中“窃取”内存
你可以使用perfmon来运行一个计数器logging来确认这个和/或给自己更多的信息来确定真正的问题是什么。
从这个博客引用!
解决这个问题有不同的select。
首先,检查你的SQL Server设置“最servlets器内存”和“最大服务器内存”。 如果发现这两个值的差别非常小,则增加“最大服务器内存”。
其次,用它的内存使用信息发现长时间运行的查询,如果这个查询处于空闲状态,请validation并终止这个过程。 数据库性能优化对于内存使用来说是一件重要的事情。
第三,发现长时间运行的查询的索引用法,因为没有适当的索引你的系统磁盘I / O增加,直接影响你的记忆。
四,检查虚拟内存页面文件的大小,增加这个文件的大小。
第五,检查“每查询最小内存”的大小实际上它是默认的1024 KB,但在极less数情况下,可以减小此参数的大小。 事实上,这是不可取的,但你可以尝试。
第六,尝试执行这个DBCC命令,这是不可取的,因为它可能会影响服务器的整体性能。 但是你可以试试这个。