InnoDB详细查询、更新流程

概述

今天我们从原理上画出InnoDB内部详细的查询语句流程图和更新语句的流程图。在画这两个流程图之前,我们先了解下InnoDB中的一些经常听到的技术。(都是系列写的建议大家花有点时间把之前的几篇看一下,有个上下文)

缓冲(内存)

  • change buffer: 写缓冲
    对普通索引页进行写操作时,如果该页不在缓冲池中,并不会立刻将磁盘页加载到缓冲池,而仅仅记录缓冲变更(buffer changes),等未来数据被读取时,再将数据合并(merge)恢复到缓冲池中的技术。写缓冲的目的是降低写操作的磁盘IO,提升数据库性能。

  • buffer pool: 缓存池
    存放索引页、数据页、undo页、change buffer、自适应哈希索引、InnoDB存储的锁信息(lock info)、数据字典信息(data dictionary)等

  • redo log buffer:redo log的缓冲

  • bin cache:bin log的缓冲

动作

  • merge:将 change buffer 中的操作设置到原数据页,得到最新结果的过程称为 merge。

  • purge: 删除回滚段(undo log 段)及真正删除物理数据

  • flush: 将脏页刷回磁盘
    题外话:我们说说什么是脏页?脏页就是内存和磁盘不一致时,是脏页。当flush到磁盘后,内存和磁盘一致了,就叫干净页。我们前面说了Mysql是先更新内存及写日志,真正的数据更新是通过flush动作刷回的,所以虽然我们叫脏页但内存中的数据才是最新的。

查询详细流程

更新详细流程

参考资料

猜你喜欢

转载自juejin.im/post/5f100a616fb9a07e9950b017
今日推荐