buffer pool
sql 执行的时候,不管是select 还是update 都会把数据页 读取到buffer pool里面
buffer pool 其实是一个大的数组(默认128M)
buffer pool 操作(重点)
-
buffer pool里面的数组 并不是连续的(读进来被回收的时间点不一样造成的)
所以就需要一个free链表 来管理 这些空白的节点
基节点 是不动的 包含<下个节点位置、尾节点位置、链表长度>
后续的都是链表节点都是控制块(记录空白页的指针位置) 对空白页进行动态维护(链表的插入和删除操作速度很快) -
当执行update 语句的时候先会修改到buffer pool 内的数据,并把修改的那一页标识为脏页 (后台会有线程会定时操作把脏页刷到磁盘里面)
所以会需要一个flush链表来记录脏页的记录,flush链表数据结构跟free链表基本一致。 -
当buffer pool 刷满了之后,再来执行sql的时候,需要淘汰一部分数据(最近最少的数据页)所以需要一个