Mysql存储引擎——InnoDB内存结构
InnodB存储引擎在内存中 主要由: LogBuffer、ChangeBuffer、BufferPool三个缓冲池以及Adaptive Hash Index自适应哈希索引构成。
1. 首先介绍下什么是BufferPool?
BufferPool是属于InnoDB引擎针对用户的增删改查而产生的一个内存操作缓冲池,它里面的存储单位对应的是一个一个page页对象,跟磁盘上的存储page一一对应。
page又分为:
free page: 未被使用的缓存页
clean page: 被使用过得page,但数据没有更改
dirty page: 脏页,被使用过并且数据被修改过的page,页中的数据与磁盘上的数据不一致
针对上述三种page类型,InnoDB通过三种链表结构来维护和管理
free list: 表示空闲的缓冲区,管理的是free page
flush list: 表示需要刷新到磁盘的缓冲区,管理dirty page,内部的page是按它的修改时间排序,越早的越先刷盘,最新修改的在flush list列表的头部,最早修改的在尾部, 先从尾部开始刷盘
lru list: 表示正在使用的缓冲区,管理clean page和dirty page,缓冲区