目录

  • Buffer Pool回顾
  • Buffer Pool内部组成
  • freelist
  • flushlist
  • LRU链表管理以及改进

Buffer Pool回顾

我们知道针对数据库的增删改删操作都是在Buffer Pool中完成的,一条sql的执行步骤可以认为是这样的:

1、innodb存储引擎首先在缓冲池中查询有没有对应的数据,有就直接返回
2、如果不存在,则去磁盘进行加载,并加入缓冲池
3、同时该记录会被加上独占锁,防止多人修改,出现数据不一致

而且我们知道,可以通过设置my.cnf配置中的innodb_buffer_pool_size来修改缓冲池大小,加快sql查询速度,当然也需要注意设置过大会造成系统swap空间被占用,导致系统变慢降低查询性能。

Buffer Pool内部组成

缓冲池对应一片连续内存,我们将其划分为大小为16kb的页(与innodb对应),这些页称为缓冲页。
为了很好的管理这些页,设计者为每个缓冲页都创建了一些控制信息:表空间编号、页号、缓冲页在缓冲池中的地址、链表节点信息等。将每个页对应的控制信息占用的一块内存称为一个控制块。控制块与缓冲页一一对应,都存放在缓冲池中。
在Mysql启动时,会自己完成对缓冲池的初始化:向操作系统申请内存,自己划分成若干对控制块和缓冲页。

freelist

当我们从磁盘中load一个数据页到缓冲池中,我们应该放到哪个缓冲页中呢?
很显然我们应该把数据页放到“空闲”的缓冲页中。
设计者将所有空闲的缓冲页对应的控制块作为一个节点放到一个链表中,称为freelist。每次从freelist中取出一个空闲的缓冲页中,并且将该缓冲页对应的控制块信息填上,然后将该节点移除,表示缓冲页已经被使用了

flushlist

当一个控制块节点被从freelist中移除,说明该页已经被使用了。如果这种“使用操作”是对数据进行修改的话,那么必定需要将该页数据flush到磁盘上。但是每次修改一页就将那一页flush的话,磁盘IO占用率高。所以每次修改缓冲页后,将这些脏页控制块放入一个fulshlist上。当flush时机到了,就把flushlist节点对应的缓冲页刷新搭配磁盘上。

LRU链表管理以及改进

缓冲池内存有限,当freelist中没有多余的空闲缓冲页,就需要把某些旧的缓冲页从缓冲池中移除,然后把新的数据页放进来。为了提高内存命中率,使用LRU。
但是普通的LRU不能解决下面的问题;
1、加载到缓冲池的页不一定被用到(针对于预读)
2、如果有非常多的使用频率低的页被同时加载到缓冲池中,则可能会把那些使用频率非常高的页从缓冲池中淘汰。(针对全表扫描)
关于innodb对于LRU的改进见如链接:
MySQL——Innodb改进LRU算法
当然还有进一步的优化:
对于young区域的缓冲页,每次访问一个缓冲页就要把它移动到LRU链表的头部,开销比较大。毕竟,young区域的缓冲页都是热点数据。所以我们可以这样优化:只有被访问的缓冲页位于young区域1/4的后面时,才会被移动到LRU链表头部。也就是说我们将young的前0.25部分称为very young,very young里面的数据访问不会移动到头部,因为大家访问频率都是非常高的。
提醒一下,在LRUlist的节点不是freelist节点,可能是flushlist节点。不理解的话,再去上面看看两个list定义。
然而这一切的目的只有一个:尽量高效地提高缓冲池命中率。

《DBNotes: Buffer Pool对于缓冲页的链表式管理》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 找到一款牛B的vim插件
  2. pandas笔记:根据列索引名称/行索引名称 对列重新排序
  3. SQLite 性能优化
  4. centos 7新机使用前操作
  5. dedecms右侧悬浮_织梦dedecms网站上添加漂浮广告
  6. 中表名字必须大写吗_pi network改名字的重要性—非常之重要!!
  7. cressman插值_NCL自带常用插值函数集锦
  8. mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复
  9. 如何从Swift调用Objective-C代码?
  10. 洛谷 P1113 杂务
  11. zuc算法代码详解_ZUC算法原理及实现过程[共3页]
  12. IPC 38模组板图分析-雄迈IPG-50H10PE-SL-Hi3518E+OV9712
  13. python调用IP摄像头
  14. 前端工程师未来发展方向
  15. 如何申请注册微软邮箱(支持海外apple ID注册)亲测
  16. Java流(Stream)操作实例-筛选、映射、查找匹配
  17. 千锋培训的python
  18. 在电脑浏览器上怎样对一整个页面进行完整的截图?(整站截图)
  19. Hadoop Ha集群配置
  20. mysql 5.7 group replication 之五 [ERROR] Plugin group_replication reported: 'Table tmp_t0 does not hav

热门文章

  1. 粉丝提问:有没有人会做彩虹表
  2. CSRF的绕过与利用
  3. React 向children中传值,layouts
  4. Selenium1 Selenium2 WebDriver
  5. HttpServletRequest.getContextPath()取得的路径
  6. 元素属性的添加删除(原生js)
  7. 面向对象的数据存储方式
  8. CachedIntrospectionResults 初始化
  9. Codeforces Round #318 (Div. 2) B Bear and Three Musketeers (暴力)
  10. c#a服务器上传文件b服务器,C#_c#批量上传图片到服务器示例分享,客户端代码: 复制代码 代码 - phpStudy...