我有 cca 25 个数据库,需要将其合并为 1 个数据库。首先,我尝试构建一个 ssis 包,它将每个表中的所有数据复制到一个地方,但随后出现错误:
信息:缓冲区管理器的内存分配调用失败 10485760 字节,但无法交换任何缓冲区来缓解 内存压力。考虑了 1892 个缓冲区,并锁定了 1892 个缓冲区。 要么没有足够的内存可用于管道,因为没有 安装的足够多,其他进程正在使用它,或者太多 缓冲区已锁定。
然后我意识到这不是一个好主意,我只需要插入新记录并更新现有记录。之后我尝试了这个选项:
这是数据流任务的样子
在某些情况下,数据流处理的行数超过百万行。但是,我仍然遇到同样的错误 - 内存不足。
任务管理器中的情况如下:
我必须注意,在同一台服务器上有 28 个数据库被复制,当这个包没有运行时,sql server 仍然使用超过 1GB 的内存。我读到这是正常的,但现在我不太确定......
我已经安装了在本文中找到的 SQL Server 修补程序:http://support.microsoft.com/kb/977190 但这没有帮助... 我是否做错了什么,或者这就是事情的工作方式,我应该找到一个解决方案?
谢谢,
岛
如果您的查找转换设置为完整缓存,您可能会遇到内存问题。据我所知,如果行数超过 1000 万,合并联接的性能优于查找转换。
请看以下内容,我解释了合并连接和查找转换之间的差异。
我找到了一个解决方案,问题出在 SQL Server 中——它消耗了太多内存。默认情况下,最大服务器内存设置为 2147483647(这是默认值)。由于我的服务器有 4 GB RAM,因此我将此数字限制为 1100 mb。从那时起,没有出现内存问题,但我的流程任务仍然非常慢。问题出在使用 Lookup 时。默认情况下,查找从查找表中选择所有内容 - 我更改了这一点并仅选择了查找所需的列 - 它多次加快了过程。
现在整个整合过程大约需要1:15h。
当我再次合并到自己的源表中时,我遇到了这个错误。这是不需要的,因为分组和计数必须只是一个数据流。将其缩小到这一数据流后,它不再崩溃。由此可见,合并是瓶颈。仅从缓冲区错误来看,无法看出这一点:
信息:缓冲区管理器对 10482984 字节的内存分配调用失败,但无法换出任何缓冲区以缓解内存压力。考虑了 2 个缓冲区,其中 0 个被锁定。管道可用的内存不足,因为安装的内存不足,其他进程正在使用它,或者锁定了太多缓冲区。
你不知道缓冲区错误从何而来。