大型脚本,许多插入和删除:系统内存不足以运行此查询

大型脚本,许多插入和删除:系统内存不足以运行此查询

每 2 到 3 个月,客户就会向我们发送一份巨大的 SQL 脚本,以更新其 Web 数据库。由于内存不足,当您尝试通过 SQL Server Management Studio 运行该脚本时,它会失败。

我们使用 SQL 查询分析器/Mgmt Studio 运行查询。

错误消息:服务器:消息 701,级别
17,状态 1,行 64302
系统内存不足,无法运行此查询

SQL 2000 和 SQL 2005 中都存在同样的问题。

该脚本包含一系列针对多个表的 DELETE 和 INSERT 语句。

该文件最大可达 57973 KB。
数据库中有超过 12000 个对象,更不用说查找表和连接表了。媒体表有 65720 条记录,另一个表有 97799 条记录。

我们无法改变从客户端收到的 SQL 导出。

答案1

除了 (a) 增加可用 RAM 或 (b) 缩小查询大小之外,这里确实没有太多可以做的事情。如果这一切都发生在一个大型事务中,那么你真的会陷入痛苦之中,尤其是当更改的数据集很大(许多列、BLOB 等)时。

这听起来像是您需要与客户坐下来讨论替代方案以减少您正在加载的变更集的情况 - 也许是每月/每周/每天更新而不是每 2-3 个月更新一次?

答案2

这是服务器端内存不足。鉴于错误提示,Line 64302我猜想该脚本是一个单批(没有 GO 分隔符)。这可以解释问题。将收到的脚本拆分成几个批应该相当简单,只需在GO适当的位置插入即可。

答案3

您是否尝试过通过 OSQL 命令执行脚本。这应该可以消除使用 SSMS 的大部分开销。这至少可以隔离是数据库问题还是 SSMS 处理查询的方式的问题。

只是一个想法。

相关内容