SSIS - 再次出现内存不足错误

时间:2011-09-12 19:38:44

标签: sql-server ssis out-of-memory

我有cca 25个数据库,我需要整合到1个数据库中。首先,我尝试构建一个ssis包,将每个表中的所有数据复制到一个地方,但后来我收到错误:

  

信息:缓冲区管理器未通过内存分配调用   10485760字节,但无法换出任何缓冲区来缓解   记忆压力。考虑了1892个缓冲区,1892个被锁定。   管道可用的内存不足,因为没有   已安装足够的,其他进程正在使用它,或者太多   缓冲区被锁定。

然后我意识到这不是一个好主意,我需要只插入新记录并更新现有记录。之后我尝试了这个选项:

  • 获取所有conn的列表。字符串
  • foreach db,复制新记录并更新现有记录(需要更新从源到临时表的副本,从目标中删除它们并从临时表复制到目标表)

enter image description here

以下是数据流任务的外观

enter image description here

在某些情况下,数据流量会超过百万行。但是,我仍然得到同样的错误 - 内存不足。

在任务管理器中,情况如下:

enter image description here enter image description here

我必须注意,在同一台服务器上有28个数据库被复制,当这个软件包没有运行时,sql server仍然使用超过1GB的内存。我读过这是正常的,但现在我不确定......

我在本文中找到了SQL Server的修补程序:http://support.microsoft.com/kb/977190 但它没有帮助...... 我做错了什么,或者这只是工作方式,我想找到一个解决方案?

谢谢,
ILE

2 个答案:

答案 0 :(得分:3)

如果将查找转换设置为完全缓存,则可能会遇到内存问题。根据我的看法,如果行数超过1000万,则Merge Join的性能优于Lookup转换。

请看下面的内容,我已经解释了Merge Join和Lookup转换之间的区别。

What are the differences between Merge Join and Lookup transformations in SSIS?

答案 1 :(得分:2)

我找到了一个解决方案,问题出在SQL Server中 - 它消耗了太多内存。默认情况下,最大服务器内存设置为2147483647(这是默认值)。由于我的服务器有4GB RAM,我把这个数字限制在1100mb。从那时起,没有内存问题,但我的流程任务仍然很慢。问题在于使用Lookup。默认情况下,Lookup从Lookup表中选择所有内容 - 我更改了它并仅选择了我需要查找的列 - 它将进程多次固定。

现在整个整合过程大约需要1:15h。