MySQL Binlog 组提交实现
本文代码分析基于 MySQL 8.0.29
1.背景
MySQL 提交流程有两个问题需要解决:
1.1. 提交写两份日志的性能问题
为了保证事务的持久性和原子性,事务提交完成前,其日志(WAL)必须持久化。对于 MySQL 来说,需要保证事务提交前,redo log 落盘。虽然日志顺序写的性能,已经高于数据文件随机写的性能,但是如果每次事务提交,都需将 redo log 刷盘,效率较低。同时 MySQL 还要写 binlog,相当于每次事务提交需要两次 IO,很容易成为性能瓶颈。
为了解决上述性能问题,经过 MySQL 5.6/5.7/8.0 的不断优化,引入组提交技术和流水线技术。
1.2. redo log/binlog 的原子性和一致性
原子性比较好解决,MySQL 利用一个内部 2PC 机制实现 redo log 和 binlog 的原子提交,其中2PC 的协调者由 binlog 承担。
// mysqld.cc, init_server_components
if (total_ha_2pc > 1 || (1 == total_ha_2pc && opt_bin_log)) {
if (opt_bin_log)
// tc means transaction coordinator
tc_log = &mysql_bin_log;
else
tc_log = &tc_log_mmap;
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /news/detail/tanhbecihg
系列文章
更多
同类精品
更多
-
2023 年度 A 类学科竞赛项目清单
那个人有梦想 09-16 -
从《银行业金融机构数据治理指引》监管要求看商业银行数据能力建设
51CTO 09-21 -
爱思唯尔的ESWA——模板、投稿、返修、接收的
老板来碗小面加蛋~ 09-16 -
全球WIFI功率信号最强的国家清单,无线WIFI调优
Cisco_VIP 09-17 -
国航天科技集团公司的各个研究院
知识在于积累 09-17 -
AI绘画Midjourney的咒语关键词汇
毕设小程序软件程序猿 09-17 -
ChatGPT注册流程攻略,含验证码接收
PHP中文网 05-29 -
创作者身份认证申请规则和审核标准
CSDN官方博客 09-16 -
的10 个顶尖的国内外设计网站
四喜圆子- 09-16 -
OBS做绿幕直播滤镜实现去掉绿色背景
视频砖家 09-16