本文共 1951 字,大约阅读时间需要 6 分钟。
Mapping层级的调优是一个复杂而重要的过程,通常比表达式优化耗时更多,但其带来的性能提升却更加显著。在优化过程中,建议从优化Target和Source入手,再逐步调整Mapping的结构。为了实现这点,可以最大限度减少组件之间不必要的连接,通过最少的组件完成最多的数据处理工作,同时缩减组件字段间的数据传输量。
调整Line Sequential Buffer长度
Integration Service默认每行会读取1024个字节的数据。如果文件中每行的字节数较少,可以在Session Properties中调整Line Sequential Buffer的大小,减少不必要的缓存读取内存,提升读取效率。Delimited Flat File处理
Delimited Flat File通过分隔符将字段边界分开,但在包含转义字符的情况下,Integration Service会将转义符作为普通字符处理。建议尽量减少使用转义字符,尤其是在文件中没有包含冒号的情况下,这样可以显著提高文件读取性能。XML文件处理
XML文件由于其结构化特点,其标签和层级越复杂,文件体积就越大。读取XML文件时,Integration Service需要进行节点结构解析和缓存操作,这会导致读取速度较慢。因此在读取XML文件时,建议优化文件结构,减少不必要的标签层级,提升读取效率。Single-Pass Reading是一种高效的数据处理方式,通过在一个Source读取数据后,将其发送至多个不同的Target。这种方式特别适用于多个Session同时从同一个数据源读取数据时,可以避免重复读取数据,提升整体处理效率。将多个Mapping合并到一个Mapping中,确保Source只读取一次,并通过管道分发至多个Target,是一个理想的实现方式。
Pass-Through Mapping是数据处理中的简单映射方式,将Source Qualifier直接连接到Target对应字段,是最直接、高效的映射方式。
在数据处理过程中,过滤是减少数据量而提升处理效率的重要手段。可以通过Source Qualifier和Filter组件来实现过滤。Source Qualifier适用于关系型数据库,而Filter组件可以应用在任何数据源。过滤时,避免使用复杂表达式,应以简单整数或布尔值为目标,可以通过Filter或Router组件去掉不需要的 rej数据。
不必要的数据类型转换会显著影响性能。仅在必要时才做类型转换,避免多次不必要转换。例如,在与lookup或filter组件配合使用时,尽量使用整数类型代替其他类型。当需要将日期类型转换为字符串时,可以直接进行端口到端口转换,避免复杂的表达式判断。
创建可复用逻辑
如果某些处理逻辑在多个Mapping中重复出现,可以将其提取为一个可复用的逻辑,并在上游完成处理后,将结果输送至下游目标。减少聚合函数使用
每次调用聚合函数时,Integration Service都需要进行数据检索和分组操作。使用聚合函数时,尽量将多个SUM操作合并为单个SUM,例如将SUM(COLUMN_A) + SUM(COLUMN_B) 替换为 SUM(COLUMN_A + COLUMN_B)。使用本地变量替换表达式
在组件内部,可以通过本地变量存储复用表达式,以减少重复计算,提升性能。字符比对优化
Integration Service在执行Char和Varchar列之间的比较时,会因为尾随空格的问题而减慢速度。可以在Integration Service中配置TreatCharasCharonRead选项,以避免尾随空格的处理。选择适当的数据操作
Integration Service处理数值操作的速度远高于字符串操作,尽量操作数值字段。而在需要字段匹配时,ID字段的匹配速度要高于名称字段。优化IIF函数与表达式
IIF函数配合过多的逻辑运算符会大幅影响性能。可以通过简化表达式,避免嵌套IIF函数,改为直接条件判断或分解为多个IIF函数。如果难以确定哪个表达式对性能有影响,可以通过替换部分固定值进行测试,找出影响性能的表达式。这种方法可以帮助逐步缩小问题范围,优化关键表达式。
外部 processData的处理可以通过阻断其他数据源的输入数据来优化性能,避免多线程读取。使用阻断功能可以提升外部处理过程的效率。
转载地址:http://vyicz.baihongyu.com/