首页/数据/数据库速查/并行复制配置(WRITESET / LOGICAL_CLOCK)
主从复制与高可用53 条

并行复制配置(WRITESET / LOGICAL_CLOCK)

提升 applier 吞吐:8.0 推荐源端 WRITESET 依赖跟踪 + 从库 LOGICAL_CLOCK 并行,worker 数按 CPU 核数配置,保持 commit order 保证一致性。

数据库速查数据更新于 2026-10-13

并行复制的两条路径

从库重放慢是延迟的主要来源,并行重放就是把单线程的 SQL 线程拆成多个 worker。能否并行取决于主库给出的依赖信息:WRITESET 按行级写集合判断两个事务互不冲突,判定粒度最细;LOGICAL_CLOCK 按提交组划分,认为同组提交的事务可以并行重放。MySQL 8.0 推荐源端用 WRITESET、从库用 LOGICAL_CLOCK 的组合。

基本信息

适用平台MySQL 5.7.6+ 支持 LOGICAL_CLOCK,8.0 支持 WRITESET
源端参数binlog_transaction_dependency_tracking = WRITESET
从库参数replica_parallel_type = LOGICAL_CLOCK、replica_parallel_workers
默认并行度MySQL 8.0 中 replica_parallel_workers 默认为 4
顺序保证replica_preserve_commit_order = ON

典型使用场景

  • 从库延迟持续增长且已排除查询与硬件因素
  • 批量导入或批量更新后从库追赶缓慢
  • 新增从库首次追赶阶段希望尽快对齐
  • 多表分片写入的库:表之间无冲突,天然适合并行重放
  • 切换演练前确认并行配置与顺序保证均已就绪

推荐配置

推荐配置
# 源端(主库)
binlog_transaction_dependency_tracking = WRITESET
transaction_write_set_extraction = XXHASH64
# 从库端
replica_parallel_type = LOGICAL_CLOCK
replica_parallel_workers = 8
replica_preserve_commit_order = ON

验证并行是否生效

验证并行是否生效
-- 查看各 worker 的当前状态
SELECT * FROM performance_schema.replication_applier_status_by_worker\G
-- 主库侧确认依赖信息类型
SHOW VARIABLES LIKE 'binlog_transaction_dependency_tracking';
-- 从库侧确认并行度与顺序保证
SHOW VARIABLES LIKE 'replica_parallel%';

参数含义

参数取值作用
WRITESET源端依赖跟踪方式按行级写集合判定冲突,冲突越少并行度越高
LOGICAL_CLOCK从库并行策略同组提交的事务并行重放
replica_parallel_workers正整数worker 数量,受 CPU 与磁盘随机 IO 限制
preserve_commit_orderON保证提交顺序与源端一致,切换安全的前提
transaction_write_set_extractionXXHASH64写集合的哈希算法,配合 WRITESET 使用
并行度不是越大越好:当多表或单表热点导致冲突时,worker 会互相等待,加线程只是增加上下文切换,需要观察实际吞吐后定值。
修改 binlog_transaction_dependency_tracking 属于动态参数但会影响所有下游:变更前先确认所有从库版本都支持 WRITESET 依赖,避免出现无法重放的事务。
判断并行是否真的在起作用,看 performance_schema.replication_applier_status_by_worker:多个 worker 同时处于工作状态说明并行生效;若长期只有一个 worker 忙碌,通常是单表热点或大事务把并行度限制住了,此时调大 worker 数没有意义。

易错点

  • 只改从库不改源端:依赖跟踪仍是 COMMIT_ORDER,并行度提升有限,误以为参数没生效
  • 关掉 replica_preserve_commit_order 换吞吐:并行乱序提交,故障切换后可能读到不一致状态
  • worker 数按 CPU 核数无脑拉满:磁盘随机 IO 或表级冲突成为瓶颈,吞吐反而下降
  • 大事务不拆分:单个大事务无法并行,仍会让整个 worker 串行执行,延迟不降反升

数据来源与参考

  • MySQL 8.0 Reference Manual: Replication Threads / WRITESET
  • MySQL 8.0 Reference Manual: replica_parallel_workers

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