了解mysql脏页落盘过程
脏页落盘
什么是脏页?
对数据的修改,首先改内存中的缓冲池的页,由于缓冲池的数据跟磁盘中的数据不一致,所以称缓冲池的页为脏页。
脏页如何写入到磁盘?
不是每次更新都触发脏页落盘,而是通过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脏页落盘过程相关推荐
- MySQL脏页刷盘流程
1. 什么是脏页 InnoDB更新语句,是先查询到指定记录到内存缓冲区,然后更新内存缓冲区数据,再写redo log.并不会立即将数据页刷新到磁盘上.这样就会导致内存数据页和磁盘数据页的数据不一致的情 ...
- Mysql - 脏页刷新机制
什么是脏页? Mysql InnoDB表基本都是基于B+树索引进行存储的,而数据存储的最小单元就是数据页(物理存储结构:表 -> 表空间(和索引)-> 段 -> 区 -> 页 ...
- mysql刷脏页的原理_Mysql脏页flush及收缩表空间原理解析
mysql脏页 由于WAL机制,InnoDB在更新语句的时候,制作了写日志这一个磁盘操作,就是redo log,在内存写完redo log后,就返回给客户端, 即更新成功. 把内存里的数据写入磁盘的过 ...
- gridview databind 会导致页面刷新马_Innodb批量页面刷盘情况下的quot;两次写quot;
//Innodb批量页面刷盘情况下的"两次写"// 之前的文章中,我们介绍过innodb的两次写特性,这里给出链接: InnoDB的两次写特性 今天我们完善一下这部分的内容. 我们 ...
- MySQL索引页结构
1. 前言 「页」是InnoDB管理存储空间的基本单位,也是内存和磁盘交互的基本单位.也就是说,哪怕你需要1字节的数据,InnoDB也会读取整个页的数据,下次读取的数据如果恰巧也在这个页里,就能命中缓 ...
- 刷脏页策略linux,【随笔】Linux刷脏页
一.脏页的由来 前情摘要: 1. 在多级存储系统中,上一级高速设备会成为下一级低速设备的缓存.相较之内存,磁盘是一个低速设备,因此Linux中会通过一种叫"磁盘高速缓存"的软件机制 ...
- Redis缓存(二)缓存淘汰策略,脏数据/脏页,缓存污染
一.应该给Redis分配多少内存空间 八二原则:80%的请求都是访问数据库中同样的20%的数据(热点数据只占20%),所以一般给Redis分配15% - 30%数据总量的内存空间(只保存热点数据,冷数 ...
- postgresql源码学习(27)—— 事务日志⑦-日志落盘上层函数 XLogFlush
一. 预备知识 1. XLOG什么时候需要落盘 事务commit之前 log buffer被覆盖之前 后台进程定期落盘 2. 两个核心结构体 这两个结构体定义代码在xlog.c,它们在日志落盘过程中非 ...
- MySQL探秘(四):InnoDB的磁盘文件及落盘机制(持久性)
任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其他技术的关键技术,学习这些底层技术,就可以一通百通,让你很快的掌握其他技术.如何在磁盘上存储数据,如何使用日志文件保证数据不丢失以及如何 ...
- mysql 文件放网络盘_MySQL InnoDB的磁盘文件及落盘机制
任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其他技术的关键技术,学习这些底层技术,就可以一通百通,让你很快的掌握其他技术.如何在磁盘上存储数据,如何使用日志文件保证数据不丢失以及如何 ...
最新文章
- c++概念模型的官方解释
- ViewPage+Fragment的使用例子
- 22省份公务员考试开考,个别职位竞争比达2624:1
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- Mysql能删了重装吗_mysql卸载重新安装
- 【转载】javascript,声明变量和导入时,大括号的特殊用法
- 在linux中关于组的命令,linux 用户和组管理相关的命令
- 2021年老杨通信工程师中级互联网技术视频讲解
- Python使用random实现双色球、大乐透随机选号
- ECCV 2020 论文大盘点-语义分割篇
- 蒟蒻数据观二叉树(基础篇)
- 机器学习-泰坦尼克号幸存者预测
- 首款超声波指纹读取器面世:用声音解锁手机 或用于移动支付
- 消息中间件之二:kafka详解
- Windows 11中文官方版正版下载
- LVGL-gui_user.h
- 关于给汶川地震灾区捐款
- 谷歌收购七家科技公司 秘密打造机器人帝国
- 2013-2017:中国 CV(计算机视觉)公司恩仇录
- 汉仪字体mac版 v2014.7
热门文章
- 高校375个国家级精品课程
- python怎么重新运行_如何用python重新运行程序
- 怎么把flv格式转成mp4?
- linux team 模式,linux 聚合口 team libteam 简介
- Unity Fingers Gesture手势插件教程(新)
- peer之间的通信协议
- 判断域名 转向 php,ASP,PHP,一空间多域名根据域名判断转向地址程序代码
- VMware虚拟机中安装的系统共享主机无线网络的方法
- 快速在服务器上搭建Halo个人博客
- linux 安装mantis,在Ubuntu 18.04系统上安装Mantis Bug Tracker[MantisBT]