记一次数据库优化mysql OPTIMIZE TABLE

79 阅读1分钟

公司有2个系统 A和B 某天领导要求将A的上游系统对接到B的中间系统,主要对接订单,库存,商品资料

但是A和B都是产品型系统,只买了使用权没有源码开发,各自都有一套标准api

于是变成了 A <-> 我们开发的平台 <-> B

因为业务上A和B的接口并不是直接能接上的

所以我需要将所有接口的数据都存到接口日志表上

使用了多个text类型字段,为了方便检索数据,又加了全文索引 上线后发现每天的库存同步日志接近30w,于是开启了每天凌晨定时删除2天前的数据

image.png

本来以为这样就万事大吉,结果使用了几个月后数据库变得很卡

系统运维人员发现数据库ibd文件变得特别大,占用了将近70g

600b0149c031609476da2fca052b4a7.png

深入了解之后发现是因为删除日志表后索引文件并不会清除,于是一直累加,索引也就越来越慢

解决方式:使用命令

OPTIMIZE TABLE 表名

进行优化

这个操作会锁表,请在业务系统可以接受短暂停用的情况下使用

操作完成后

1666679592259.png

索引文件减少到几百兆666