PostgreSQL 参数 max_parallel_apply_workers_per_subscription 解析
max_parallel_apply_workers_per_subscription 用于控制单个订阅可同时应用大型未完成事务的并行应用工作进程数,超过该数量的事务会被写入文件延后处理。默认值为2,可配置范围是0到1024,从 PostgreSQL 16 开始引入,到PostgreSQL 19 beta 3 都没有变化。
PostgreSQL 18 开始,CREATE SUBSCRIPTION 默认开启该参数,通过 pg_upgrade 升级的订阅会保留原有配置。该参数仅限制单个订阅可同时处理的事务数量,调大该参数不会加快单个事务的应用速度,其优势是大型事务的大部分内容在提交前就已完成应用,能显著降低后续小事务的可见延迟。测试显示,在发布端插入40万行数据后紧跟一个单行事务,使用该参数默认值时订阅端约0.2秒就能看到单行事务;参数设为0时,延迟在3.2到4.0秒之间。
当该参数设为默认值2时,如果同时有3个大型事务开启,只有两个能获得工作进程,第三个会被写入临时文件且默认日志级别不会输出提示。参数需要重新加载配置生效,而工作进程池需要重启服务生效,修改时需要先扩容工作进程池。
存在三种会强制将所有流式事务写入临时文件的场景:发布端版本低于16;订阅中有任意一张表处于初始同步或刷新同步状态;存在待处理的 ALTER SUBSCRIPTION ... SKIP 操作。
Post #1858
4
