Innodb缓冲层
Buf_pool:数据库所有操作都会在该缓冲层实现
为了实现buf_pool的动态调整,引入chunk
Chunk:主要包括多个控制内存块的block
Block:由page和frame构成
Page:磁盘上的数据文件,通过space和 offset对应到硬盘上的数据库文件
压缩page-->frame
未压缩 page-->page.zip
Free_list:空闲链块表
LRU_list:基于LRU的缓冲池调度列表
Flush_List:当LRU列表中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页数据产生了不一致。这时候数据库会通过checkpoint机制将脏页刷新回磁盘,而Flush列表中的页即为脏页列表。注意脏页也存在于lru列表中
核心源码:
buf0buf:buffer系统核心代码,提供磁盘与内存的交互
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];//空闲的压缩链块表
}