静谧的森林| 青训营笔记

41 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天,不知不觉已经到了十五天了,接下来就是备考开学考的关键期了,但我也会尽我所能的更新下去,算多增长见闻了。

InnoDB 的 buffer pool 是怎么实现页面管理和淘汰的:

InnoDB的buffer pool是用于存放数据页的缓存区,用于加速数据库读写操作。当需要访问数据库的数据页时,InnoDB会首先查找该页是否在buffer pool中,如果在,直接从缓存区读取数据;如果不在,则需要从磁盘读取数据并将其载入缓存区。

InnoDB的buffer pool采用了多种策略来实现页面管理和淘汰,包括:

  • LRU算法:InnoDB的buffer pool使用了LRU(Least Recently Used,最近最少使用)算法来管理缓存区中的数据页。当缓存区已满时,会将最近最少使用的数据页淘汰出缓存区,腾出空间给新的数据页。

  • 脏页管理:InnoDB的buffer pool也支持脏页(Dirty Pages)管理,即将已修改但尚未持久化到磁盘的数据页标记为脏页。当需要淘汰一个数据页时,如果该页是脏页,InnoDB会先将其持久化到磁盘,然后再从缓存区中淘汰该页。

  • Flush链表:InnoDB使用Flush链表来管理缓存区中的脏页。当一个数据页被修改时,InnoDB会将其添加到Flush链表中。当需要将脏页持久化到磁盘时,InnoDB会遍历Flush链表,并将其中的脏页持久化到磁盘。

  • Checkpoint:InnoDB的buffer pool还支持Checkpoint机制,即定期将所有的脏页持久化到磁盘。Checkpoint可以避免在数据库崩溃时需要执行大量的恢复操作。

通过以上策略的组合,InnoDB的buffer pool能够高效地管理和淘汰数据页,提高数据库读写性能和可靠性。

InnoDB 的 B+ Tree 是怎么实现的:

  1. InnoDB是一种支持事务和并发控制的存储引擎,它采用了B+ Tree索引结构来实现数据的存储和查找。下面是InnoDB的B+ Tree索引结构的实现方式:

  2. B+ Tree节点结构:InnoDB的B+ Tree节点结构包括一个节点头和一组键值对。节点头包含了节点类型、父节点指针、下一个兄弟节点指针等信息。键值对包含了索引键和对应的数据页指针。

  3. 索引页的组织方式:InnoDB将索引数据分散到不同的页中,每个页大小默认为16KB。每个页中存储的键值对数量取决于键值对大小。InnoDB支持自适应哈希索引,如果发现数据页中的键值对非常稀疏,可以使用哈希索引来提高访问效率。

  4. B+ Tree的遍历方式:InnoDB的B+ Tree使用深度优先遍历的方式查找数据。通过节点头中的指针,可以方便地在树中向上、向下、向左、向右移动。

  5. B+ Tree的维护:InnoDB的B+ Tree使用了多种技术来维护树的平衡,如自动重建(Automatic Rebuilding)、自动调整(Automatic Adjustment)等。自动重建是指当B+ Tree索引的平衡因为插入或删除操作而被破坏时,InnoDB会在后台自动重建索引以恢复平衡;自动调整是指当某个叶子节点的空间利用率低于阈值时,InnoDB会自动调整叶子节点的大小以提高空间利用率。

综上所述,InnoDB的B+ Tree索引结构通过节点结构、索引页组织方式、遍历方式和维护机制等多种技术实现了高效的数据存储和查找。