innodb缓冲层

Innodb缓冲层

Buf_pool:数据库所有操作都会在该缓冲层实现

为了实现buf_pool的动态调整,引入chunk

Chunk:主要包括多个控制内存块的block

Block:由pageframe构成

Page:磁盘上的数据文件,通过spaceoffset对应到硬盘上的数据库文件

压缩page-->frame

未压缩 page-->page.zip

Free_list空闲链块表

LRU_list:基于LRU的缓冲池调度列表

Flush_List:当LRU列表中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页数据产生了不一致。这时候数据库会通过checkpoint机制将脏页刷新回磁盘,而Flush列表中的页即为脏页列表。注意脏页也存在于lru列表中



核心源码:

buf0bufbuffer系统核心代码,提供磁盘与内存的交互

Buf0flu:数据写入到磁盘

Buf0rea:读取磁盘数据到内存

Buff_buddy.c:二进制伙伴分配,分配压缩内存块时使用,避免出现内碎片

 

核心数据结构:

innodb_buffer_pool{

buffer_pool->free;//空闲链块表

buf_pool->flush_list;//待写入磁盘链块表

buf_pool->LRU;//LRU链块表

buf_pool->unzip_LRU;//解压的LRU链块表

buf_pool->zip_clear;//干净的压缩链块表

buf_pool->zip_free[BUF_BUDDY_SIZE];//空闲的压缩链块表

}



猜你喜欢

转载自blog.csdn.net/y734564892/article/details/79545815