Mysql刷脏页的二三事
我们知道MySQL 的innodb引擎使用redo log 实现crash safe, 并且更新数据时,先更新内存,然后写完redo log,然后后台线程将redo log 异步刷入磁盘。
内存与磁盘的数据页不一致,这样的数据页叫做脏页,mysql偶尔查询慢,可能就是在刷脏页到磁盘,刷脏页有几种情况:
- redo log 写满了
- mysql内存满了,发生内存置换。当要置换出去的是脏页时,就会刷脏页
- mysql系统空闲时
- mysql停止服务的时候
1和2才是我们关注的对象,redo log写满了,必须停下来刷脏页,此时完全完全不能写入。innodb 使用buffer pool管理内存,如果要查询的数据不在内存中,需要从磁盘读入内存,可能会淘汰掉一批很久没使用的数据页。如果淘汰的数据页比较多,会花时间去刷脏页,造成的影响就是查询变慢了。
刷脏页的控制策略
innodb_io_capacity
这个参数设置为磁盘的IOPS,机械磁盘一般为300,SSD的话往上配置。
innodb_max_dirty_pages_pct
参数 innodb_max_dirty_pages_pct 是脏页比例上限,默认值是 75%。当前的刷脏页比例,由附件"InnoDB 刷脏页速度策略"。假设当前脏页比例为M,有如下计算规则:
F1(M)
{
if M >= innodb_max_dirty then
return 100;
return 100*M/innodb_max_dirty_pages_pct;
}
另外还有个计算规则,记为F(N), N代表了redo log当前的余裕部分大小(当前写入日志位置序号和checkpoint位置序号的差值)。
刷脏页速度大概可以这样给出公式
innodb_io_capacity * max(F(M), F(N)) x !00%
合理设置 innodb_io_capacity 的值,并且平时要多关注脏页比例,不要让它经常接近 75。
监控刷脏页
use information_schema;
set @@global.show_compatibility_56=ON;
select VARIABLE_VALUE into @a from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty';
select VARIABLE_VALUE into @b from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_total';
select @a/@b;
innodb_flush_neighbors
innodb_flush_neighbors 设置为1 时,表示刷脏页的时候会连带将附近的脏页一起刷盘,设置这个参数对机械键盘有用,如果时SSD iops比较高,可以关掉,减少一些sql语句响应时间。
Mysql刷脏页的二三事的更多相关文章
- 【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动
开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么. 因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的.当我们在内存中写入了 redolog 之后 ...
- MySQL:刷脏页
1. 脏页,干净页 当内存数据页和磁盘数据页上的内容不一致时,我们称这个内存页为脏页: 内存数据写入磁盘后,内存页上的数据和磁盘页上的数据就一致了,我们称这个内存页为干净页. 2. 刷脏页的时机 2. ...
- Mysql的刷脏页问题
平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...
- Innodb刷脏页技术深度挖掘
DBA某数据库集群每日17:00左右会出现一个性能陡降的现象,在10~20秒内主库出现大量慢查询.这些查询本身没有性能问题,也没有任何关联,可以认为是由于数据库系统负载较重,由于并发导致的慢查询.通过 ...
- InnoDB引擎之flush脏页
利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,由此也带来了内存脏页的问题. 脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用 ...
- InnoDB Redo Flush及脏页刷新机制深入分析
概要: 我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓 ...
- 面试题:了解MySQL的Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)
Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解Flush-List吗?顺便说一下脏页的落盘机制!(文末送书)" 本文是MySQL专题的第 8 篇,共110篇 ...
- MySQL中InnoDB脏页刷新机制Checkpoint
我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中 ...
- MySQL5.7关于密码二三事
MySQL5.7关于密码二三事 第一个:update user set password=password('root') where user='root' and host='localhost' ...
- MySQL中读页缓冲区buffer pool
Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理.我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其缓存起来,所以MyS ...
随机推荐
- 一、Linux常用命令(ubuntu/debian)
1.rename(批量修改文件名) rename 's/屏幕录制 2024-09-06 123248_/aa_/' 屏幕录制\ 2024-09-06\ 123248_*.png 这条命令的含义是: s ...
- ChatGPT学习之旅 (3) Prompt进阶用法
大家好,我是Edison. 上一篇:Hello Prompt 复习Prompt用法 还记得上一篇学到的黄金公式吗? 这里,我们先来复习一下,假如我们想要ChatGPT来扮演一个[私人营养师]为我们给出 ...
- 如何用三层防护体系打造坚不可摧的 API 安全堡垒?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ FastAPI 安全与认证综合实 ...
- vuePress2.x 多页面 多目录生成方案
前言 因为官网介绍的都只有一个'一级标题' 只有一个markdown文件 最终编译后也只有一个html文件,类似于spa 单页项目 如何才有多页项目呢 百度查询 网上插件库有很多,大部分不能用, 后来 ...
- 颜色均摊段(ODT)学习笔记
どうしたら,あなたに愛を刻めるんだろう? 其实我更喜欢叫她珂朵莉树,尽管这个东西和树没什么关系. 故事的一切起源于 CF896C Willem, Chtholly and Seniorious,本题基 ...
- iPaaS+MCP,赋能企业数智化转型,别让数据和AI“躺平”!
现在企业都在喊"数智化转型",但是在真正落地的时候,却发现困难重重.数据分散.系统割裂.AI用不起来,这些问题让很多企业头疼不已.今天,咱们就来聊聊如何打破这些瓶颈,让数智化真正为 ...
- SciTech-Mathmatics-FourierSeries: Time Domain and Frequency Domain + Amplitude(Power) / Frequency / Phase
Time Domain and Frequency Domain Frequency domain: measured by Spectrum Analysiszer Tells us how pro ...
- USRP-2974上安装Ubuntu20.04 + UHD 3.15 + GNU Radio 3.8 过程全记录
本文从安装好Ubuntu20.04系统说起,经历下述流程: 换源 北京外国语大学开源软件镜像站 USRP-2974需要额外安装的驱动 USRP-2974关于UHD的驱动安装 官方教程 USRP-297 ...
- 自定义.sh 文件在linux 中开机自启设置-九五小庞
有时候呢我们需要在centos系统启动的时候运行程序,这样保证一些服务就没有中断,相信你理解是什么意思.其实方法很简单呐,就是把需要运行的程序放在/etc/rc.d/rc.local里面就可以启动了除 ...
- 消息队列(mq)是什么?
对于 MQ 来说,其实不管是 RocketMQ.Kafka 还是其他消息队列,它们的本质都是:一发一存一消费.下面我们以这个本质作为根,一起由浅入深地聊聊 MQ. 01 从 MQ 的本质说起 将 MQ ...