|
用过 MySQL / GreatSQL 的 DBA 大概都遇到过这样的场景:一个大事务提交,整个库仿佛被按了暂停键——TPS 突然抖动,其他事务排队等待,I/O 打满。
根子出在传统 binlog 的提交流程上。大事务提交时,要把已经落在磁盘上的 binlog cache 重新读出来,再二次写入 binlog 文件。这套"缓存回读 + 二次写入"的动作,带来一连串代价:
事务越大,这段路走得越痛。
GreatSQL 在 8.4.4-5 版本带来了「大事务 binlog 独立落盘」特性。核心思路一句话:
不再回读重写,而是把 binlog cache 文件直接"转正"成 binlog 文件。
传统路径是:binlog cache → 读取 → 写入 binlog 文件 → 提交(存在二次 I/O)。
优化后路径变成:binlog cache → 预构建 → rename → 提交(零二次写 I/O)。
提交链路直接缩短,I/O 延迟自然大幅下降。
在大事务场景下,这套优化带来的收益相当直接:
优化由参数 binlog_large_commit_threshold 控制:
ulonglong,默认值 128MB;启用还需满足几个条件:binlog cache 已发生落盘(非纯内存)、未混用 stmt/trx cache、未开启 binlog 压缩或加密、end_log_pos 校验通过。
mysqlbinlog 正常解析,不影响主从复制逻辑,不改变事务语义;一句话总结:GreatSQL 8.4.4-5 通过重构 binlog cache 文件模型,让大事务具备"零拷贝式落盘"能力,从根子上砍掉了 binlog 写入路径的 I/O 放大,是高负载场景下提升稳定性的一把利器。
特性详情见 GreatSQL 8.4.4-5 官方文档:https://greatsql.cn/docs/8.4.4-5/5-enhance/5-1-highperf-binlog-flush-opt-large-trx.html
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com


