【问题标题】:SSIS Lookup FailureSSIS 查找失败
【发布时间】:2014-03-12 10:13:23
【问题描述】:

在一个 ssis 数据流中有一个查找组件,它在一个有 1800 万条记录的表上查找。我已将查找配置为完全缓存。

   Default buffer size :20485760 
Default Buffer Max rows: 100000 
The lookup join is based on an ID column of varchar(13)type

报错如下图。什么样的查找配置适合缓存这么多记录

Error: The buffer manager cannot write 8 bytes to file "C:\Users\usrname\AppData\Local\Temp\16\DTS{B98CD347-1EF1-4BC1-9DD9-C1B3AB2B8D73}.tmp". There was insufficient disk space or quota.

如果我使用没有缓存的查找,性能会有什么不同? 我确实明白,在完全缓存模式下,数据在预执行阶段之前被缓存,不必返回数据库。这个完全缓存内存占用了大量内存并为数据流增加了额外的启动时间。我的问题是什么我必须设置配置才能在完全缓存模式下处理大量数据

如果查找表有数百万条记录(并且它们不适合完整缓存),解决方案是什么

【问题讨论】:

    标签: sql-server ssis ssis-2008 ssis-2005


    【解决方案1】:

    改用 Merge Join 组件。对连接键上的两个输入进行排序,根据您的规范指定内/左/全连接。使用不同的输出来获得查找组件等功能。

    Merge Join 通常在较大的数据集上表现更好。

    【讨论】:

    • 但是..它会降低性能 rt?..排序是一项昂贵的操作,在这种情况下我也需要使用 2 个排序组件!
    • 在源系统中排序比在 ssis 中同时使用查找和排序组件要快得多。在源中排序(使用 SQL 语句,ORDER BY)并使用高级编辑器指定对输出进行排序,并指定排序键。 Merge Join 将获取此元数据并自动应用用于加入的密钥。
    • 详情见这里:ssistalk.com/2009/09/17/ssis-avoiding-the-sort-components(来不及编辑评论)
    【解决方案2】:

    您可以将 SSIS 中的 Buffertempstoragepath 属性设置为某些快速驱动器,因为 Blobtempstoragepath 和 buffertempstoragepath 将使用 temptmp 系统变量。因此,如果 tmp 变量在您的情况下无法容纳大型数据集,则使用查找转换。因此,大数据集将使用驱动器空间并为您执行工作。

    【讨论】:

    • 我认为这不能回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多