登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
安全
›
MySQL 12 为什么我的MySQL会“抖”一下?
MySQL 12 为什么我的MySQL会“抖”一下?
[ 复制链接 ]
梢疠
2025-7-12 18:47:28
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
一条SQL语句,正常执行时候特别快,但有时会变得特别慢,且这种情况很难复现,随机且持续时间很短,看上去像是“抖”了一下。
你的SQL语句为什么变“慢”了
在MySQL 02中,介绍了WAL机制,InnoDB在处理更新语句时,更新内存写完redo log后,就返回给客户端,本次更新成功。
而内存里的数据最后要写入磁盘,这个操作称为flush。当内存数据页跟磁盘数据页内容不一致时,称这个内存页为
脏页
,内存数据写入磁盘后两者上的数据页内容一致,称为
干净页
。不论脏页还是干净页,都是指的
内存
中的数据页。
对于开头提出的场景,平时执行很快的更新操作,其实就是在写内存和日志,而“抖”的瞬间,很有可能就是在flush脏页。
有几种情况会引发数据库的flush过程:
InnoDB的redo log写满,这时候系统会停止所有的更新操作,通过flush把redo log中的checkpoint往前推进,使得redo log能有空间可以继续写;
系统内存不足。当需要新的内存页,而内存不够用,就需要淘汰一些数据页,空出内存给别的数据页。如果要淘汰的是脏页,就需要先将脏页刷到磁盘。可能会问,这种情况为什么不能直接淘汰内存,下次请求时从磁盘读入数据页,然后应用redo log?这里是从性能考虑的,对于刷脏页写盘的方法,保证每个数据页有两种状态:
内存里存在,肯定是正确结果,能直接返回;
内存里不存在,磁盘中肯定是正确结果,读入内存后返回。
MySQL认为系统“空闲”,有机会就会进行flush;
MySQL正常关闭时,会把内存的脏页都flush到磁盘,这样下次MySQL启动时,直接从磁盘读数据即可,启动速度很快。
分析上述四种情况对性能的影响:
第一种情况要尽量避免,因为这种情况下整个系统不能再更新,从监控上看更新数会跌为0;
第二种情况较常见。在InnoDB中,用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:
还没有使用;
使用了且是干净页;
使用了且是脏页;
由于InnoDB策略是尽量使用内存,因此对于一个长时间运行的库来说,未被使用的页面很少。如果要读入的数据页不在内存中,就需要在缓冲池申请一个数据页,把内存中最久未使用的数据页淘汰。如果淘汰的是脏页,就需要先flush。
而如果一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长,会
明显影响性能
。
第三种情况,系统没什么压力;
第四种情况,数据库本身就要关闭了,不需要太关注性能问题。
InnoDB刷脏页的控制策略
接下来讲讲控制策略,以及和策略相关的参数。
首先,需要正确告诉InnoDB所在主机的IO能力,这样InnoDB才能知道需要全力刷脏页的时候可以刷多快。这需要用到innodb_io_capacity参数,它会告诉InnoDB你的系统的磁盘能力,其值建议设置成磁盘的IOPS,而磁盘的IOPS可以通过fio工具进行测试。
知道了“全力刷脏页”的能力,但使用时不可能一直全力刷,毕竟磁盘能力不能只用来刷脏页,还需要服务用户请求。因此,需要让InnoDB控制引擎按照“全力”的一定百分比来刷页。
那么,如果设计策略控制刷脏页的速度,你会考虑哪些因素呢?考虑到如果刷太慢,内存中脏页数会太多,且redo log可能写满,因此主要参考因素就是:
脏页比例;
redo log写盘速度。
InnoDB会根据这两个因素单独算出来两个数字:
参数innodb_max_dirty_pages_pct是脏页比例上限,默认为75%。InnoDB会根据当前脏页比例\(M\),算出一个范围在0-100间的数字,计算方法为:
F1(M)
{
if M>=innodb_max_dirty_pages_pct then
return 100;
return 100*M/innodb_max_dirty_pages_pct;
}
复制代码
InnoDB每次写入的日志都有一个序号,假设当前写入的序号跟checkpoint对应的序号之间的差值为\(N\)。InnoDB会根据\(N\)算出一个范围在0-100之间的数字,\(N\)越大算出来的值\(F2(N)\)越大。
根据两个数字\(F1(M)\)和\(F2(N)\),取其中较大的值记为\(R\),之后引擎可以按照innodb_io_capacity定义的能力乘以\(R\)%来控制刷脏页的速度。
上述过程的流程如图:
讲到这里你应该知道,无论是查询语句在需要内存的时候可能要求淘汰一个脏页,还是由于刷脏页会占用IO资源影响更新语句,都可能感知到MySQL“抖了一下。要尽量避免这种情况,就需要合理设置innodb_io_capacity的值,并且平时要多关注脏页比例,不要让它经常接近75%。
其中,脏页比例计算方法是Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total。
接下来,再看一个策略。
一旦一个查询请求需要在执行过程中先 flush 掉一个脏页时,这个查询就可能要比平时慢了。MySQL中有个机制,可能让查询更慢:在准备刷一个脏页的时候,如果这个数据页旁边的数据页也是脏页,就会把这个“邻居”也带着一起刷掉,那么可能不断往后顺延。
在InnoDB中,用innodb_flush_neighbors参数控制该行为,值为1会有上述机制。
这类优化在机械磁盘时代比较有意义,可以减少很多随机IO。而对IOPS比较高的设备比如SSD,建议把值设为0,因为这时候IOPS往往不是瓶颈,而只刷自己能更快执行完必要的刷脏页操作,减少SQL语句响应时间。
在MySQL 8.0中,该参数默认值已经为0了。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
MySQL
为什么
我的
一下
相关帖子
冷酷的兔先生是谁,以及我为什么只研究兔子降温
我的爱情故事
为什么学术界研究了那么久没研究出伦理中间件
MySQL如何修改组复制通信栈(Communication Stack)
岐金兰的回答:为什么全球思想界没有及时提出类似DOS的模型?
分表路由:为什么大神都用 & (n-1),而不用 % ?一次给你讲透
揭秘MySQL索引分类
MySQL备份恢复全攻略:mysqldump与xtrabackup实战(DBA救命指南)
Mysql的行级锁到底是怎么加的?
AI 编程盛行的时代,为什么 “『DC- WF2W』” 仍然具有必要性?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
冷酷的兔先生是谁,以及我为什么只研究兔子降温
0
127
颜清华
2026-03-18
安全
我的爱情故事
0
439
厌外
2026-03-18
安全
为什么学术界研究了那么久没研究出伦理中间件
0
152
接快背
2026-03-18
安全
MySQL如何修改组复制通信栈(Communication Stack)
0
44
龙正平
2026-03-19
安全
岐金兰的回答:为什么全球思想界没有及时提出类似DOS的模型?
0
486
甦忻愉
2026-03-22
代码
分表路由:为什么大神都用 & (n-1),而不用 % ?一次给你讲透
0
100
阴昭昭
2026-03-23
业界
揭秘MySQL索引分类
0
902
瞪皱炕
2026-03-24
安全
MySQL备份恢复全攻略:mysqldump与xtrabackup实战(DBA救命指南)
0
860
峰邑
2026-03-25
业界
Mysql的行级锁到底是怎么加的?
0
600
兑谓
2026-03-26
业界
AI 编程盛行的时代,为什么 “『DC- WF2W』” 仍然具有必要性?
0
86
博咱
2026-03-27
回复
(31)
季卓然
2025-10-14 09:16:38
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个有用。
柏雅云
2025-10-20 01:44:40
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
慎气
2025-10-21 10:51:30
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
穆望
2025-11-27 16:42:36
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
章娅萝
2025-12-23 08:27:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
奚娅琼
2025-12-30 09:15:35
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
菅舛
2026-1-17 13:24:56
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
鞍注塔
2026-1-19 02:41:25
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
衣旱
2026-1-19 20:53:56
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
匣卒
2026-1-19 23:31:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
毁抨句
2026-1-20 17:47:31
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
吕颐然
2026-1-21 14:34:51
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
嘀荼酴
2026-1-22 13:11:25
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
袁曼妮
2026-1-26 09:04:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
段干叶农
2026-1-28 03:21:17
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
叭遭段
2026-2-8 03:12:49
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
訾懵
2026-2-8 07:23:11
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
柄利
2026-2-8 07:56:35
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
邹弘丽
2026-2-8 09:17:15
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
梢疠
2026-2-8 09:17:15
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9916
7
宋子
9878
8
荪俗
9018
9
闰咄阅
9995
10
蓬森莉
9870
查看更多
今日好文热榜
644
多租户下的系统业务开发过程探讨
421
给OpenClaw泼泼凉水降降温
912
给Xcode使用完整版本的swiftformat
169
集成AI 的 Redis 客户端 Rudist发布新版了
821
AI三问:如何直面新一轮技术浪潮
193
macos简单配置openclaw
171
详细解析Spring如何解决循环依赖问题
591
AI 时代,计算机专业学生该怎么学?
761
AI三问:如何直面新一轮技术浪潮
858
AI三问:如何直面新一轮技术浪潮
810
大学生找工作必备!这个免费简历网站太香了
735
大学生找工作必备!这个免费简历网站太香了
693
P3DE (Processing 3D Editor) 三维场景编辑
194
服务器遭遇 XMRig 挖矿程序入侵排查与清理
106
OpenClaw 多智能体路由方案实现不同业务处
641
4.Acwing基础课第788题-简单-逆序对的数量
735
OpenClaw 多智能体路由方案实现不同业务处
535
【节点】[SplitTextureTransform节点]原理
890
【节点】[SplitTextureTransform节点]原理
22
AI Coding逐步引导式开发,从零到一生成完