我正在尝试执行一个包含大约1000000个简单UPDATE
查询的大型sql脚本。
此脚本文件的总大小约为100 MB。
当我运行这个脚本时,我遇到了Out of Memory异常。
当我将文件拆分为10 MB的块时,我可以运行它们。
但是,为了方便起见,我想只有一个我可以同时运行的脚本。我可以引入任何语句,以便SQL Server在运行每个查询后释放分配的内存,这样我就可以立即执行这个大型脚本吗?
答案 0 :(得分:7)
如果您还没有这样做,请在每千个语句中插入GO
左右。否则整个文件将是一个大批量。 SQL Server为批处理计算单个执行计划,这可能会将您推向资源限制。
如果在同一事务中运行整个文件,则可能会遇到另一种类型的资源问题。事务越大,TX日志文件完成文件处理所需的磁盘空间就越多。
答案 1 :(得分:3)
<强>更新:强> 打开窗口命令提示符(运行+ cmd)并运行以下命令:
sqlcmd -S YOURSQLSERVER\INSTANCENAME -i c:\your_script_file.sql -o c:\your_log_file.log
答案 2 :(得分:1)
我注意到SSMS 2012中的内存泄漏似乎与结果窗口有关。尝试将set nocount on
放在脚本的顶部,以防止结果窗格被“1行受影响”消息填满。或者,有没有办法将更新语句编写为一个语句,这样您就不会在服务器和客户端之间来回执行常量?