Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 资源池中的系统内存不足';默认值';以运行此查询。关于sql_C#_Sql_Sql Server_Wcf - Fatal编程技术网

C# 资源池中的系统内存不足';默认值';以运行此查询。关于sql

C# 资源池中的系统内存不足';默认值';以运行此查询。关于sql,c#,sql,sql-server,wcf,C#,Sql,Sql Server,Wcf,我有一个正在运行的服务,每分钟可以收到50-100个查询。而且这些都不是高成本的查询。这项服务已经运行了大约3-4个月,没有任何错误 几天前,它突然给出“资源池'default'中的系统内存不足,无法运行此查询。”偶尔出错。当我调查这个问题时,我看到sqlservr.exe使用了~1.5GB的ram和%25的CPU(全部为1/4CPU)。当我重新启动sqlservr.exe时,ram从~50mb开始缓慢增加,直到~1.5gb,然后导致使用它的应用程序崩溃 在我做了一点研究之后,我发现这是由我使用

我有一个正在运行的服务,每分钟可以收到50-100个查询。而且这些都不是高成本的查询。这项服务已经运行了大约3-4个月,没有任何错误

几天前,它突然给出“资源池'default'中的系统内存不足,无法运行此查询。”偶尔出错。当我调查这个问题时,我看到
sqlservr.exe
使用了~1.5GB的ram和%25的CPU(全部为1/4CPU)。当我重新启动
sqlservr.exe
时,ram从~50mb开始缓慢增加,直到~1.5gb,然后导致使用它的应用程序崩溃

在我做了一点研究之后,我发现这是由我使用的sql server版本引起的。这是一个特快版,限制了这些数字。因此,我已将sql server从“2008r2 express”升级为“2012企业版”。当我启动该服务时,我认为我的问题终于解决了,因为该服务只使用了~60mb的内存,但不幸的是,一小时后,同样的问题开始出现,但这次我在windows任务管理器上看到的已用内存仍然是~60mb,没有超过任何限制

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

我是否缺少一些关键的配置点?或者6GB的内存和我的4个CPU真的不够用?但不可能是这样的,因为3个月来相同的负载是这样的,当时没有任何错误,代码也没有任何变化


SQL Server将以所需的内存开始,然后缓慢增加,直到使用服务器属性中分配给它的所有内存:

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

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

也就是说,SQL Server的1.5 GB内存并没有那么多。如果没有更多可用资源,则可能需要添加一些或升级服务器

另见:

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

即使使用此查询,您也可以设置
max server memory

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 32768;   -- for 32 GB
GO  
RECONFIGURE;  
GO
您还可以使用此查询释放内存,而无需重新启动服务,只需设置为2 GB(2048),然后再次更改回32 GB(32768)或您想要的值即可


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

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

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);

在我的例子中,这只在特定的查询中失败。因此,我将“每个查询的最大查询数”更改为2048,它开始工作。

您只是从Express升级到Enterprise?免费的?我在哪里可以得到这个惊人的交易?!显示你们的代码,你们一定是因为并没有清理连接而耗尽了服务器上的资源???若你们有一家公司,微软提供了bizspark程序。我建议您检查一下。SQL Server的MaxMemory设置为什么?这是32位还是64位?每次连接db时,我都使用
语句。因此,我确信我不会让任何连接保持开放状态。我的系统是64位的。6144mb是最大的服务器内存,是我从服务器属性设置的。在这台机器上,我现在有12gb的ram,我有很多可用内存。我可以随时轻松增加记忆。有趣的是,现在sqlervr.exe似乎从未使用过超过70MB的内存。但它仍然会在大约1小时内因内存异常而崩溃。@TolgaEvcimen这台服务器上还运行其他程序吗?resmon.exe说您正在使用多少物理内存?@TolgaEvcimen sys.dm_os_sys_info和sys.\u dm_os_performance_计数器表示sql正在使用多少内存以及有多少可用内存?让我们来看看。我从SP向表类型插入了大量数据(大约100万),然后导致了这个问题。您能告诉我您是如何跳过插入数据的吗?请小心使用此命令,您可能仍然需要重新启动服务,尽管作者声称,这只是在一个生产系统上发生的。