每2到3个月一次,客户端向我们发送一个巨大的SQL脚本,用更新来更新他们的Web数据库。 由于内存不足,当您尝试通过SQL Server Management Studio运行脚本时,该脚本失败。
我们使用SQL Query Analyzer / Mgmt studio来运行查询。
错误消息:服务器:消息701,级别
17,状态1,行64302
没有足够的系统内存来运行此查询
在SQL 2000和SQL 2005中都是同样的问题。
该脚本包含一系列针对多个表的DELETE和INSERT语句。
该文件可以大到57973 KB。
数据库中有超过12000个对象,更不用说查找表和连接表了。 媒体表有65720条logging,另一个表有97799条logging。
我们没有办法改变我们从客户端收到的SQL输出。
除了(a)增加可用内存或(b)缩小查询大小之外,还有很多事情要做。 如果这一切都发生在一个巨大的事务中,那么你真的可能会面临一个痛苦的世界,尤其是如果数据集被改变的很大(很多列,BLOB等等)。
这听起来像是你需要和你的客户坐下来讨论替代scheme,以减less你正在加载的变更集 – 也许是每月/每周/每天更新,而不是每2-3个月?
这是服务器端内存不足。 鉴于错误提到Line 64302我猜测该脚本是一个单一的批次(没有GO分隔符)。 这可以解释这个问题。 将接收到的脚本分成几个批次应该是相当简单的,只要在适当的地方插入GO即可。
您是否尝试过通过OSQL命令执行脚本。 这应该消除使用SSMS的大部分开销。 如果这是数据库问题,或者SSMS处理查询的方式存在问题,那至less应该是隔离的。
只是一个想法。