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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律