DBAtlas · 数据库运维图谱

调优多线程副本(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。

在 DBAtlas 中打开 →

相关内容