13

从我读到的:

表或视图数据访问模式将每一行作为事务一次提交。因此,制作一个传输 500 万行的包需要很长时间(30 多分钟)。

快速加载数据访问模式允许在插入到目标时指定批处理行和提交大小。例如,插入 500 万条记录只需 2 分钟多一点。

现在问题出现了,加载到 DW 的 SSIS 包之一在 OLE DB 目标中使用表或视图数据访问模式。据我了解,这是为了获取它插入的错误行(错误约束)到错误记录表中。因此,我们有一个需要 30 多分钟的过程。而对于相同的操作,Fast-Load 将花费不到 2 分钟的时间。

如果我理解正确,快速加载将无法区分哪一行导致批次中的错误,而这又导致批次完全失败?如果是这样,是否有另一种方法来解决这种情况,即带有错误行的批次被错误约束重定向,然后以一种方式将批次中的好记录发送到正确的目的地,同时仍然发送错误记录到错误日志表中?这样做是个好主意吗?关于花费的时间,硬着头皮说话会更好吗?

先感谢您。

4

2 回答 2

15

我在这种情况下看到的做法是级联失败方法。在开始单例插入之前,尝试以连续较小的批次插入 OLE DB 目标,以尝试通过批处理模式获得尽可能多的数据。

假设您有 10k 行的提交大小(任意数字,测试您的情况等)。将失败的行重定向到 OLE DB 目标,仍处于快速加载模式,但提交大小为 2.5k 行。添加另一个 ole db 目标,提交大小可能为 100,然后有一个处于 RBAR 模式的最终目标。然后,您可以识别失败的行并对它们执行任何需要执行的操作。

于 2013-01-22T19:41:35.203 回答
3

好吧,我在 Fastload 模式下使用了一个目的地,并将它的错误行重定向到另一个目的地,用于相同的 DestinationTable,但在逐行模式下。

它没有 Row by Row 慢,也没有 Fastload 快,但它对我有用!
我还有一个错误描述和真正的错误。

于 2017-08-22T10:29:55.040 回答