设为首页 加入收藏

TOP

MySQL binlog 组提交与 XA(两阶段提交)
2015-11-13 01:24:21 来源: 作者: 【 】 浏览:28
Tags:MySQL binlog 交与 阶段 提交

淘宝对binlog group commit进行了进一步的优化,其原理如下:


从XA恢复的逻辑我们可以知道,只要保证InnoDB Prepare的redo日志在写Binlog前完成write/sync即可。因此我们对Group Commit的第一个stage的逻辑做了些许修改,大概描述如下:


?Step1. InnoDB Prepare,记录当前的LSN到thd中;?
?Step2. 进入Group Commit的flush stage;Leader搜集队列,同时算出队列中最大的LSN。?
?Step3. 将InnoDB的redo log write/fsync到指定的LSN? (:这一步就是redo log的组写入。因为小于等于LSN的redo log被一次性写入到ib_logfile[0|1])
?Step4. 写Binlog并进行随后的工作(sync Binlog, InnoDB commit , etc)


也就是将 redo log的write/sync延迟到了 binlog group commit的 flush stage 之后,sync binlog之前。


通过延迟写redo log的方式,显式的为redo log做了一次组写入(redo log group write),并减少了(redo log) log_sys->mutex的竞争。


也就是将 binlog group commit 对应的redo log也进行了 group write. 这样binlog 和 redo log都进行了优化。


官方MySQL在5.7.6的代码中引入了淘宝的优化,对应的Release Note如下:


5. XA参数 innodb_support_xa


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇RHEL6.4 安装 MySQL 5.6.27 下一篇mydumper 安装报错处理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: