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

问题描述 投票:0回答:6

我有一个

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

在 SQL Server Management Studio 中运行该文件时出现此错误。

资源池“内部”中没有足够的系统内存来 运行此查询

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

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

sql sql-server-2008 memory out-of-memory
6个回答
5
投票

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


5
投票

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

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

3
投票

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

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

  1. 在中间插入 GO 语句,以强制执行新批次
  2. 拆分为多个文件

一点 shell 脚本就足够了。 splitheadtailUnxUtils 应该很有用。


3
投票

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

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


0
投票

就我而言,这里的答案都不起作用。我的脚本有 700,000 个插入长,重量为 1GB~.

我必须结合以下解决方案:

  1. 使用SQL Server Management Studio的SQLCMD模式
1) From SSMS, open a new query 
2) From the toolbar, open "Query"
3) Selected "SQLCMD Mode"
  1. 将文本大小设置为最大 (
    SET TEXT
    )
  2. 将脚本分成 150,000 个插入块(每个块约 250MB)
  3. 从 SQMCMD 模式单独运行每个脚本
:r "c:\path\to\my\chunk_1.sql"
:r "c:\path\to\my\chunk_2.sql"
:r "c:\path\to\my\chunk_3.sql"
:r "c:\path\to\my\chunk_4.sql"

注意:我无法直接使用

SQLCMD
,因为我无法在那里
SET TEXT


-1
投票

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

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

默认的最大值是2147483647,我将其更改为9147483647,我的问题就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.