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

  

posted on   太白金星有点烦  阅读(127)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示