资源池"default"中的系统内存不足,无法运行此查询.在sql上

Tol*_*men 26 c# sql sql-server wcf

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

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

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

EntityFramework在wcf服务中用作ORM.与此同时,我有 SqlQueryNotification(经纪人和东西)系统进行一些缓存操作.

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

ram已分配

ram用法

Dav*_*ugg 20

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

在此输入图像描述

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

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

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

另见: Technet,Brent Ozar

  • 不不,事实并非如此。在这台机器上,我现在有 12GB 内存,并且有大量可用内存。我可以随时轻松增加记忆。有趣的是,现在 sqlervr.exe 使用的内存似乎从未超过 70MB。 (2认同)
  • 让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/59200/discussion-between-dave-gugg-and-tolga-evcimen)。 (2认同)

Bag*_*aga 7

在我们的例子中,这是因为内存优化表类型具有大量数据。同时多次调用不同的存储过程,每次调用都使用相同的表类型并在其中加载大量记录(> 100,000)。对于我们的应用程序,有一种方法可以减少插入到内存优化表类型中的记录数量,即,如果将所有选定的项目存储在内存优化表类型中,我们有条件地仅存储未选定的记录。

CREATE TYPE [TestType] AS TABLE (
    [TestOrder]    VARCHAR (1500)    NOT NULL,
    [TestDepartment] UNIQUEIDENTIFIER NULL,
    [TestCourse] UNIQUEIDENTIFIER NULL,
    [TestStudent] UNIQUEIDENTIFIER NULL,
    INDEX IX_Test NONCLUSTERED (TestOrder))
    WITH (MEMORY_OPTIMIZED = ON);
Run Code Online (Sandbox Code Playgroud)


小智 6

我发布此答案是因为有人可能会发现它很有用。

max server memory甚至可以使用此查询进行设置:

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 32768;   -- for 32 GB
GO  
RECONFIGURE;  
GO
Run Code Online (Sandbox Code Playgroud)

您也可以使用此查询释放内存,而无需重新启动服务,只需将其设置为 2 GB (2048) 并再次更改回 32 GB (32768) 或您想要的值。

请不要将其设置为低于 1 GB,因为它会导致执行查询时出错,因此您需要重新启动服务才能执行查询,即使是此查询也会再次增加内存。