加载大量小文件时,在“for each file”循环中执行任务包失败

问题描述 投票:0回答:0

我有一个 SSIS 包,其中包含一个“Execute Package Task”(ExecuteOutOfProcess = False),次数与特定文件夹中的文件一样多。 enter image description here enter image description here

子包任务是一个非常简单的包,包括一个 DFT,可将数据从平面文件 (.csv) 加载到 SQL Server 表中 enter image description here enter image description here

它在文件数量有限的情况下正确运行,但现在我必须加载超过 2.000 个文件(每个文件少于 1000 行并且 < 1Mb) and I get the following massages after processing around 500 files

留言-1 缓冲区管理器未能调用 76480000 字节的内存分配,但无法换出任何缓冲区以减轻内存压力。考虑了 3 个缓冲区并锁定了 3 个。管道可用的内存不足,因为安装的内存不足,其他进程正在使用它,或者锁定了太多缓冲区。

留言-2 缓冲区管理器在 0 个物理缓冲区中分配了 0 兆字节。

留言-3 系统报告 64% 的内存负载。有 68718374912 字节的物理内存,其中 24701116416 字节可用。有 2147352576 字节的虚拟内存,其中有 49799168 字节可用。分页文件有 77308309504 字节,其中 33875689472 字节可用。

似乎 SSIS 在处理/加载文件后没有清理虚拟内存,当它达到其限制时,由于资源不足,包失败。我无法更改资源分配,因为服务器是共享的。

我尝试的第一件事是使用 ExecuteOutOfProcess = True 执行包任务,但我遇到很多其他错误(连接、日志记录等)很难识别,因为通过 Ms 启动包时无法再进行调试视觉工作室。

(子)包似乎是由不同的用户(?)执行的,该用户不允许使用其中一个连接管理器(csv 文件或 SQl db)。 我也觉得参数绑定不再起作用了

留言 执行查询“”失败,出现以下错误:“无法获取托管连接。”。可能失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接建立不正确。

我还玩过 AutoAdjustBuffersize = True or False ,将 DefaultBufferSize 减少到最小值 1048576。它改变了可以加载的文件数量,但它在某些时候仍然失败并出现相同的错误。

有人可以帮我吗?

sql-server ssis out-of-memory buffer flat-file
© www.soinside.com 2019 - 2024. All rights reserved.