调优多线程副本(replica_parallel_workers)
MySQL复制命令
-- Replica: stop the applier, set worker count and commit order
STOP REPLICA SQL_THREAD;
SET PERSIST replica_parallel_workers = 8;
SET PERSIST replica_preserve_commit_order = ON;
START REPLICA SQL_THREAD;
SELECT COUNT(*) AS workers FROM performance_schema.replication_applier_status_by_worker;
-- Source (8.0 only): switch dependency tracking to WRITESET (default in 8.4, variable removed)
SET PERSIST binlog_transaction_dependency_tracking = WRITESET;作用
设置副本上并行应用事务的 worker 数量;replica_preserve_commit_order 使提交顺序与源保持一致。源上的 WRITESET 依赖跟踪使涉及不同行的事务即使在源上是串行提交的,也能并行应用。
适用场景
当副本跟不上源的写入速度,而 applier 实际上是单线程,导致延迟不断累积时。
注意
新的 worker 数量在 applier 重启时生效。运行的 worker 数多于 CPU 核心数会增加协调开销;从 8–16 的范围开始,并观察延迟和 worker 错误。单个超大事务或在没有 PK 的表上的大量 DML 无法并行化,这通常是持续延迟的真正原因。replica_preserve_commit_order=OFF 可提供更高的并行度,但允许副本上出现短暂的乱序提交;在提供读服务的副本上请保持 ON。