文章目录

  • 缓冲池
    • 缓冲池中的三种链
  • CheckPoint技术

缓冲池

虽然InnoDB是基于磁盘存储的,但是由于CPU和磁盘速度的巨大鸿沟,所以对于数据库中的页的修改操作,首先会修改在缓冲池中的页,然后再以一定频率刷新到磁盘上。
具体来看,在缓冲池中占主要(大部分)的是索引页和数据页,但缓冲池还会包含undo页、插入缓冲、自适应哈希索引、InnoDB存储的锁信息、数据字典信息等。

从InnoDB 1.x开始,允许有多个缓冲池实例(默认值为1),每个页根据哈希值被平均分配到不同的缓冲池实例中,减少数据库内部的资源竞争,增加数据库并发处理能力。

缓冲池管理策略:

  • LRU
    最频繁使用的在列表的最前端,当缓冲池不能存放新读到的页的时候,首先会释放尾端的页。
    不过InnoDB对LRU做了改进,新加入的页不会直接放到最前端,而是会放到midpoint(默认值为5/8)的位置;并且新加入的页会经历innodb_old_blocks_time才会被加入到LRU的热端。

redo log buffer在之前已经说的很清楚了,为了保证数据不丢失,一般会进行双1设置,参考:高性能Mysql——InnoDB事务是如何通过日志来实现的?。

缓冲池中的三种链

缓冲池的页管理使用三种链完成

  • LRU List(用于找到冷端的页)
  • Free List(用于找到可用的页)
  • Flush List(用于找到最早脏页)
  1. 启动时,页数守恒
    当数据库刚刚启动的时候,LRU List是空的,即没有任何的页;这时候,页都存在于Free List中。当需要从缓冲池中分页的时候,首先会从Free List中查找是否有可用的空闲页,若有则从Free List中删除,放入到LRU的列表中;否则会根据LRU算法做淘汰,并且将淘汰页的内存分配给新的页。

  2. 修改时,回刷脏页
    在LRU List中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页的数据产生了不一致。这时数据库会通过CHECKPOINT机制将脏页刷新回磁盘而Flush List中的页即为脏页列表

CheckPoint技术

倘若每一次页发生变化,就将脏页回刷到磁盘,这样的开销是非常大的,若热点数据集中在某几页上,这样数据库的性能也会很差。同时,如果回刷的过程中发生了宕机,那么数据就不可恢复了,为了避免这种情况发生,会使用Write Ahead Log策略,也就是使用redo log先做重写日志,再刷盘。

保证数据的持久化,不能完全依赖于重做日志。因为,重做日志是不能无限增大的,考虑如下的场景:当一个数据库运行了好几个月,这时候发生了当即,那么使用重做日志做数据的重启时间会非常久,代价也会非常大(热启动代价)。

因此,CheckPoint技术是为了解决一下几点:

  • 缩短数据库恢复的时间(冷启动)
  • 缓冲池不够用的时候,将脏页回刷
  • 重做日志不可用的时候,将脏页回刷

当数据库宕机后,此时只需要重做CheckPoint之后的语句即可。

CheckPointer分类:

  • sharp checkpoint:完全检查点,数据库正常关闭时,会触发把所有的脏页都写入到磁盘上。
  • fuzzy checkpoint:模糊检查点,部分页写入磁盘。

在数据库在运行时不会使用sharp checkpoint,在引擎内部使用fuzzy checkpoint,即只刷新一部分脏页,而不是刷新所有的脏页回磁盘。所以CheckPoint触发的时机,也就是Fuzzy Checkpoint触发的时机

  1. master thread checkpoint
    差不多以每秒或每十秒的速度从缓冲池的脏页列表中刷新一定比例的页回磁盘,这个过程是异步的,不会阻塞用户查询。
  2. flush_lru_list checkpoint
    MySQL会保证LRU List里面有差不多100个空闲页。如果没有100个可用空闲页,那么innodbhi将lru list尾端的页移除,如果这些页中有脏页,那么需要进行checkpoint。
  3. async/sync flush checkpoint
    重做日志不可用时(满了),会将一些页回刷。
  4. dirty page too much checkpoint
    脏页太多,进行回刷,总的来说还是保证缓冲池有足够可用的页。

