线上出现SQL时延大幅上涨,拿到监控数据,未能准确知道原因。
一、监控数据
1、外部流量无上涨,SQL时延上涨100倍
image.png
2、DB的QPS陡然下降
image.png
3、DB所在的机器IO,写流量剧增
image.png
4、内网网络无明显波动
image.png
5、Mysql主从库都出现相同的情况
二、开始分析
初步判断:
1、DB机器出现大量写操作,影响IO导致DB时延上涨及QPS下降
2、服务的QPS没上涨,代表不是服务流量影响DB
总结:
MYSQL本身的操作所致,而且是写磁盘的操作,很有可能是涉及主从同步。
三、破案
运维看了下,回答如下:
原因:主库的落地导致IO 拉高了。
解决办法:调整脏数据的落地百分比,调低一些,增加落地频率,别一次性落地这么猛。
image.png
更改后,IO不再抖动:
image.png
但是,为什么会突然大量的落地呢?
三个原因:mysql的自动管理,redo日志满了,重启
更倾向于mysql的自动管理,可以调整刷脏的百分比,防止大流量IO出现
https://www.cnblogs.com/xxmysql/p/5754211.html
四、脏页
页面更新是在缓存池Buffer Pool中先进行的,那它就和磁盘上的页不一致了,这样的缓存页也被称为脏页(英文名:dirty page)
https://blog.csdn.net/weixin_33812433/article/details/92853658
image.png