1. 脏页,干净页 

  当内存数据页和磁盘数据页上的内容不一致时,我们称这个内存页为脏页;

  内存数据写入磁盘后,内存页上的数据和磁盘页上的数据就一致了,我们称这个内存页为干净页

2. 刷脏页的时机

2.1 redo log

  redo  log 是循环写的,当redo log 写满了,即 write pos 追上了  checkpoint 时,此时没有空间记录 redo log,就需要将 checkpoint 向前推进,推进的这部分日志对应的脏页就需要刷入磁盘。

  此时所有的更新全部阻塞,此时写性能跌为0,必须等待刷一部分脏页后才能继续更新,这种情况要尽量避免;

2.2 系统内存

  当系统内存不足时,就需要将一部分数据页淘汰掉,如果淘汰的是脏页,就需要先将脏页刷入磁盘。

  当淘汰的脏页过多时,会导致查询的响应时间变长;

2.3 MySQL认为空闲的时间

  不存在性能问题;

2.4 MySQL正常关闭之前,会把内存中所有的脏页刷入磁盘

  不存在性能问题;

3. 刷脏页的控制策略

3.1 正确服务器的IO能力

  innodb_io_capacity参数表示机器的磁盘能力,根据机器能力合理设置该参数的值;

3.2 刷脏页的速度

  InnoDB的刷盘速度主要参考两个参数:脏页比例和redo log 的写盘速度;

  innodb_max_dirty_pages_pct是脏页比例上限,默认值为75%;

  InnoDB根据当前的脏页比例算出一个值M1;

  InnoDB每次写入redo log 有一个序号,根据当前序号和checkpoint之间的差值算出一个值M2;

  之后引擎取M1和M2之间(M1和M2都是0-100之间的数)的较大值除以100乘以innodb_io_capacity,这就是刷脏页的速度;

3.3 刷脏页机制

  当一个查询请求执行过程中需要先flush一个脏页时,如果脏页的旁边也是脏页,此时引擎会将相邻的脏页也刷掉,直到下一个数据页不是脏页为止;

  该机制通过参数 innodb_innodb_flush_neighbors 控制,值为0时表示只刷自己,值为1时则有连坐效果;

  

MySQL:刷脏页的更多相关文章

  1. 【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动

    开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么. 因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的.当我们在内存中写入了 redolog 之后 ...

  2. Mysql的刷脏页问题

    平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...

  3. Innodb刷脏页技术深度挖掘

    DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...

  4. InnoDB Redo Flush及脏页刷新机制深入分析

    概要: 我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓 ...

  5. MySQL中InnoDB脏页刷新机制Checkpoint

    我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中 ...

  6. 面试题:了解MySQL的Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)

    Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)" 本文是MySQL专题的第 8 篇,共110篇 ...

  7. MySQL中读页缓冲区buffer pool

    Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理.我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其缓存起来,所以MyS ...

  8. redis存在大量脏页问题的追查记录

    from:https://www.zybuluo.com/SailorXiao/note/136014 case现场 线上发现一台机器内存负载很重,top后发现一个redis进程占了大量的内存,TOP ...

  9. Checkpoint--查看各DB上的脏页

    可以使用sys.dm_os_buffer_descriptors来看数据页在buffer pool中的状态,其中is_modified来标示数据页是否为脏页 --------------------- ...

随机推荐

  1. Maven [ERROR] 不再支持源选项 5。请使用 6 或更高版本

    报错信息如下 解决办法一 在settings.xml文件中指定jdk版本 既可以修改全局的settings.xml文件(C:\Program Files\apache-maven-3.6.0\conf ...

  2. 服务管理之httpd

    目录 1. httpd简介 2. httpd版本 2.2 httpd-2.4新增的模块 3. httpd基础 3.1 httpd自带的工具程序 3.2 rpm包安装的httpd程序环境 3.3 web ...

  3. bittorrent 学习(二) LOG日志和peer管理连接

    代码中的log.h log.c比较简单 void logcmd() 记录命令  int logfile();运行日志的记录 int init_logfile() 开启log文件 源码比较清晰也很简单. ...

  4. CentOS7安装特定版本的Docker

    查询可用版本 [root@bogon ~]# yum list docker-ce --showduplicates | sort -r 查询结果 * updates: centos.ustc.edu ...

  5. Linux学习--gdb调试

    一.gdb常用命令: 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或 ...

  6. 《Linux就该这么学》第十一天课程

     防火墙常用的一些命令参数 原创地址:https://www.linuxprobe.com/chapter-08.html firewalld中常用的区域名称及策略规则 区域 默认规则策略 trust ...

  7. Parsing error was found in mapping #{}. Check syntax #{property|(expression), var1=value1, var2=val错误

    xml中有一个语法错误,整个都错了, 虽然只调用了select查询的方法,但是update中也有语法错误

  8. 配置Tomcat时遇到的问题

    今天准备开始JavaWeb的学习,先配置tomcat,前期一切顺利,可当我打开startup.bat,访问localhost:8080时,却显示localhost 拒绝了我们的连接请求. 于是我开始在 ...

  9. 3、MHC主要组织相容性复合体

    主要组织相容性复合体 (major histocompatibility complex MHC) 位于脊椎动物某对染色体上紧密连锁的基因群,其编码的蛋白是主要组织相容性抗原,是移植排斥反应的主要抗原 ...

  10. 基于UML的高校教务管理系统的设计与实现

    一.基本信息 标题:基于UML的高校教务管理系统的设计与实现 时间:2018 出版源:南昌航空大学 领域分类:教育信息化:教务管理系统:UML:SSH:Oracle 二.研究背景 问题定义:高校教务管 ...