【问题标题】:There is insufficient system memory in resource pool 'default' to run this query资源池“默认”中的系统内存不足,无法运行此查询
【发布时间】:2010-01-03 18:01:59
【问题描述】:

我收到此错误:

资源池“默认”中的系统内存不足,无法运行此查询。

我正在运行 100,000 个简单的插入语句,如下所示。我在第 85,000 次插入时遇到了错误。

这是我正在学习的课程的演示......

use sampleautogrow

INSERT INTO SampleData VALUES ('fazgypvlhl2svnh1t5di','8l8hzn95y5v20nlmoyzpq17v68chfjh9tbj496t4',1)
INSERT INTO SampleData VALUES ('31t7phmjs7rcwi7d3ctg','852wm0l8zvd7k5vuemo16e67ydk9cq6rzp0f0sbs',2)
INSERT INTO SampleData VALUES ('w3dtv4wsm3ho9l3073o1','udn28w25dogxb9ttwyqeieuz6almxg53a1ki72dq',1)
INSERT INTO SampleData VALUES ('23u5uod07zilskyuhd7d','dopw0c76z7h1mu4p1hrfe8d7ei1z2rpwsffvk3pi',3)

提前致谢, 吉姆·M

更新:刚刚注意到一些非常有趣的事情。我创建了另一个数据库,忘记创建 SampleData 表。我运行查询以添加 100,000 行,它甚至在抱怨表不存在之前就出现了内存不足错误。因此,我猜它只是试图“读入”我的 100,000 行内存不足?

【问题讨论】:

    标签: sql-server memory


    【解决方案1】:

    您在一个批处理请求中有 100.000 个插入语句?您的服务器需要更多 RAM 来解析请求。购买更多 RAM、升级到 x64 或减少发送到服务器的单个批次的大小。 IE。在 .sql 文件中时不时地撒上GO

    【讨论】:

    • 如果1000次插入没有问题,为什么100,000次会出现问题?跟交易有关系吗?为什么添加“GO”语句会有帮助?
    • 当您在一批中发送 100k INSERT 语句时,服务器最初会看到大约 1 百万。 '东西'的字符。它不知道里面是什么,可能都是点和空格。它必须首先被解析,并且 T-SQL 是分批解析的,而不是成行解析的(不像 Basic 那样)。该解析会消耗内存,这就是您看到的错误。当您尝试使用不存在的表时,服务器甚至没有到达检查表是否存在的地步,因为这发生在编译时而不是解析时。它必须先解析整个批次,这是不行的。
    • 在我的情况下,它是一个 1 批次,在事务中插入了数千个,因此不能使用 GO 语句并且添加更多 RAM 不是解决方案。
    • 每 10000 次插入 GO 为我解决了这个问题(我的 SQL Server 进程分配了 1GB 的 RAM)
    【解决方案2】:

    您可以尝试使用 SQLServer 连接工具应用程序。它有一个名为 Massive Sql Runner 的功能,可以一个一个地执行每个命令。有了这个功能,执行脚本命令将使用很少的内存,您将不再有问题。

    SQL Server Connection Tools

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2016-12-31
      相关资源
      最近更新 更多