1

我需要在 SQL Server 2008 R2 Express 上运行一个“大”脚本,但它失败了

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

该脚本保存到磁盘大约 10MB,包含大约 54000 个顶级语句(插入/删除/更新)并声明了大约 5000 个变量(类型BIGINT)。

我正在运行 SQL Server 2008 R2 Express 64 位 10.5.1746。有 3GB 分配给 VM,1GB 分配给 SQL Server,每个查询至少 512kb 内存。的结果DBCC MEMORYSTATUS可以在这个链接上找到。

该脚本仅仅是一个(轻量级)生产数据库的恢复,它被导出为 SQL 语句(仅数据,无模式)。

如果无法做到这一点,我对 SQL Server 无法处理这样一个基本场景感到震惊。我已经在 Firebird 和 Sqlite 上测试了这个等效的场景,它工作得很好!(它们是开源产品)。

注意:由于开头声明的变量在脚本末尾引用,因此无法分解脚本。

注意:在急于将其标记为“重复”之前,请注意其他类似线程并未解决特定问题“如何在 sql server 2008 中运行非常大的脚本”。

4

2 回答 2

0

SQL Server Express 可以使用的内存量是有限的。该内存中只有一部分可用于执行查询。您可以尝试在数据库上设置强制参数化,因为它可能会减少计划所需的内存,从而为查询执行留下更多内存(取决于您的特定查询)。

最好的选择是使用支持更多内存的 SQL Server 版本。开发人员版价格实惠,但不能用于生产用途。标准版将是您的下一个最佳选择。

于 2013-05-15T04:09:05.877 回答
0

到目前为止,唯一有效的是升级到 SQL Server 2012 Express。查询需要几分钟才能执行,但执行完全且没有错误。

于 2013-05-15T12:28:41.413 回答