纯手绘图解 - MySQL undo log、redo log、binlog

先看看一条SQL如何入库的


纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

纯手绘图解 | MySQL undo log、redo log、binlog

数据写入详细过程

  1. 应用服务器与MySQL建立连接
  2. 通过连接发送一条SQL语句(update student set score=100 where score=50)
  3. SQL依次经过Server层的[分析器][优化器][执行器]
  4. [执行器]根据[执行计划]操作执行引擎(InnoDB Engine)
  5. InnoDB Engine从[磁盘]数据文件中将score=50读取到内存[BufferPool]中
  6. 在修改之前,写入一条[undo log]将修改之前的值score=50保存起来
  7. 先将缓存池[BufferPool]中score=50更新为score=100
  8. 写入一条[redo log]将修改后的score=100存起来,用于异常场景的事务[提交]
  9. 写入一条[bin log]将修改后的score=100存起来
  10. 后台IO线程将缓存池被修改的值score=100刷入磁盘


为什么要拆分出两层架构

这是一条非常简单的SQL语句[update student set score=100 where score=50],从MySQL服务端接收SQL到写入磁盘,经过了Server层和InnoDB存储引擎,中间掺杂着磁盘读取、日志记录、内存更新、写入磁盘。


MySQL为什么将Server层和引擎层拆分?


MySQL主要包含2种存储引擎

展开阅读全文

页面更新:2024-04-21

标签:手绘   缓存   磁盘   语句   架构   场景   内存   事务   引擎   文件   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top