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数据,当读取一组数据时,可以将另外一组数据阻断
  否则就只能在读取一组数据的同时,将另外一组数据缓存,而这会降低性能

性能调优之Mapping的更多相关文章

  1. Spark 常规性能调优

    1. 常规性能调优 一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性 ...

  2. Informatica_(6)性能调优

    六.实战汇总31.powercenter 字符集 了解源或者目标数据库的字符集,并在Powercenter服务器上设置相关的环境变量或者完成相关的设置,不同的数据库有不同的设置方法: 多数字符集的问题 ...

  3. elasticsearch性能调优

    转载 http://www.cnblogs.com/hseagle/p/6015245.html 该es调优版本可能有低,但是思想主体不变,不合适的参数可以自己找最新的版本相应的替代,或者增删 ela ...

  4. JVM性能调优与实战进阶篇-上

    ZGC 诞生原因 Java生态非常强大,但还不够,有些场景仍处于劣势,而ZGC的出现可以让Java语言抢占其他语言的某些特定领域市场.比如 谷歌主导的Android手机系统显示卡顿. 证券交易市场,实 ...

  5. Elasticsearch索引和查询性能调优的21条建议

    Elasticsearch部署建议 1. 选择合理的硬件配置:尽可能使用 SSD Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能.使用SSD(PCI-E接口SSD卡/SA ...

  6. web前端性能调优

    最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...

  7. [网站性能2]Asp.net平台下网站性能调优的实战方案

    文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言    最近帮朋友运营的平台进行了性能调优,效果还不错, ...

  8. Asp.net平台下网站性能调优的实战方案(转)

    转载地址:http://www.cnblogs.com/chenkai/archive/2009/11/07/1597795.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错,所以写出来 ...

  9. 第0/24周 SQL Server 性能调优培训引言

    大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...

随机推荐

  1. CSS样式内容

    CSS代码规范:尽量不要在标签内使用样式代码. .css文档内部声明不换行可以节省内存. 谨记: 常犯的错误是.html文档和.css样式表都写好了,但总会忘记插入样式表. 1.字体的样式 ​  2. ...

  2. Codeforces Round #436 (Div. 2)D. Make a Permutation! 模拟

    D. Make a Permutation! time limit per test: 2 seconds memory limit per test: 256 megabytes input: st ...

  3. MySQL ERROR 1064(42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

    通常出现该错误的原因是使用了 MySQL 的保留字 解决方法是对使用的保留字使用反引号  (Tab键上面)

  4. 密码与安全新技术专题之AI与密码

    20189217 2018-2019-2 <密码与安全新技术专题>第五周作业 课程:<密码与安全新技术专题> 班级: 1892 姓名: 李熹桥 学号:20189214 上课教师 ...

  5. laravel-更换语言包

    第一步:找语言包 找到比较靠谱的语言包(根据下载量与收藏量综合判断),而且要是laravel的 扩展的链接:https://packagist.org/packages/caouecs/laravel ...

  6. OO第二次作业总结

    OO~第二次作业总结 连续三周的电梯作业结束了,总的来说这三次作业做的还算平稳,既没有被刀,也没有刀中别人.那么接下来开始谈谈我对这三次作业的认识. 一.设计策略 我三次作业的设计思路基本上是相同的, ...

  7. java上传文件常见几种方式

    1.ServletFileUpload 表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成 ...

  8. 工作我们是专业的之css规范

    我一直认为专业是一种态度.不同于业余,专业代表无论技术高低都会遵守一定的规范,专业代表对某一领域不断的精益求精.专业就是比业余逼格高. 习惯书写规范 css 属性声明的顺序:Positioning(定 ...

  9. 2019.03.28 bzoj3597: [Scoi2014]方伯伯运椰子(01分数规划)

    传送门 题意咕咕咕有点麻烦不想写 思路: 考虑加了多少一定要压缩多少,这样可以改造边. 于是可以通过分数规划+spfaspfaspfa解决. 代码: #include<bits/stdc++.h ...

  10. error: failed to push some refs to 'https://gitee.com/xxx/xxx'

    一开始以为是本地版本和线上的差异 果断先直接pull  之后 还是不对,哎 不瞎搞了  搜... 获得消息: git pull --rebase origin master 原来如此:是缺失了文件