innodb buffer_pool链表说明

buffer状态及其链表结构

page是 innodb磁盘 i/o的最小单位,数据是存放在page中的,那么对应到内存中就是一个个的buffer,每个buffer又分为三种状态。

free buffer:此状态下的buffer从未被使用,像一张白纸,但是在实际生产中,数据库很繁忙的情况下,freebuffer的状态基本是不存在的。

clean buffer:内存中的buffer里面的数据和磁盘page的数据一致。

dirty buffer:内存中新写入的数据还没有刷新到磁盘,跟磁盘中数据不一致。

buffer 在内存中是需要被组织起来的,有chain来管理,也就是链,innodb是双向链表结构,由三种不同的buffer状态衍生出了三条链表。

free list:把那些free状态的buffer都串联起来,在数据库真正跑起来的时候,每次把page调到内存中都会先判断free buffer的使用情况,
不过不够用了,就会从lru list和flush list链表中释放freebuffer,以获得新的空闲buffer.

lru list:lru list会把那些与磁盘树一致,并且最近最少被使用的buffer串联起来,释放出free buffer,page调到内存中便于使用新的可用buffer。

flush list:把那些dirty buffer串联起来,为了方便刷新线程把脏数据刷到磁盘。推进checkpoint lsn,使实例崩溃之后可以快速恢复。

你可能感兴趣的:(innodb buffer_pool链表说明)