67.Mysql的组提交
Mysql的提交(group commit)
mysql5.7的并行复制是基于组提交的(group commit)的,在正常情况下,一个事务的提交一般需要经过2pc(二阶段提交)过程,

1. prepare阶段: 将XID(内部XA事务的ID) 写入到redo log,同时将redo log对应的事务状态设置为prepare,然后将redo log刷新到磁盘上
2. commit阶段: 把XID写入binlog,然后将binlog刷新到磁盘,接着调用引擎的提交事务接口,将redo log状态设置为commit.
事务提交的过程:redo log(perpare) ---> binlog刷盘持久化 ---->redo log(commit)
组提交:An InnoDB optimization that performs some low-level I/O operations (log write) once for a set of commit operations, rather than flushing and syncing separately for each commit
为了解决两阶段提交性能问题,MYSQL引入了binlog组提交机制,就是当有多个事务提交时,会将多个binlog刷盘操作合并一个,从而减少磁盘的i/O次数。
其实binlog刷盘分为三个阶段(flush 阶段、sync阶段和commit阶段)
这里说说关于组提交的两个相关的参数(以下参数一般基于双1参数进行设置的:sync_binlog=1 innodb_flush_log_at_trx_commit=1):
- Binlog_group_commit_sync_delay:定时发车在等待N 微秒后,进行binlog刷盘操作
- binlog_group_commit_sync_no_delay_count=N:人满发车,达到最大事务等待数量,开始binlog刷盘,忽略定时发车
- 以上两个参数的默认值都是0
这两个参数的具体的解释见:https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html
组复制这里参考:https://blog.csdn.net/sanylove/article/details/127576237
浙公网安备 33010602011771号