Pentaho转换加载flat file到Postgres加错误处理后速度骤降咨询
PDI映射添加错误处理后Postgres写入性能暴跌问题解答
该性能下降不是PDI的Postgres驱动不支持错误处理导致的,属于错误捕获逻辑的默认实现机制引发的常见性能问题,大量PDI开发者都遇到过同类场景。
核心原因
- 未添加错误处理时,PDI的「表输出」步骤默认启用批量插入模式,会将数百上千条数据攒为一个批次提交给Postgres,单次网络IO即可完成大量数据写入,因此可以达到3000rps的性能表现。
- 开启行级错误处理后,由于Postgres JDBC批处理本身的特性:单批次内只要有一条数据违反表约束,整个批次的所有写入操作都会失败。PDI为了准确定位具体出错的行,会自动将写入模式降级为单条提交,每插入一行就做一次提交和错误校验,因此性能会骤降至1rps左右。
可行优化方案
- 前置数据校验:在写入Postgres的步骤之前,新增字段格式、非空、长度、枚举值、外键匹配等校验逻辑,提前将不符合要求的数据路由到错误处理分支,校验通过的正常数据仍然走批量插入逻辑,几乎不会损失原有写入性能。
- 批次拆分降级:保留批量插入配置,将批次大小调整为100~500的适中值,新增批次重试逻辑:如果整个批次写入失败,再将该批次拆分为更小的批次甚至逐行排查错误行,适合错误率极低的场景,大部分批次仍然可以走批量写入,仅出错的小批次会降级处理。
- 临时表中转方案:先把所有源数据无校验批量写入无约束的Postgres临时表,再执行SQL语句将临时表中符合目标表约束的数据插入到正式表,同时筛选出不符合要求的错误数据做后续处理,这种方案性能最接近无错误处理的原生写入速度,适合大数据量同步场景。
提问附映射流程图:
内容的提问来源于stack exchange,提问作者Akash Kataria
相关产品推荐
相关产品推荐

