SSIS缓冲区分配失败

我在SSIS中有一个父程序包,该程序包的每个循环容器都按顺序执行2个子程序包。连接值作为参数传递到子程序包。子程序包动态连接到平面文件源,并使用派生列将NULL替换为\ N,最后将其加载到SQL Server目标中。平面文件源的总大小为3GB。 for-each循环在第一次迭代中执行,但在第二次迭代中失败。我收到缓冲区分配失败的错误消息。

错误消息 系统报告内存负载为85%。有32767590400字节的物理内存和4636983296字节可用。有4294836224字节的虚拟内存,其中362987520字节可用。分页文件有43437899776字节,其中有13638811648字节可用。

“数据流”任务未能创建一个缓冲区来调用组件“平面文件源输出”(27)上的输出“平面文件源”(23)的PrimeOutput。此错误通常是由于内存不足情况引起的。

内存压力得到缓解,缓冲区管理器不再限制分配 (在缓冲区调整日志中)

我将默认缓冲区大小从10 MB更改为50 MB,并将默认缓冲区最大行从10000更改为50000。还将大于100MB的文件的每批行更改为10000。

我仍然面临着同样的问题。谁能帮我解决这个问题?

谢谢, 阿比舍克

Lee_Ryan 回答:SSIS缓冲区分配失败

我建议将 AutoAdjustBufferSize 设置为 True
然后,您需要计算表行的最大大小。 您可以在替换引号中的表和模式的地方使用此SQL:

SELECT
    SUM (max_length)  [row_length],104857600.0/SUM (max_length) [Max_100MB_Buffer_Rows],2147483647.0/SUM (max_length) [Max_2GB_Buffer_Rows]
FROM  sys.tables t
JOIN sys.columns c ON t.object_id=c.object_id
JOIN sys.schemas s ON t.schema_id=s.schema_id
WHERE t.name = '{my_table_name}' AND s.name = '{my_schema_name}'

然后根据软件包的版本(2015或2017)使用100MB缓冲区(2015)或2GB缓冲区(2017)。
为了安全起见,请使用100MB缓冲区。
基本上,您需要根据数据的宽度设置一个好的最大行数(不要太高)。

本文链接:https://www.f2er.com/3102216.html

大家都在问