在调试循环数千个文件的 SSIS 包时,执行挂起,没有错误,也没有失败的任务。稍微简化一下,该软件包执行以下操作:
For Each File (a directory full of pdf files, each ranging from 800 -
2000 pages and 3 - 8MB filesize)
* Script Task (get file information)
* File System Task (clear out temp folder)
* Execute Process Task (use pdftk to break file into individual pages)
* For Each File (each page in temp folder, 40 - 100KB each)
* Script Task (parse pdf file)
* Execute Process Task (pdftk to concatenate like pages)
* Execute SQL Task (insert one row into staging table using OPENROWSET)
* File System Task (delete inserted file)
* Script Task (set variables for next iteration)
* Execute SQL Task (execute proc to merge staging into prod)
* File System Task (rename completed file)
当我执行包时(BIDS 中的调试模式),它按预期运行通过第一个文件并进入第二个文件,但最终在内循环的迭代之间挂起。当它挂起时,所有任务都是绿色的,两个循环容器是黄色的。输出窗口确实会生成任何消息,并且通过进程选项卡,每个任务都有匹配数量的启动和停止,除了两个循环和包本身。
我的第一个想法是我超出了 For Each File 枚举器的迭代限制,但我找不到任何关于这种限制的文档。我还可以检查什么来确定 SSIS 停止运行的原因?
这似乎是 Visual Studio / BIDS 客户端达到内存边界的问题,而不是 SSIS 本身的问题。当包在 BIDS 中以调试模式运行时,
devenv.exe
可以观察到该进程不断占用额外的内存。虽然挂起之前处理的文件数量不一致,但在 Visual Studio 引发内存不足异常之前,该包有一次确实处理了近 9000 个文件。使用或通过 SQL 代理运行包
dtexec
似乎可以解决问题。