mysql内核源代码深度解析 缓冲池 buffer pool 整体概述(bufferpool部分一)

老刘原创文章,CSDN首发!转载请注明出处。


mysql的内存管理庞大而先进,这在mem0pool.c文件的开头注释中都有说明,粗略的可以分成四部分,包含9大块:

buffer pool,

parsed andoptimized SQL statements,

data dictionarycache,

log buffer,

locks for eachtransaction,

hash table forthe adaptive index,

state andbuffers for each SQL query currently being executed,

session foreach user, and

stack for eachOS thread.

9大块通过4部分进行管理

A solution tothe memory management:

 

1. the bufferpool size is set separately;

2. log buffersize is set separately;

3. the commonpool size for all the other entries, except 8, is set separately.

也就是缓冲池,redo日志缓冲,普通池和8(用户session信息,可看做一部分)

redo日志缓冲由redo部分单独管理,bufferpool也就是缓冲池是一个复杂的部分,内容很多,普通池上面说了,除了8,和1,2.其余的都归它管。上面这个结构就是mysql内存子系统的完整图景。如图所示:


本篇从缓冲池(buf pool)讲起,然后会讲解common pool和插入缓存。


在做完整、全面而详细的缓冲池构架分析之前,必须先要穷举所涉及到的全部bufpool子系统组件和重点,内容非常之多。

(1)Buf pool五大组成模块

首先,bufpool子系统可以分成最基本的五个模块组件。


缓冲池例程常规管理(buffer pool routines),进行buf pool(多)实例管理,协调另外四模块进行运行,对存储、事务、redo日志、系统主线程等外部子系统等提供调用函数接口,是五个模块的核心。

LRU链表管理(LRU replacement algorithm),buf pool中基础控制存储单元(下文即将详细介绍)如buf_block_struct和buf_page_struct,都需要在对应的非压缩与压缩LRU链表中进行管理,从设计思想上需要实现加入LRU链表节点、删除LRU链表节点两个基本点,进而需要实现分配块、释放块两个高级功能,由此衍生出15个可以被外部模块调用的重要主函数;另外,虽然不为外部接口调用,但与主函数关联的仍旧有1

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值