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];//空闲的压缩链块表

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值