ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

第二讲 日志系统:一条SQL更新语句是如何执行的

2021-07-31 18:02:09  阅读:184  来源: 互联网

标签:语句 binlog log 写入 引擎 SQL 日志 redo


redo log(重做日志)和 binlog(归档日志)

Write-Ahead Logging 写前日志技术
MySQL 里经常说到的 WAL 技术 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘
先写入redo log,可以避免每次写磁盘低效的I/O,并且使用redo log日志还是顺序写入
InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB 0 1 2 3 循环使用

redo log bin log 对比
redo log 是 InnoDB 引擎特有的 它使InnoDB有crash safe能力,binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志
redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的

两阶段提交:redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。
update 语句:执行器先通过引擎获取要修改的行,将更新之后的数通过调用引擎接口写入这行新数据,引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态,然后返回,执行器生成这个操作的 binlog,并把 binlog 写入磁盘。执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

不用两阶段提交 crash之后
先写 redo log 后写 binlog 少一行
先写 binlog 后写 redo log 由于事务回滚 恢复的备库多一行

标签:语句,binlog,log,写入,引擎,SQL,日志,redo
来源: https://blog.csdn.net/MYLOVEis77/article/details/119279202

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有