1. 什么是脏页

  • InnoDB更新语句,是先查询到指定记录到内存缓冲区,然后更新内存缓冲区数据,再写redo log。并不会立即将数据页刷新到磁盘上。这样就会导致内存数据页和磁盘数据页的数据不一致的情况。这种数据不一致的数据页成为脏页。当脏页写入到磁盘后(flush),数据一致性后称为干净页

2. 关于Innodb刷盘的策略

  • 对于数据更新操作,存储引擎会将数据页先加载到内存缓冲池,然后修改内存中该数据页的内容。这样就会产生脏页,脏页需要刷新到磁盘才能保证对数据表的更新被持久化。
  • 但是如果更新一条记录就需要将一个页刷盘一次,则这个开销就有点太大。太多次IO操作非常影响性能。
  • 所以存储引擎对于内存数据页的修改,不是一有修改就会刷盘,而是达到一定的阈值才会去刷盘。那么就会产生一个问题,如果此时数据库宕机了,则内存的的脏数据页会没有完成刷盘就丢失了。这样就会导致有些更新被丢失了。
  • 因此InnoDB存储引擎引入了redo日志,在数据库对内存数据页的更新后会先将更新日志写入redo日志的内存缓冲区中,当redo日志的内存缓冲区中的日志写入redo日志的磁盘文件上,就表示这个操作完成了持久化。然后存储引擎在合适的时间再将数据脏页刷回磁盘。
    • 可能你会问,redo日志的内存缓冲区中的日志写入redo日志的磁盘文件上,也是需要IO啊,为什么不直接将数据页写入磁盘呢?
    • 因为redo日志写入磁盘文件这个过程时顺序存储的(在磁盘文件的尾部追加即可)。而IO刷盘是随机存储的(需要寻找刷新的磁盘位置)。所以redo日志写入磁盘的速度远远快于数据的刷盘。

3. 什么时候会flush脏页

  1. 磁盘上的redo log日志文件写满时:redo log大小固定,写完后会循环覆盖写入,写满后当有新内容要写入时,系统必须停止所有的更新操作,将checkpoint向前推进到新的位置,但是在推进之前必须将覆盖部分的所有脏页都flush到磁盘上
  2. 内存不足需要淘汰数据页。如果淘汰的是脏页,则需要将这些脏页刷盘。
  3. 系统空闲的时候后台会定期flush适量的脏页到磁盘。
  4. MySQL正常关闭时,会把所有脏页都flush到磁盘。

4. flush对系统性能的影响

  • 前两种会造成系统新能问题。第三种系统空闲所有不会有性能问题。第四种要关闭自然也不用考虑性能问题。

MySQL脏页刷盘流程相关推荐

  1. Mysql - 脏页刷新机制

    什么是脏页? Mysql InnoDB表基本都是基于B+树索引进行存储的,而数据存储的最小单元就是数据页(物理存储结构:表 -> 表空间(和索引)-> 段 -> 区 -> 页 ...

  2. RocketMQ刷盘流程

    前言 这里推荐两个看源码较好用的快捷键,可以提高源码阅读效率(win10系统): 1. ctrl + alt + h:查看方法的调用链 2. ctrl + h:查看类的继承关系和接口实现关系 简介 消 ...

  3. 刷脏页策略linux,【随笔】Linux刷脏页

    一.脏页的由来 前情摘要: 1. 在多级存储系统中,上一级高速设备会成为下一级低速设备的缓存.相较之内存,磁盘是一个低速设备,因此Linux中会通过一种叫"磁盘高速缓存"的软件机制 ...

  4. MySQL索引页结构

    1. 前言 「页」是InnoDB管理存储空间的基本单位,也是内存和磁盘交互的基本单位.也就是说,哪怕你需要1字节的数据,InnoDB也会读取整个页的数据,下次读取的数据如果恰巧也在这个页里,就能命中缓 ...

  5. mysql刷脏页的原理_Mysql脏页flush及收缩表空间原理解析

    mysql脏页 由于WAL机制,InnoDB在更新语句的时候,制作了写日志这一个磁盘操作,就是redo log,在内存写完redo log后,就返回给客户端, 即更新成功. 把内存里的数据写入磁盘的过 ...

  6. 《MySQL实战45讲》——学习笔记12 “InnoDB刷脏页的控制策略“

    本篇介绍MYSQL InnoDB的WAL机制带来的小问题--利用WAL技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,但也带来了内存脏页的问题: 脏页会被后台线程自动flush,也会由于数 ...

  7. MySQL数据和日志的刷盘机制以及双一配置

    详细介绍了MySQL数据和日志的刷盘机制以及双一配置,双一配置可以保证Mysql日志数据不丢失. 文章目录 1 内存数据的刷盘机制 2 MySQL数据的刷盘 2.1 刷盘数据来源 2.2 脏页以及刷盘 ...

  8. gridview databind 会导致页面刷新马_Innodb批量页面刷盘情况下的quot;两次写quot;

    //Innodb批量页面刷盘情况下的"两次写"// 之前的文章中,我们介绍过innodb的两次写特性,这里给出链接: InnoDB的两次写特性 今天我们完善一下这部分的内容. 我们 ...

  9. Redis缓存(二)缓存淘汰策略,脏数据/脏页,缓存污染

    一.应该给Redis分配多少内存空间 八二原则:80%的请求都是访问数据库中同样的20%的数据(热点数据只占20%),所以一般给Redis分配15% - 30%数据总量的内存空间(只保存热点数据,冷数 ...

最新文章

  1. Windows下创建进程简介
  2. vue里获取不到data_vue methods中取不到data值
  3. Ubuntu下安装realtek的rtl8188eu网卡芯片驱动
  4. 华为面试题之大整数相加
  5. TabHost选项卡的 功能和用法
  6. 动态连接库的两种方式
  7. 关于 sql语句的一些小优化
  8. SSD磁盘测试不达标排查
  9. mongodb 系列 ~ mongo的两种引擎对比
  10. rsync同步目录及同步文件
  11. 御剑端口扫描工具2020下载
  12. Servlet 身份验证体系结构
  13. AlphaFold2: Highly accurate protein structure prediction with AlphaFold笔记
  14. matlab的死区环节,基于SIMULINK对非线性系统死区环节进行仿真
  15. vue element-ui 日期弹出框右侧被遮挡
  16. 北理计算机实验18,18北理应用统计经验贴
  17. 关于抽象类的实验(java 内部类、多态等练习)
  18. FFmpeg--一个操作视频音频的强大工具
  19. Spring容器 SpringMVC容器 web容器的关系
  20. 在 Flutter 中使用 TensorFlow Lite 插件实现文字分类

热门文章

  1. 四.自定义View MeasureSpec
  2. 中国移动深、广小心拍卖4G
  3. Matlab-plot_part1
  4. FL Studio录制面板使用教程
  5. SQL Prompt——SQL智能提示插件
  6. 区块链入门文章二《以太坊:下一代智能合约和去中心化应用平台》
  7. 空心线圈绕线机发展方向
  8. 神经网络中的Dropout
  9. 面试官到底想看什么样的简历?三分钟教你拿下面试机会
  10. 百度前端实战训练营第四弹