MySQL:刷脏页
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:刷脏页的更多相关文章
- 【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动
开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么. 因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的.当我们在内存中写入了 redolog 之后 ...
- Mysql的刷脏页问题
平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...
- Innodb刷脏页技术深度挖掘
DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...
- InnoDB Redo Flush及脏页刷新机制深入分析
概要: 我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓 ...
- MySQL中InnoDB脏页刷新机制Checkpoint
我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中 ...
- 面试题:了解MySQL的Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)
Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)" 本文是MySQL专题的第 8 篇,共110篇 ...
- MySQL中读页缓冲区buffer pool
Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理.我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其缓存起来,所以MyS ...
- redis存在大量脏页问题的追查记录
from:https://www.zybuluo.com/SailorXiao/note/136014 case现场 线上发现一台机器内存负载很重,top后发现一个redis进程占了大量的内存,TOP ...
- Checkpoint--查看各DB上的脏页
可以使用sys.dm_os_buffer_descriptors来看数据页在buffer pool中的状态,其中is_modified来标示数据页是否为脏页 --------------------- ...
随机推荐
- weex h5开发区别-实践初级篇
html标签 weex中没有标签的概念,html中标签对应于weex中的Components weex 无<span> .<p> ,用<text>替代.但是< ...
- Django ORM 常用字段和参数
Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...
- IDEA debugger模式下启动慢
很可能是因为代码里面有端点造成的. 点击如下图的重叠红点,找到对应端点点掉就可以了.
- MySql共享锁和排它锁
共享锁和排他锁 1.共享锁: 读锁.X锁,在查询时生效,多个事务在查询同一个数据时共享一把锁,但是不能作用于修改数据,在select语句后添加 lock in share mode : 2.排他锁:在 ...
- SpringSecurity入门demo
配置依赖: <properties> <spring.version>4.2.4.RELEASE</spring.version> </properties& ...
- HDU-6060 RXD and dividing
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6060 多校的题目,每次只能写两道SB题,剩下的要么想不到,要么想到了,代码不知道怎么实现,还是写的 ...
- Mac 系统搭建ThinkPHP3.2
PHP3.2完整包目录 拷贝两个文件 index.php 和ThinkPHP目录到服务器目录中,我已经设置服务器目录与eclipse工作空间为同一个 创建TestThinkPHP 项目 Eclipse ...
- 【repost】js window对象属性和方法相关资料整理
window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...
- OC中NSString的使用、字符串的使用
字符串作为OC语言的基本对象类型,被我们在各种地方广泛使用,因此熟悉掌握字符串的属性和方法,是OC必不可少的基础之一. 字符串分为可变字符串(NSMutableString)和不可变字符串(NSStr ...
- 了解AOP
Spring AOP的实现是基于JAVA的代理机制, 从JDK1.3开始就支持代理功能, 但是性能成为一个很大问题, 为了解决JDK代理性能问题, 出现了CGLIB代理机制.它可以生成字节码, 所以它 ...