脏页落盘

什么是脏页?

对数据的修改,首先改内存中的缓冲池的页,由于缓冲池的数据跟磁盘中的数据不一致,所以称缓冲池的页为脏页

脏页如何写入到磁盘?

不是每次更新都触发脏页落盘,而是通过CheckPoint机制刷新磁盘。

InnoDB数据落盘流程(大概)

为什么性能好

  • 从流程中,可以看到,事务的操作全是在内存中进行,所以性能好。

如何持久化

  • 在修改缓冲区之前,所有操作先写入Log Buffer,提交事务之前持久化到Redio日志,后面通过CheckPoint机制,将脏页落盘。

如何保证数据安全

  • Write Ahead Log 策略(日志先行)。
  • Force Log at Commit机制(提交事务时,将日志写入到磁盘)。
  • CheckPoint机制。
  • 双写机制:脏页拷贝到双写缓冲区之后,持久化到对应系统表空间的位置,然后把脏页更新到独立表空间,最后清除Redo日志。

为什么不马上更新到磁盘?

  • 因为每次页的更新,都落盘的话,必将伴随4次磁盘IO,性能不会很高,随着写入操作的增加,性能指数下降。

如何确保日志安全进入磁盘?

  • 日志写入Log Buffer之后,调用fsync函数确保日志从缓存写入磁盘。

fsync的功能是确保文件fd所有已修改的内容已经正确同步到硬盘上,该调用会阻塞等待直到设备报告IO完成。

Redo日志落盘策略

写入磁盘时机由 innodb_flush_log_at_trx_commit 控制。

  • 0:每秒写入,跟事务无关,最多丢失1秒的的事务操作。
  • 1:事务提交时写入磁盘,不丢失数据,效率也是最低。
  • 2:事务提交,写入OS Buffer,间隔1秒写入,性能、安全性相比前两个居中。

CheckPoint机制

解决了什么问题

对缓冲池的操作,避免了直接修改磁盘,但是数据最终还是要写入到磁盘,通过此机制,不断将脏页落盘,这样可以减少Redo日志大小,在宕机的时候不用重做所有日志;
同时可以缓解缓冲池内存不够用的情况;
刷新脏页,还可以循环使用Redo日志,不会无限增大。

分类

sharp checkpoint:关闭数据库时,将缓冲池的脏页全部刷新到磁盘。
fuzzy checkpoint:数据库运行期间,选择不同时机将部分脏页写入磁盘。避免刷新全部带来的性能问题。

  • Master Thread Checkpoint:固定频率刷新部分脏页到磁盘,异步操作不会阻塞用户线程。
  • FLUSH_LRU_LIST Checkpoint:缓冲池淘汰非热点Page,如果该Page是脏页会执行CheckPoint。
  • Async/Sync Flush Checkpoint:redo日志不可用时,强制脏页落盘,有了前两个这种一般不会发生。
  • Dirty Page too much Checkpoint:脏页占比太多强制进行刷盘,阈值75%

Double Write机制

如果写入脏页时发生宕机怎么办法?
我们在修改更新Redo日志时,先将缓冲池的脏页拷贝到双写缓冲区,然后将数据顺序写到系统表空间的双写缓冲区,再离散写入独立表空间。这样,即使发生宕机,数据也能从系统表空间中恢复。
(顺序写的速度是很快的)

Redo日志只记录对页的修改而非数据本身。

从缓冲池复制到双写缓冲区 -> 顺序写入系统表空间 -> 离散写入独立表空间。

了解mysql脏页落盘过程相关推荐

  1. MySQL脏页刷盘流程

    1. 什么是脏页 InnoDB更新语句,是先查询到指定记录到内存缓冲区,然后更新内存缓冲区数据,再写redo log.并不会立即将数据页刷新到磁盘上.这样就会导致内存数据页和磁盘数据页的数据不一致的情 ...

  2. Mysql - 脏页刷新机制

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

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

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

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

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

  5. MySQL索引页结构

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

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

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

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

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

  8. postgresql源码学习(27)—— 事务日志⑦-日志落盘上层函数 XLogFlush

    一. 预备知识 1. XLOG什么时候需要落盘 事务commit之前 log buffer被覆盖之前 后台进程定期落盘 2. 两个核心结构体 这两个结构体定义代码在xlog.c,它们在日志落盘过程中非 ...

  9. MySQL探秘(四):InnoDB的磁盘文件及落盘机制(持久性)

    任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其他技术的关键技术,学习这些底层技术,就可以一通百通,让你很快的掌握其他技术.如何在磁盘上存储数据,如何使用日志文件保证数据不丢失以及如何 ...

  10. mysql 文件放网络盘_MySQL InnoDB的磁盘文件及落盘机制

    任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其他技术的关键技术,学习这些底层技术,就可以一通百通,让你很快的掌握其他技术.如何在磁盘上存储数据,如何使用日志文件保证数据不丢失以及如何 ...

最新文章

  1. c++概念模型的官方解释
  2. ViewPage+Fragment的使用例子
  3. 22省份公务员考试开考,个别职位竞争比达2624:1
  4. 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
  5. Mysql能删了重装吗_mysql卸载重新安装
  6. 【转载】javascript,声明变量和导入时,大括号的特殊用法
  7. 在linux中关于组的命令,linux 用户和组管理相关的命令
  8. 2021年老杨通信工程师中级互联网技术视频讲解
  9. Python使用random实现双色球、大乐透随机选号
  10. ECCV 2020 论文大盘点-语义分割篇
  11. 蒟蒻数据观二叉树(基础篇)
  12. 机器学习-泰坦尼克号幸存者预测
  13. 首款超声波指纹读取器面世:用声音解锁手机 或用于移动支付
  14. 消息中间件之二:kafka详解
  15. Windows 11中文官方版正版下载
  16. LVGL-gui_user.h
  17. 关于给汶川地震灾区捐款
  18. 谷歌收购七家科技公司 秘密打造机器人帝国
  19. 2013-2017:中国 CV(计算机视觉)公司恩仇录
  20. 汉仪字体mac版 v2014.7

热门文章

  1. 高校375个国家级精品课程
  2. python怎么重新运行_如何用python重新运行程序
  3. 怎么把flv格式转成mp4?
  4. linux team 模式,linux 聚合口 team libteam 简介
  5. Unity Fingers Gesture手势插件教程(新)
  6. peer之间的通信协议
  7. 判断域名 转向 php,ASP,PHP,一空间多域名根据域名判断转向地址程序代码
  8. VMware虚拟机中安装的系统共享主机无线网络的方法
  9. 快速在服务器上搭建Halo个人博客
  10. linux 安装mantis,在Ubuntu 18.04系统上安装Mantis Bug Tracker[MantisBT]