资源池“default”中没有足够的系统内存来运行此查询。 在sql上

我有一个运行服务,每分钟可以获得50-100个查询。 这些都不是高成本的查询。 此服务已运行约3-4个月,没有任何错误。

突然几天前,它开始提供“资源池中没有足够的系统内存’默认’来运行此查询。” 偶尔会出错。 当我调查问题时,我看到sqlservr.exe正在使用~1.5 gb ram和%25的CPU(全部为1 / 4CPU)。 当我重新启动sqlservr.exe ,ram从~50mb开始并慢慢增加直到它变为~1.5gb然后导致使用它的应用程序崩溃。

在我进行了一些研究后,我发现它是由我使用的sql server版本引起的。 这是限制数字的快速版本。 所以我将我的sql server从‘2008r2 express’升级到‘2012 enterprise’ 。 当我启动服务时,我认为我的问题终于结束了,因为服务只使用了~60mb的内存,但不幸的是在一个小时内同样的问题开始发生,但这次我在windows任务管理器上看到的已用内存仍然是~60mb,没有超出任何限制。

我在Wcf服务中使用EntityFramework作为ORM。 SqlQueryNotification ,我有一些缓存操作的SqlQueryNotification (代理和东西)系统。

我错过了一些关键的配置点吗? 或者6GB的内存和我的4 CPU真的不够用吗? 但它不可能是因为同样的负载就像3个月一样,并且当时没有任何错误,并且代码也没有任何变化。

ram已分配

ram用法

SQL Server将根据需要从尽可能多的内存开始,然后慢慢增加,直到它使用在“服务器属性”中分配给它的所有内容:

在此处输入图像描述

在重新启动服务之前,它不会释放任何内存; 这是设计的。

通常建议为操作系统留出2 GB的GB,并且需要注意在与SQL相同的服务器上运行的任何其他处理。 通常建议在其自己的服务器上安装SQL Server,而不运行任何其他服务器。

也就是说,SQL Server的1.5 GB RAM并不是那么多。 如果您没有更多可用,可能是时候添加一些或升级服务器了。

另见: Technet , Brent Ozar