ITPub博客

首页 > 数据库 > MySQL > 【Mysql】读书笔记之--innodb_buffer_pool内存的管理

【Mysql】读书笔记之--innodb_buffer_pool内存的管理

原创 MySQL 作者:小亮520cl 时间:2017-03-09 16:48:42 0 删除 编辑
读书内容:技术内幕第二章

1.内存与磁盘

基本流程图如下:
  1. 在数据库中进行读取页的操作时,首先将磁盘读取到的页放入缓冲池中,这个过程称之为FIX页到缓冲池,下次再读取到相同的页时,先判断是否在缓冲池中,如果在则直接从缓冲池读取,如果不在则循环FIX的过程
  2. 在数据库中进行修改页的操作时,首先修改缓冲池中的页,然后再以一定的频率刷新到磁盘(checkpoint的刷新机制)



2.LRU列表

lru列表用来管理bf已读取到的页
  1. 读取到的新页,放入到LRU列表的midpoint位置,处于lru列表的5/8处,而不是直接放入头部,midpoint之前称之为new列表,即热数据区,之后称之为old列表,即是非热数据区


  2. 为什么不直接放入LRU列表的头部呢?
  3. 如果直接放入头部,某些sql如:(select * from 大表 )可能会使一些热数据刷出lru列表,下次读的时候又要从磁盘刷新到缓冲池!从而影响缓冲池的效率!为了解决这个问题,引入另一个参数innodb_old_blocks_time来管理LRu列表,
  4. 这个参数表示,页读取到midpoint位置之后还需要等待多久才会被加入到LRU列表的热端!

 

3.Free列表

Free列表管理bf未操作过的页
  1. 数据库刚启动时,LRU列表是空的,这时页都是存放在free列表中的,当需要读取新的页时,首先从free列表查找是否有可用的空闲页,有就从free列表删除,迁移至LRu列表。如果free列表没有可用的空闲页,则根据LRU算法,淘汰列表末尾的页,将内存分配给新的页。
  2. old页加入到new页我们就称之为page made young



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29096438/viewspace-2135018/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
毕业以后专业任职数据库工程师职位,itpub一直作为自己的笔记记录的地方,blog写的不详细,草书笔记,仅供参考!

注册时间:2013-09-12

  • 博文量
    529
  • 访问量
    1126951