现象:
1.用户升级之后,实例上磁盘空间以每分钟1g的速度不断增长,
2.高频dml表的空间不断变大但表数据其实不大,binlog大量产生
3.通过select * from innodb_tablespaces where name like '%undo%'发现undo 空间上涨较快,但阿里云监控视图显示正常。附问题截图:
##问题一磁盘持续增长
##问题二高频表截图
##问题三undo监控
排查过程:
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小时附图:
注:Native Flashback Query为阿里云自研功能功能,支持直接通过SQL语句进行回滚查询和数据恢复
复盘分析:
1. 用户从 20200110 升级到 20221231 之后,参数模板没有补充新增的功能参数,flashback 功能打开了,影响了 undo 的purge;
2. 新增的 flashback 功能影响 purge 的问题,后续会继续优化这个功能;
3. 先关闭 flashback 功能,一段时间后即可恢复正常。
4.云实例建议关闭自动升级,定期查看小板更新内容评估后再统一升级
相关资料
阿里云内核更新文档:AliSQL的内核版本更新说明_关系型数据库-阿里云帮助中心
Native Flashback功能可以通过SQL语句查询或恢复指定时间点的数据,保证在误操作后可以快速获取历史数据。
Native Flashback功能介绍:NativeFlashback语法、参数和示例_关系型数据库-阿里云帮助中心