从库复制又延迟了?GreatSQL 8.4.4-5 让并行回放"不再堵车"

备库延迟,卡在哪一步?

主从复制、MGR 组复制里,备节点靠回放 relaylog 中的 binlog 事务来追平主库。可 binlog 是逻辑日志,备节点得把事务重新执行一遍,高并发一上来,复制延迟就冒头了。

现有的并行复制基于 write-set / logical clock 模型,用 last_committedsequence_number 两个字段判断哪些事务能并行跑。规则很简单:

若某事务 last_committed = Msequence_number = N 且 M < N,就得等所有 sequence_number ≤ M 的事务先跑完。

问题就出在"等"这个动作上------传统实现里,一旦碰到有依赖关系的事务,协调线程(coordinator)会直接卡住,连带后面的 binlog 读取和调度全被堵在门口。前面一个事务没就绪,后面一整队都别想动。

GreatSQL 的解法:让 worker 自己等,别拦着后面的车

GreatSQL 8.4.4-5 的思路一句话概括:

把"等待"从协调线程下沉到 worker 线程,调度和执行彻底解耦。

具体做了三件事:

  • 协调线程不再阻塞:遇到有依赖的事务,协调线程照样往下读、往下派活,不再原地干等;
  • 冲突事务交给 worker 自己等 :给需要等待的事务打上 need_wait 标记,由领到活的 worker 线程执行 wait_for_last_committed_trx,自己等自己的前置事务;
  • SIGNAL 精准唤醒:前置事务一完成,通过信号机制唤醒在等待的 worker,无缝接着跑。

这样一来,协调线程始终保持"流水线"状态,不会因为个别事务的依赖关系而整体停摆。

怎么开启?一个参数搞定

优化由参数 replica_parallel_wait_mode 控制:

  • WAIT_ON_SQL_THREAD:旧行为模式,默认值,等待逻辑在协调线程;
  • WAIT_ON_WORKER_THREAD:新行为模式,推荐值,等待逻辑下沉到 worker。

想启用新机制,把它调成 WAIT_ON_WORKER_THREAD 即可。

收益:并行度更高,延迟更低

把等待逻辑挪到 worker 之后,效果直接体现在几个方面:

  • 备节点并行回放并行度提升,能同时跑的事务更多;
  • 调度阻塞链路缩短,协调线程不再成为瓶颈;
  • 整体吞吐上升、复制延迟下降,高可用集群的稳定性更有保障。

一句话总结:GreatSQL 8.4.4-5 通过将等待逻辑从协调线程下沉至 worker,实现了并行复制中调度与执行的解耦,从根子上化解了"一个事务卡住、整条链路停摆"的老问题,让备库回放跑得更顺、追得更快。

特性详情见 GreatSQL 8.4.4-5 官方文档:

https://greatsql.cn/docs/8.4.4-5/5-enhance/5-1-highperf-parallel-replica.html

相关推荐
GreatSQL1 天前
大事务提交总是卡?GreatSQL 让 binlog "零拷贝"落盘,延迟直降七成
greatsql
GreatSQL5 天前
GreatSQL 8.4.4-5 GA(2026-06-30)
greatsql
GreatSQL14 天前
参数引发的复制中断:max_binlog_cache_size 导致 SQL 线程异常的复现与分析
greatsql
GreatSQL17 天前
openGauss 迁移到 GreatSQL:DataX 全流程实操指南
greatsql
GreatSQL19 天前
gt-checksum v4.0.0 新功能解读系列文章(6):权限预检与修复安全策略——先确认能看见,再决定怎么修
greatsql
GreatSQL20 天前
gt-checksum v4.0.0 新功能解读系列文章(5):DSN 密文保护——连接串密码不再明文裸奔
greatsql
GreatSQL1 个月前
gt-checksum v4.0.0 新功能解读系列文章(2):自定义数据类型映射——异构迁移不再手工对齐
greatsql
秋92 个月前
腾讯 GreatSQL 全链路实战:从国产化选型到 MGR 集群部署
greatsql