Ao depurar um pacote SSIS que percorre milhares de arquivos, a execução trava sem erros e sem falhas nas tarefas. Ligeiramente simplificado, o pacote faz isso:
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)
Quando executo o pacote (modo de depuração em BIDS), ele é executado conforme o esperado no primeiro arquivo e no segundo, mas eventualmente trava entre as iterações do loop interno. Quando trava, todas as tarefas ficam verdes e os dois contêineres de loop ficam amarelos. A janela de saída gera todas as mensagens e, passando pela guia do processo, cada tarefa tem um número correspondente de inícios e paradas, exceto os dois loops e o próprio pacote.
Meu primeiro pensamento foi que excedi um limite de iteração para o enumerador For Each File, mas não consigo encontrar nenhuma documentação para esse limite. O que mais posso verificar para determinar por que o SSIS para de funcionar?
Isso parece ser um problema com o cliente Visual Studio/BIDS atingindo os limites de memória, não com o próprio SSIS. Enquanto o pacote está sendo executado no modo de depuração no BIDS,
devenv.exe
pode-se observar que o processo ocupa continuamente memória adicional. Embora o número de arquivos processados antes do travamento seja inconsistente, o pacote, em uma ocasião, processou quase 9.000 arquivos antes que o Visual Studio lançasse uma exceção de falta de memória.A execução do pacote com
dtexec
ou por meio do SQL Agent parece resolver o problema.