【发布时间】:2012-01-24 18:28:19
【问题描述】:
我有一个使用 SSIS 导入的大文件 (15GB),这通常不是问题,但我还在将数据插入表之前使用了排序和合并连接。当文件在数据流中缓冲时出现问题,我收到此错误:
错误:系统报告 73% 的内存负载。有3478020096 物理内存字节,有 911761408 字节可用。有 2147352576 字节的虚拟内存,其中 288587776 字节可用。这 分页文件有 6954242048 字节,其中 3025256448 字节空闲。
[Flights File [999]] 错误:尝试向数据流任务缓冲区添加行失败 > 错误代码为 0x8007000E。
有没有办法将文件拆分为 3 个或更多更小的文件,或者可能是另一种更有效的方法来导入数据?
【问题讨论】:
-
SSIS 中的排序和连接效率非常低,您有没有机会消除它们?如果文件中的数据支持拆分成更小的物理文件,那也没什么坏处。 Unix 有一个方便的
split程序。最坏的情况是你可以编写自己的版本,尽管你会为读取和写入 15GB 数据付出磁盘代价。 -
您可以发布数据流的屏幕截图吗?
-
@billinkc:目前,我们在 DTS 中运行相同的操作,将 15GB 文件整体导入临时表,然后以 50,000 行增量插入到最终表中,同时加入相应的数据表。目前,这个 DTS 包需要 24-36 小时才能完成。我是 SSIS 的新手,但我希望使用这个新软件包可以提高 25% 以上的效率。这是数据流的截图:i.imgur.com/nVjgP.png
-
每个排序操作都会使您的数据流执行从存储桶 1 到存储桶 2 的数据的物理内存复制。我数了其中的 10 个。对于来自数据库/查询的 5 个(运营商、连接运营商),您可以通过连接条件向它们添加显式
ORDER BY,将其标记为按相同键在数据流中排序,然后它应该挂接到合并连接。 -
虽然大图,数据库查询是否都在同一台服务器上?哪些数据量正在沿着这些小路下降?查找转换不够用有什么原因吗?
标签: ssis