2023-06-26 22:17左右,收到某系统的主库磁盘使用率告警。2023-06-26 23:02左右收到该系统的从库磁盘使用率告警。



收到告警后,登录数据库查看各表的磁盘使用。


经分析发现DB存在一个当日的备份表t_eap_sys_navigation_log_bak_20230626 ,且在OS层面存在 命名异常的表文件(#开头),按照经验推断#开头为中间表,磁盘使用率告警恢复后,该中间表也不存在了。
通过proxysql中间件获取t_eap_sys_navigation_log_bak_20230626的操作记录,该表的确存在 OPTIMIZE table 与 ANALYZE table 行为。

真相大白,经核实,有同事对t_eap_sys_navigation_log实施 rename -> ANALYZE -> OPTIMIZE 操作。 OPTIMIZE table 会 recreate + analyze table,而 recreate 18G大表会产生 18G的中间表,造成了磁盘使用率的急剧上升, recreate 完成后 同步到从库且 会清理中间表,磁盘使用率恢复正常。
MySQL 中 optimize table、analyze table 和 alter table engine 的区别
-
alter table t engine = InnoDB(也就是 recreate)
-
analyze table t 不是重建表,只是对表的索引信息做重新统计,没有修改数据,这个过程中加了 MDL 读锁;
-
optimize table t 等于 recreate + analyze。
-
optimize table、analyze table 和 alter table engine 都会由主库同步到从库,需要注意大表recreate的磁盘空间消耗,主从延迟等影响

文章讲述了在收到主库和从库磁盘使用率告警后,通过对数据库操作的调查,发现是由于同事对大表执行了RENAME->ANALYZE->OPTIMIZE操作,导致18G的中间表产生,从而占用大量磁盘空间。OPTIMIZETABLE实际上包含了重创建和分析,而ALTERTABLEENGINE仅做索引统计,两者都会同步到从库,需注意对磁盘空间和主从延迟的影响。
1503

被折叠的 条评论
为什么被折叠?



