性能调优之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还要对文件内部节点结构进行解析并对其进行缓存
     所以读取所花费时间每每比普通文件多session

 

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

 

建立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类型改成日期类型优化

 

关于表达式code

  建立可复用逻辑
    若是在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) orm

  评估表达式
    若是没法肯定哪一个表达式影响了性能,能够将一部分表达式用固定值代替,而后比对修改先后的时间
    若是时间差较大,则说明影响性能的表达式就在被固定值替代的这一部分范围内
    而后采用相同方式,逐渐缩小范围,最终肯定到真正影响性能的表达式router

 

优化外部过程   若是外部过程须要交替读取input数据时,能够将input数据阻断   若是没有阻断功能,在编写外部过程时需将input数据缓存,而拷贝数据到缓存是会下降性能的   好比,有两组input数据,当读取一组数据时,能够将另一组数据阻断   不然就只能在读取一组数据的同时,将另一组数据缓存,而这会下降性能

相关文章
相关标签/搜索