现象:

1.用户升级之后,实例上磁盘空间以每分钟1g的速度不断增长,

2.高频dml表的空间不断变大但表数据其实不大,binlog大量产生

3.通过select * from innodb_tablespaces where name like '%undo%'发现undo 空间上涨较快,但阿里云监控视图显示正常。附问题截图:

##问题一磁盘持续增长

mysql内存一直居高不下 mysql内存不断增加_mysql内存一直居高不下

##问题二高频表截图

mysql内存一直居高不下 mysql内存不断增加_开发语言_02


mysql内存一直居高不下 mysql内存不断增加_阿里云_03

##问题三undo监控

mysql内存一直居高不下 mysql内存不断增加_关系型数据库_04

mysql内存一直居高不下 mysql内存不断增加_阿里云_05

排查过程:

mysql内存一直居高不下 mysql内存不断增加_阿里云_06

 

mysql内存一直居高不下 mysql内存不断增加_开发语言_07

mysql内存一直居高不下 mysql内存不断增加_mysql_08

1.排查发现4.10 4:00后实例qps tps没有明显变化,但数据写入数据页落盘效率下降明显,怀疑是否是实例小版本升级后新特性造成异常于是联系阿里云
2. 查看事务提交和 undo 的 purge 速度。在监控中,可以看到事务大量提交,04/10 04:00 前后每秒提交事务 1万+,但是 purge 速度很慢,只有 1k+;
3. 分析 purge 慢的原因。发现 innodb_purge_threads = 1,即 purge 线程只有 1 个,于是建议用户增加 purge 线程,建议调整到 4;
4. 跟进发现 undo 空间继续增大,查看监控发现 undo purge 速度还是跟不上,于是建议用户调大 innodb_purge_batch_size;
5. 跟进发现 undo 空间还在快速增大,上述的调整起到的作用有限,有什么影响了 undo 的purge 速度。经排查,AliSQL小版本升级后新特性flashback 功能打开,经过确认,flashback 功能对 purge 速度有影响,暂时关闭 flashback 功能。
6. 关掉 flashback 之后,purge 速度恢复正常,空间恢复正常需要时间,大概几个小时。

7.从故障发现到阿里云排查解决历时58小时附图:

mysql内存一直居高不下 mysql内存不断增加_mysql内存一直居高不下_09


注:Native Flashback Query为阿里云自研功能功能,支持直接通过SQL语句进行回滚查询和数据恢复

复盘分析:

1. 用户从 20200110 升级到 20221231 之后,参数模板没有补充新增的功能参数,flashback 功能打开了,影响了 undo 的purge;

2. 新增的 flashback 功能影响 purge 的问题,后续会继续优化这个功能;

3. 先关闭 flashback 功能,一段时间后即可恢复正常。 

 

4.云实例建议关闭自动升级,定期查看小板更新内容评估后再统一升级