InnoDB存储引擎——缓冲池相关推荐

  1. MySQL内核:InnoDB存储引擎 卷1

    MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...

  2. MySQL的InnoDB存储引擎中,缓冲池中的Changer Buffer与系统表空间中的Changer Buffer的关系

    MySQL的InnoDB存储引擎中,缓冲池中和系统表空间中都存在Changer Buffer,那它们之间的关系是怎样的呢?先来一张InnoDB存储引擎的架构图: 翻阅了MySQL官网发现如下: 1.h ...

  3. Mysql技术内幕——InnoDB存储引擎

    一.mysql体系结构和存储引擎 1.1.数据库和实例的区别 数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据 ...

  4. linux mysql innodb_MySQL innoDB 存储引擎学习篇

    master thread的县城优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环(background loop).刷新循环(flush loop).暂停循环(suspen ...

  5. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

  6. InnoDB 存储引擎体系架构

    首先以一张图简单展示 InnoDB 的存储引擎的体系架构.从图中可见, InnoDB 存储引擎有多个内存块,这些内存块组成了一个大的内存池,主要负责如下工作: 维护所有进程/线程需要访问的多个内部数据 ...

  7. 诸葛io的技术架构图_【总结】MySQL技术内幕二:InnoDB存储引擎技术特性

    二.InnoDB存储引擎 InnoDB是事务安全的MySQL存储引擎,通常是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力. 从MySQL 5 ...

  8. mysql技术innodb存储引擎读后感_《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)...

    @(Mysql) 官方数据库 下载 导入/data/mysql57/bin/mysql --socket /data/mysql3306/mysql.socket -uroot -ppassword1 ...

  9. MySQL InnoDB存储引擎

    呵呵哒... MySQL体系结构和存储引擎 首先要搞懂的是什么是数据库,什么是数据库实例. 数据库:物理操作系统文件或其他形式文件类型的集合. 实例:MySQL数据库由后台线程以及一个共享内存区组成, ...

最新文章

  1. 树莓派python3.7_[Linux] 树莓派编译python3.7.4
  2. Spring @Configuration注解及配置方法
  3. 分数运算C++代码实现
  4. [Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]
  5. leetcode [78] Subsets
  6. 207 台服务器被种植木马,谁害死了“旧”乐视?
  7. 敏捷个人新体系学习 - 1.实践的艺术
  8. linux 删除已输入的命令
  9. ubuntu 安装、卸载重装mysql 8.0
  10. Java面试题及答案整理
  11. blender 51个必须熟练记住的基础操作
  12. 直播知识点实录|百度大脑EasyDL产业应用系列 安全生产专场
  13. Java-面向对象构造函数 -(private private)关键字
  14. C++基础用法—冒号的用法
  15. 使用HTML5+调用手机摄像头和相册
  16. Parsec测试基准程序在zynq板上测试
  17. js replace使用方法
  18. EasyExcel操作API与示例
  19. 2022数维杯问题 C:如何利用大脑结构特征和认知行为特征诊断阿尔茨海默病-多思路+代码分享
  20. 河南省计算机专业三本排名2015,河南三本大学排名【最新排行榜】

热门文章

  1. 信息科安全教育考试题-部门级安全教育
  2. 思博伦STC WiFi:一个全能的WiFi测试方案
  3. 计算机论文谢辞,毕业论文谢辞
  4. 2022-ISCC信息安全与对抗竞赛wp-misc(详解,有脚本( •̀ ω •́ )y)
  5. GripSeal格雷希尔G80系列内螺纹快速接头的使用方法 G80L-M10 M12
  6. 下一个十年,区块链将如何厚“基”薄发?
  7. 网页制作流程--(项目案例)学成在线
  8. 声音/声学成像2021-4-13
  9. linux移植嵌入式系统,嵌入式系统学习——S3C2451之Linux移植步骤
  10. 从前端Vue/Axios到后端交互--浅谈Vue生命周期、Ajax调用