长 SQL 文件运行 SQL Server 内存不足(22,000 行)

Posted

技术标签:

【中文标题】长 SQL 文件运行 SQL Server 内存不足(22,000 行)【英文标题】:Long SQL file runs SQL Server out of memory (22,000 lines) 【发布时间】:2012-05-02 10:34:06 【问题描述】:

我有一个大约 22,000 行长的 .sql 文件。它是由其他东西生成的,但基本上每行只包含一个更新语句。

我在 SQL Server Management Studio 中运行文件时收到此错误。

资源池“内部”中的系统内存不足 运行此查询

我想我只需要拆分这个查询文件,但我不确定最好的方法。我可以将文件切成 2000 行块或我想的东西。

这似乎是一个简单的问题,我会经常这样做,我想提出一个好的解决方案。有什么想法吗?

【问题讨论】:

22000 更新听起来好像有些事情做得不对。有没有办法让这个更加基于集合的操作? 它是从一个非常专业的工具创建的 excel 电子表格创建的。电子表格有 X 行需要更新数据库中的相应行,但这是一个非常古老的工具,只能导出到 Excel。 你的生活糟透了。 :) Excel 是任何 DBA 的祸根。 增加SQL server的内存怎么样? 【参考方案1】:

您可能希望考虑通过SQLCMD 运行您的脚本,而不是通过 SSMS GUI 界面。

【讨论】:

【参考方案2】:

您可能遇到了批处理大小的限制,因此 SQL Server 在解析批处理时遇到了问题。如果您可以运行大约 5000 行块(突出显示,执行),那么这将证实我的理论。

一旦您知道正确的批次大小,您可以:

    在两者之间插入 GO 语句,以强制执行新批处理 拆分为多个文件

一点 shell 脚本就足够了。 split、head 和 tail 中的 UnxUtils 应该很有用。

【讨论】:

【参考方案3】:

我在 SQL Management Studio 上运行时遇到了同样的问题,我所做的是在命令行中执行它 osql –S localhost –d mydb –E –i .\hugescript.sql

http://tutewall.com/cannot-execute-script-insufficient-memory-error-sql-server/

【讨论】:

【参考方案4】:

我遇到了类似的问题,在blog 的命令提示符下运行以下命令救了我。

   sqlcmd -S YOURSQLSERVER\INSTANCENAME -i "C:\Your Script.sql"

【讨论】:

【参考方案5】:

您可以使用此解决方案为您的服务器分配更多内存:

    在对象资源管理器中,右键单击服务器并选择属性。 单击内存节点。 在服务器内存选项下,输入您想要的数量 最小服务器内存和最大服务器内存。

默认最大值是 2147483647 ,我把它改成 9147483647 我的问题就解决了。

【讨论】:

以上是关于长 SQL 文件运行 SQL Server 内存不足(22,000 行)的主要内容,如果未能解决你的问题,请参考以下文章

内存中的 SQL Server 2005“固定”数据

SQL Server 复制中的内存映射文件写入失败

sql server 在占用服务器内存居高不下怎么办

SQL Server 缓存清除与内存释放

SQL Server 缓存清除与内存释放

如何检查 SQL Server 数据库的恢复状态进度