4

我有一个包,每个循环容器都有 1 个,其中包含一堆插入和选择。

循环迭代的列表大约是几百万复杂行左右..

包位于Integration Services 目录中,只需在 SSMS 中执行即可运行(无代理作业)。

当我查看资源监视器时,ISServerExec.exe(与 dtsexec.exe 相当)的内存每秒都在增长(每个循环大约需要 1 秒才能完成)。

一段时间后,Windows 服务器中的所有内存都被使用,服务器最终分页到磁盘。然后循环查询的等待时间变得很长,每个查询需要 20 到 30 秒。

我做错了什么?

4

1 回答 1

0

我会将列表写入 SQL 表,然后使用包裹在 For Each 容器周围的 For Loop 容器进行循环。

在 For Loop 容器开始时,我会使用 SELECT TOP 1 从列表中读取一条记录,并将其传递到 Recordset 变量中。该变量的范围应移至 For 循环容器。

在 For 循环容器的末尾,我将更新一个标志和/或一个日期时间列,以指示该行已被处理并且不应包含在初始 SELECT 的下一次迭代中。

一路上,您可以更新列表以指示每行的进度/状态。

这种设计对于记录和重启需求也很有用。

于 2014-09-30T04:39:18.880 回答