我有cca 25个数据库,我需要整合到1个数据库中。首先,我尝试构建一个ssis包,将每个表中的所有数据复制到一个地方,但后来我收到错误:
信息:缓冲区管理器未通过内存分配调用 10485760字节,但无法换出任何缓冲区来缓解 记忆压力。考虑了1892个缓冲区,1892个被锁定。 管道可用的内存不足,因为没有 已安装足够的,其他进程正在使用它,或者太多 缓冲区被锁定。
然后我意识到这不是一个好主意,我需要只插入新记录并更新现有记录。之后我尝试了这个选项:
以下是数据流任务的外观
在某些情况下,数据流量会超过百万行。但是,我仍然得到同样的错误 - 内存不足。
在任务管理器中,情况如下:
我必须注意,在同一台服务器上有28个数据库被复制,当这个软件包没有运行时,sql server仍然使用超过1GB的内存。我读过这是正常的,但现在我不确定......
我在本文中找到了SQL Server的修补程序:http://support.microsoft.com/kb/977190 但它没有帮助...... 我做错了什么,或者这只是工作方式,我想找到一个解决方案?
谢谢,
ILE
答案 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。