• 性能调优之Mapping


    Mapping层级的调优可能会花费时间,但是性能调优的效果确实非常显著的
    优化Target,Source之后,可以调优Mapping
    通常的方法是尽可能减少组件及组件的字段间不必要的连线
    即尽可能用最少的组件和表达式做最多的工作,尽可能减少组件的字段间不必要的连线来保证数据移动量

    优化之Source平面文件
      通过以下几种方式进行优化:
        1 调整Line Sequential Buffer长度
         可以设定Integration Service读取平面文件每行的最大字节数,默认情况下Integration Service每行最多读取1024字节
         但如果平面文件每行的字节数少于默认的1024字节,可在session properties里将Line Sequential Buffer调低

        2 关于Delimited Flat File
         Delimited Flat File是通过分隔字符给各个字段划定边界来分隔各字段的
         同时Delimited Flat File也会使用转义字符,当Integration Service遇见转义字符会将分隔符作为普通字符
         减少使用转义字符,或如果文件内部不包含冒号,都可以提高性能

        3 关于XML文件
         由于XML格式文件包含标签,且所包含标签层级或对应属性越多,文件就越大,因此往往XML文件的大小会比普通文件大很多
         此外读取XML文件,Integration Service还要对文件内部节点结构进行解析并对其进行缓存
         因此读取所花费时间往往比普通文件多

    配置Single-Pass Reading
      所谓Single-Pass Reading,就是读取一个Source读取数据,中间有多个逻辑处理分支,然后将数据加载到多个不同的Target
      如果有多个session是从同一个数据源读取数据的,可以考虑使用Single-Pass Reading这种方式
      可以将多个mapping中的逻辑合并到一个mapping中,这样source就可只读取一次,并将数据发送到多个不同的管道
      一个特定的行可以被所有的管道、任意的管道组合或没不被管道使用

    创建Pass-Through Mapping
      将Source Qualifier组件和Target对应字段直接相连

    关于Filter
      可使用如下两个组件过滤数据
        Source Qualifier: 该组件只能从数据源是关系型数据库的过滤数据
        Filter: 该组件可以从任何数据源过滤数据
      通过过滤数据,可以减少下游数据处理所花费时间
      同时也要避免在filter中使用复杂的表达式,应只使用简单的integer或true/false
      如果不需要保留reject数据,也可使用filter或router组件从Update Strategy组件中去掉reject数据

    关于数据类型转换
      可通过减少不必要的数据类型转换来提升性能
      比如,如果mapping将数据从integer类型转换为decimal类型后,又再次转换为integer类型,这些不必要的类型转换会影响性能

      使用如下方式进行数据类型转换
        1) 使用lookup和filter组件进行比较时,使用integer类型代替其他数据类型
        2) 通过端口到端口的转换,将Source的日期类型转换为String类型
      即直接将source的日期类型字段连接到Target的String类型字段,或者将Target的对应字段从String类型改为日期类型

    关于表达式

      创建可复用逻辑
        如果在mapping中多处使用相同的处理,并将处理结果发送到不同Target
        则可先将该处理做成common的,即在上游处理一次,然后再将结果输送到下游

      尽量减少聚合函数的使用
        每次使用聚合函数,Integration Service都会对数据进行检索并分组
        比如,SUM(COLUMN_A) + SUM(COLUMN_B),使用了两次聚合运算,但实际上计算一次就可以了,改成SUM(COLUMN_A + COLUMN_B)

      用本地变量替换共通表达式
        如果一个组件中多次使用了表达式,可以将该表达式设置成变量
        可仅在组件内部使用本地变量,但由于变量值只通过一次计算而获得,因此节省了多次计算的时间

      选择数值与字符串操作
        Integration Service处理数字要比字符串快
        比如,如果需要从一个表查找两个字段,一个ID,另外一个是NAME,则匹配ID的速度要高于匹配name的速度

      关于字符比对
        当Integration Service在Char和Varchar列之间执行比较时,每次在行中发现尾随空格时,它都会减慢速度
        当在Informatica管理员中配置Integration Service时,可使用TreatCharasCharonRead选项
        这样Integration Service就不会从Char源字段的末尾删除尾随空格

      选择decode替代lookup
        当使用lookup函数时,Integration Service需要在一个数据库里查询某个表
        当使用decode函数时,Integration Service会将查找值并入表达式而不是查找一个单独的表
        因此,当查出少量的不变的数据时,使用decode而不是lookup

      使用操作符而不是函数
        Integration Service处理操作符的速度高于函数,
        如下例:
          CONCAT( CONCAT( CUSTOMERS.FIRST_NAME, ' ') CUSTOMERS.LAST_NAME)
        可替换为:
          CUSTOMERS.FIRST_NAME || ' ' || CUSTOMERS.LAST_NAME

      优化IIF函数
        如果表达式中使用了太多的IIF以及and,or,=这样运算符号,会影响到性能
          IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_A + VAL_B + VAL_C,
          IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'N', VAL_A + VAL_B ,
          IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'Y', VAL_A + VAL_C,
          IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'N', VAL_A ,
          IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_B + VAL_C,
          IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'N', VAL_B ,
          IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'Y', VAL_C,
          IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'N', 0.0,))))))))
        可通过如下方式将IIF以及and,or,=减少到最低
          IIF(FLG_A='Y', VAL_A, 0.0)+ IIF(FLG_B='Y', VAL_B, 0.0)+ IIF(FLG_C='Y', VAL_C, 0.0)

      评估表达式
        如果无法确定哪个表达式影响了性能,可以将一部分表达式用固定值代替,然后比对修改前后的时间
        如果时间差较大,则说明影响性能的表达式就在被固定值替代的这一部分范围内
        然后采用相同方式,逐渐缩小范围,最终确定到真正影响性能的表达式

    优化外部过程
      如果外部过程需要交替读取input数据时,可以将input数据阻断
      如果没有阻断功能,在编写外部过程时需将input数据缓存,而拷贝数据到缓存是会降低性能的
      比如,有两组input数据,当读取一组数据时,可以将另外一组数据阻断
      否则就只能在读取一组数据的同时,将另外一组数据缓存,而这会降低性能

  • 相关阅读:
    vue-element-admin中table分页改为前台处理
    vue项目如何部署到Tomcat中
    vuex之modules 热加载(hot update)
    持续学习
    css比较特殊选择器汇总(持续更新)
    关于伪元素before after总结
    ajax入门-实现省份下拉框
    super和this关键字的详解
    监听器
    当浏览器被关闭时,session是否被关闭?
  • 原文地址:https://www.cnblogs.com/shiliye/p/10677293.html
Copyright © 2020-2023  润新知