【问题标题】:SSIS DataFlowTask DefaultBufferSize and DefaultBufferMaxRowsSSIS DataFlowTask DefaultBufferSize 和 DefaultBufferMaxRows
【发布时间】:2013-02-28 05:18:49
【问题描述】:

我有一个任务,它使用数据流任务将记录从 Oracle db 拉到我们的 SQL 中。这个包每天运行大约 45 分钟。这个包将刷新大约 15 个表。除了一个,其他都是增量更新。所以几乎每个任务都运行 2 到 10 分钟。

完全替换运行长达 25 分钟的一个包。我想调整这个数据流任务以更快地运行。

表中只有 400k 行。我确实阅读了一些关于 DefaultBufferSize 和 DefaultBufferMaxRows 的文章。我有以下疑问。

  1. 如果我可以将 DefaultBufferSize 设置为 100 MB,有没有地方可以查看或分析我可以提供多少。

  2. DefaultBufferMaxRows 设置为 10k。即使我给了 50k 并且我为 DefaultBufferSize 提供了 10 MB,如果它只能容纳大约 20k,那么 SSIS 会做什么。只是忽略那些 30k 记录,否则它仍然会拉所有那些 50k rocords(Spooling)?

  3. 我可以使用日志记录选项设置适当的限制吗?

【问题讨论】:

  • 感谢您的回复。我同意这种方法将来肯定会对我有所帮助。但是那篇文章没有回答我的问题。如果您对 DefaultBufferSize 和 DefaultBufferMaxRows 有所了解,请回复。
  • 这里的大多数读者都不知道 Lakh 是什么。 (如果我没记错的话是 100,000)。
  • 仅供参考,根据我的经验,DefaultBufferSize = 10000 通常对于网络传输来说太,而不是太低。尝试将其设置为 100。
  • 嗨 Young- 是的,你是对的。每个缓冲区中仅传输 2.5k 条记录。因此,在我看来,除非我们提供的行数非常少,否则我们提供多少 DefaultBufferMaxRows 并不重要。

标签: sql sql-server-2008 ssis bids dataflowtask


【解决方案1】:

作为一般做法(如果您有足够的内存),较少数量的大缓冲区比大量的小缓冲区要好,但直到您有分页到磁盘的点(这很糟糕,原因很明显)

要对其进行测试,您可以记录事件 BufferSizeTuning,它会显示每个缓冲区中有多少行。

此外,在您开始调整缓冲区大小之前,您可以做出的最重要的改进是通过删除不需要的列和适当地配置数据类型来减小每行数据的大小。

【讨论】:

  • 嗨 Diego- 当我看到包执行时,我可以看到每批中传输了大约 2.5k 记录(我们可以观察行增量值)。服务器的 C 盘有 3GB 可用空间,D 盘有 28GB 可用空间。请给我建议?是的,我只在 DFT 中使用了必需的列。
  • 这也是目前唯一运行的包或作业。
  • 谁能回答这个问题?
  • 驱动器上的可用空间不应影响此设置,您使用的是内存,而不是物理驱动器上的空间。
  • 我的直接问题是,如果我将 DefaultBufferSize 设置为 50 MB 并想象它内存不足。那么会发生什么呢?包会失败吗?或者它会给出任何警告?有什么办法可以查看超出的内存大小?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多