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

问题描述 投票:0回答:3

我有 cca 25 个数据库,需要将其合并为 1 个数据库。首先,我尝试构建一个 ssis 包,它将每个表中的所有数据复制到一个地方,但随后出现错误:

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

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

  • 获取所有连接的列表。字符串
  • 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 但这没有帮助... 我是否做错了什么,或者这就是事情的工作方式,我应该找到一个解决方案?

谢谢,

sql-server ssis out-of-memory
3个回答
4
投票

如果您的查找转换设置为完整缓存,您可能会遇到内存问题。据我所知,如果行数超过 1000 万,合并联接的性能优于查找转换。

请看以下内容,我解释了合并连接和查找转换之间的差异。

SSIS 中的合并连接和查找转换有什么区别?


3
投票

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

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


0
投票

当我再次合并到自己的源表中时,我遇到了这个错误。这是不需要的,因为分组和计数必须只是一个数据流。将其缩小到这一数据流后,它不再崩溃。由此可见,合并是瓶颈。仅从缓冲区错误来看,无法看出这一点:

信息:缓冲区管理器对 10482984 字节的内存分配调用失败,但无法换出任何缓冲区以缓解内存压力。考虑了 2 个缓冲区,其中 0 个被锁定。管道可用的内存不足,因为安装的内存不足,其他进程正在使用它,或者锁定了太多缓冲区。

你不知道缓冲区错误从何而来。

© www.soinside.com 2019 - 2024. All rights reserved.