Matillion ETL任务执行缓慢、资源空闲时如何定位性能瓶颈并优化
性能瓶颈定位步骤
- 校验Matillion并行配置优先级:你配置的16个全局并行连接只是上层阈值,要确认
Admin → Configuration → Job Configuration下的Maximum concurrent jobs参数值,若该值低于预期的并行数,所有任务都会被限制串行。同时检查单个Orchestration Job的Parallel execution limit配置,默认值为1,会强制该Job下的所有子任务串行执行。 - 排查任务执行耗时分布:导出任务的详细执行日志,统计每个步骤的耗时占比:
- 若耗时集中在Matillion侧的等待阶段,优先查JDBC连接池配置
- 若耗时集中在Snowflake侧的查询阶段,去Snowflake控制台的查询历史看对应查询是否处于排队状态,而非实际执行状态
- 检查JDBC连接池配置:在Matillion的Snowflake连接配置项中,确认
Maximum pool size参数值,若该值小于你需要的并行任务数,即使全局并行配置够,任务也会因为拿不到数据库连接只能串行执行。
具体优化方案
- 任务级并行调整:所有可并行的子任务需放在Orchestration Job中,开启每个任务组件的
Run in parallel开关,同时将该Job的Parallel execution limit调整为符合业务需求的数值(不要超过全局并行数上限)。注意Transformation Job本身是单数据流执行,多组独立的转换逻辑需要拆分为多个Transformation Job,放到Orchestration层并行调用。 - Snowflake侧优化:检查所用Snowflake虚拟仓库的并发查询上限,小规格仓库即使CPU空闲也会限制并发查询数,超出上限的查询会进入队列等待。可在Snowflake连接参数中添加
CLIENT_SESSION_KEEP_ALIVE=true,避免长连接中断导致的任务等待重连开销。 - EC2及Tomcat配置校验:执行
ps -ef | grep tomcat确认-Xms20g -Xmx30g参数已生效,避免配置文件未被加载。执行ulimit -n检查操作系统文件句柄限制,若数值低于65535,需修改/etc/security/limits.conf提升上限,避免并行任务打开过多文件时被系统限制。 - 批量操作优化:若业务中存在大量小表的转换、加载操作,可将多个小表的操作合并为批量任务执行,减少反复建立、释放数据库连接的额外开销。
内容的提问来源于stack exchange,提问作者dovregubben
相关产品推荐
相关产品推荐

