所有组件都有计数器用来记录运行时各方面的数值,比如Integration Service会追踪记录每个组件的input rows, output rows以及error rows的数量,并将这些数字记在计数器里。其中,一些组件的计数器是跟性能相关的,专门用来记录性能有关的数字信息。如下列的计数器,可通过查看它们来确定性能瓶颈并达到性能优化的目的
1) Errorrows计数器
记录error记录条数,需查看如下计数器来分析原因
Transformation_errorrows
当有数据流有大量Error rows时,会影响到性能
具体请参照:排除Transformation Errors
2) Readfromcache和Writetocache计数器
记录缓存读写记录条数
当session包含Aggregator, Rank, 和Joiner组件时,需查看如下计数器来分析原因
Transformation_readfromcache
Transformation_writetocache
Transformation_readfromdisk
Transformation_writetodisk
可以在session运行时,通过在monitor里查看运行session的log来查看细节
查看磁盘访问时,需要计算"缓存命中率"和"缓存丢失率"
缓存命中率计算公式:[(# of reads from disk) + (# of writes to disk)]/[(# of reads from memory cache) + (# of writes to memory cache)]
缓存丢失率计算公式:[1 - 缓存命中率]
因此最小化磁盘读写,最大化缓存读写可以最大限度的提升性能,其中缓存命中率为1是最理想的情况
3) Readfromdisk和Writetodisk计数器
记录磁盘读写记录的条数
当session包含Aggregator, Rank, 和Joiner组件时,需查看如下计数器来分析原因
Transformation_readfromdisk
Transformation_writetodisk
可在session运行时,通过monitor查看session运行log的细节
如果这两个计数器的值都大于0,说明缓存小,可通过调高缓存大小提升性能
关于缓存,包括index cache和data cache
其中index cache是存储的group信息的,data cache存储的是组件转换后的数据
两个缓存都可以提升性能,但由于组件转换后的数据量往往是非常大的,因此data cache需调高的要比index cache多
但若处理的数据量超过可用内存时,可调高index cache提升性能
如果session中的Aggregator是不断累积增长的,Integration Service会不断的从磁盘读写历史Aggregated数据,
则下面的计数器值会大于零
Aggregator_readtodisk
Aggregator_writetodisk
如果预先就知道大体的数据量时,可将缓存调整为合适的大小,因为缓存过大或过小都会有性能上的损失
4) Rowsinlookupcache计数器
当session中包含多个lookup组件时,可能会降低性能
若lookup表很大时,可通过优化lookup expressions来提高效率
具体请参照:Optimizing Lookup Transformations