【问题标题】:Execute SQL Task - Any limit on the size of result set?执行 SQL 任务 - 结果集的大小有任何限制吗?
【发布时间】:2013-11-01 21:05:52
【问题描述】:

执行 SQL 任务的结果集大小是否有限制。如果是,那么如何处理结果集的多余部分?

我为什么要问这个?我打算通过执行 SQL 任务(PREFERRED)将 4-5 GB 大小的记录集放入内存,用它来生成 sql 语句。然后这些 sql 语句将用于将数据加载到我的目标表中。

【问题讨论】:

  • 可用内存和磁盘空间是您唯一的限制。哦,还有时间。对于这种方法,这可能是您首先用完的那个。
  • @RBarryYoung - 我如何找到确切的内存和磁盘空间限制?如果需要,我该如何更改它们?
  • 这里没有任何确切的限制。只有可用性限制。就像任何流程一样,您仅限于可用的内容。

标签: sql-server sql-server-2008 sql-server-2005 ssis etl


【解决方案1】:

正如@RBarry Young 所说,您的执行 SQL 任务转储结果只会受到机器上/可用于 SSIS 的内存量的限制。

当您在数据流中用完内存时会发生什么情况,即 SSIS 将使用 BufferTempStoragePath 中指定的位置将数据写入磁盘并降低您的性能。 What is the actual use of buffer temp and blob temp in ssis

我在控制流中看不到模拟,这是有道理的,因为它通常不是代码的内存密集型部分。测试它并找出答案。如果你的内存用完了并且 SSIS 崩溃了,那么你可能需要将你的逻辑移动到一个脚本任务中,然后尝试有效地管理你的内存,而不是一次保存整个集合。

也就是说,我几乎认为您正在努力构建自己的插入语句。这类似于编写自己的数据流,但效率可能不如 SSIS。

【讨论】:

  • 感谢您的所有积分。我几乎 100% 确定我别无选择。我的 ETL 并不简单。源到目标的映射不是固定的,只能通过查询映射表来确定。还有其他复杂性。这就是为什么我必须主要使用脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多