mysql脏页是什么


Posted in MySQL onJuly 26, 2021

脏页(内存页)

干净页:内存和磁盘中的数据一致
脏页:内存和磁盘中的数据不一致

为什么会出现 脏页

平时很快的更新操作,都是在写内存和日志。
他并不会马上同步到磁盘数据页,这时内存数据页跟磁盘数据页内容不一致,我们称之为脏页。
这里面就涉及 mysql 的内存管理机制

内存管理机制简述

缓冲区中包含这三大类列表。分别为:LRUList、FreeList、FlushList。
在数据库刚启动时,LRUlist中没有数据页。FreeList存放空闲页。

  • 当需要读取某个页时,会从FreeList中获取一个空闲页,读入数据后,放入LRUlist中
  • 如果FreeList中没有空闲页了,那么根据LRU算法淘汰Lru列表中末位的页
  • 当LRUlist中的页被修改后,页就变成了脏页,这个页也会被加入FlushList中

注意:这时这个页既在LRUlist中,又在FlushList中。

总结:LRUList(管理已经被读取的页)和FreeList(管理空闲的页)用来管理页的可用性;FlushList(管理脏页)用来管理脏页的刷新

在脏页数据同步到磁盘过程中,如果对该磁盘数据页执行 SQL 语句。执行速度就会变慢

数据修改和读取只依赖缓冲区行不行

如果数据修改和读取只依赖内存的缓冲区,那么一旦数据库宕机,内存中的数据都会丢失。所以MySQL使用之前讲过的redo log来实现异常重启的数据恢复.

简单来说,就是在更新缓冲区之前,先写入redo log,保证异常重启之后可以正常恢复缓冲区中的数据。

为什么脏页一定要刷新

  • 上面说了 数据只放在缓冲区,会出现数据库宕机,内存数据丢失。所以需要刷新到磁盘。
  • redo log如果无限大或者有许多个文件的话,系统中有大量的修改操作,一旦宕机,恢复的时间也会非常长。

所以自然而然,我们就一定需要把内存中的脏页按照某种规则刷新到磁盘中,有了刷新这个操作,缓冲区的大小问题和redo log的大小问题都可以解决。

  • 缓冲区不需要无限大了,因为可以持久化到磁盘
  • redo log也不需要无限大了,因为一旦持久化到磁盘,redo log中对应的那部分数据就可以释放。

刷脏页有下面4种场景

  • 当 redo log 写满,mysql就会暂停所有更新操作,将同步这部分日志对应的脏页同步到磁盘。
  • 系统内存不足时,需要淘汰一部分数据页,如果淘汰的是脏页,就要先将脏页同步到磁盘。
  • MySQL 认为系统空闲的时候,有机会就同步内存数据到磁盘,这种没有性能问题。
  • MySQL 正常关闭,MySQL 会把内存的脏页都同步到磁盘上,这样下次 MySQL 启动的时候,就可以直接从磁盘上读数据,启动速度会很快。这种没有性能问题。

会造成的影响

1 如果是 redo log 写满了
要尽量避免redo log 写满。否则整个系统的更新都会停止。此时写的性能变为 0,必须等待该日志对应脏页同步完成后才能更新,这时就会导致 sql 语句 执行的很慢。

 到此这篇关于mysql脏页是什么的文章就介绍到这了,更多相关mysql脏页内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
MySQL开启事务的方式
Jun 26 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
MySQL批量更新不同表中的数据
May 11 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 MySQL
一文解答什么是MySQL的回表
Aug 05 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 #MySQL
MySQL深度分页(千万级数据量如何快速分页)
ORM模型框架操作mysql数据库的方法
mysql 直接拷贝data 目录下文件还原数据的实现
MySQL索引是啥?不懂就问
MySQL 四种连接和多表查询详解
MySQL 聚合函数排序
You might like
PHP+javascript模拟Matrix画面
2006/10/09 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php链表用法实例分析
2015/07/09 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
浅谈js原生拖放
2016/11/21 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python笔记:mysql、redis操作方法
2017/06/28 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
临床医学应届生求职信
2013/11/06 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
元旦联欢会感言
2014/03/04 职场文书
关于环保的宣传稿
2015/07/23 职场文书
学子宴致辞大全
2015/07/27 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
golang 实现时间戳和时间的转化
2021/05/07 Golang