MySQL数据页访问流程

数据页访问流程

1)当访问的页面在缓冲池中命中,直接返回该页。为了避免扫描LRU,innodb为每个instances维护了一个page hash,通过space id (表空间id)和 page no(当前页) 可以直接找到对应的page。一般情况下,当你需要读入一个page时,首先找到对应的instances,然后再查询 page hash,如果page hash 中没有,则需要从磁盘中读取;

2)如果没有命中,则需要把页面从磁盘加载到缓存,因此需要在缓存中找一个空闲的内存块来缓存这个页面;

3)如果空闲的内存块被使用完,也就是free 链表上没有内存块了。则需要在生产一个空闲的内存块;

4)首先去LRU列表中找到可以替换的内存页面,查找的方向时从尾部开始,如果找到可以替换的页面,将其从LRU列表摘除,加入空闲列表,然后再去空闲列表中找到空闲的内存块;

5)如果在LRU中没有找到可替换的页,则进行单页刷新,将脏页刷新到磁盘之后,再将释放的内存块加入到空闲列表,然后再去空闲列表去取。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页