首页 存档 技术 查看内容

从源码探究MySQL5.7高吞吐事务量的背后操手

2018-3-30 13:00 |来自: 互联网 297 0

摘要: 大家都知道在MySQL中,在事务真正COMMIT之前,会将事务的binlog日志写入到binlog文件中。在MySQL的5.7版本中,提供了所谓的无损复制功能,该功能的作用就是在主库的事务对其他的会话线程可见之前,就将该事务的日志 ...


大家都知道在MySQL中,在事务真正COMMIT之前,会将事务的binlog日志写入到binlog文件中。在MySQL的5.7版本中,提供了所谓的无损复制功能,该功能的作用就是在主库的事务对其他的会话线程可见之前,就将该事务的日志同步到从库,保证了事务可以安全地无丢失地复制到从库。


下面我们从源码来分析MySQL的事务提交以及事务在何时将binlog复制到从库的。


MYSQL_BIN_LOG::ordered_commit,这个是事务在binlog阶段提交的核心函数,通过该函数,实现了事务日志写入binlog文件,以及触发dump线程将binlog发送到Slave,在最后的步骤,将事务设置为提交状态。


我们来分析MYSQL_BIN_LOG::ordered_commit这个函数的核心过程,该函数位于binlog.cc文件中。


源码分析


MYSQL_BIN_LOG::ordered_commit,这个函数,核心步骤如下:


第一步骤:flush


Stage#1: flushing transactions to binary log:


步骤1:将事务的日志写入binlog文件的buffer中,函数如下:

process_flush_stage_queue(
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部