在单独的内存分配中运行SSIS包,还是增加默认缓冲区大小?

问题描述 投票:6回答:4

我有一个SSIS包,它的子包出现了故障。错误信息不是很有用。

试图向数据流任务缓冲区添加一行失败,错误代码为0xC0047020。

问题似乎是我正在耗尽虚拟内存来完成工作。

我找到了一个论坛的帖子,也许能帮助解决这个问题。 http:/social.msdn.microsoft.comforumsen-USsqlintegrationservicesthreadd6d52157-0270-4200-a8c2-585fa9a0eed5。

从提供的解决方案来看,我虽然不确定如何。

  1. 增加默认的缓冲区大小
  2. 将一个子pacakage分配到它自己的内存分配中。

我每天都在SQL Server 2005中运行这个包。 在12日之前,我每天都在正常运行。 我假设我们用来导入数据到数据库的dat文件增长到数据库无法处理的大小。 不过这只是一个8.90MB的csv文件。 导入的时候是直接列对列导入。

问题子包是第1步,失败后继续,成功完成后面8步。

sql-server sql-server-2005 ssis
4个回答
4
投票

SQL Server分配了多少内存?在SQL Server进程空间之外分配了多少内存?

我问这个问题的原因是由于SSIS内存是从位于SQL Server进程空间之外的memToLeave内存区域分配的。

请看 此处 以获取关于配置内存的 memToLeave 部分的可用内存量的详细信息。

关于 SSIS 的通用性能调整,请参考以下文章。

http:/technet.microsoft.comen-gblibrarycc966529.aspx。

我希望这是有意义的,但一旦你消化了这些材料,请随时给我写信。

干杯。


1
投票

随机想到:内存泄漏?

我们的prod集群(big corporatebbuild)是SQL 2005 SP1。内存泄漏,每隔1-4周需要重启一次。

SP2+HF 3068:修复


1
投票

要改变缓冲区大小,选择数据流任务并改变DefaultBufferMaxRows、MaxBufferSize属性。它们共同决定了缓冲区的大小。

请注意,在你所链接的讨论中,用户最初增加了缓冲区大小(到100Mb),这可能是导致问题的原因,建议是 减少 它的默认缓冲区大小(10Mb)通常应该是OK的。默认的缓冲区大小(10Mb)通常应该是确定的。

要在单独的进程中运行子包,设置Execute包任务的ExecuteOutOfProcess属性(在主包中)。

但首先:确保你真的是在虚拟内存中运行,而不是真正的内存,后者通常更有可能。在任务管理器中查看这台机器上消耗内存的进程。

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