基本架构图
BuffPool
作用: 缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用
牵扯的基本概念
数据页
在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。(确切的说是InnoDB数据页大小16KB)
free链表
free链表就是存储的空闲缓存页的描述数据块的地址。它是一个双向链表,数据库刚启动的时候所有的缓存页都是空的,他们的描述数据都在free链表中。当需要将磁盘的数据页加载到缓存页时,就会在free链表中找到一个缓存页记录数据并写入描述数据,然后将其从free链表中去除。
缓存数据页的哈希表
执行sql的时候,先看用到的数据页有没有被缓存,如果已经被缓存就可以直接用了,那就需要知道哪些是已被缓存的。数据库里有一个哈希表数据结构,以表空间号+数据页号作为key,缓存页的地址作为value。当需要使用一个数据页的时候拿