场景:
数据量持续增长:
TimLine图片20190521150402.png
持续对数据进行归档整理但是并没有作用
image.png数据表空间虽然有很多空闲空间但是仍然持续增长。
接下来分析一下原因:
mysql delete操作并不是进行删除操作,而只是对索引项标记为已删除,并不释放空间,但是以后的插入,命中了这个索引项,那么这个位置就可以复用。问题是在某些场景下,空闲的位置并不会再被插入数据。对一个数据页上的所有数据都被删除的情况,数据页才可能被复用。
怎样处理?
重建表:alter table A engine=InnoDB;
MySQL 5.6版本开始引入的Online DDL,对这个操作流程做了优化
image.png
上述的这些重建方法都会扫描原表数据和构建临时文件。对于很大的表来说,这个操作是很消耗IO和CPU资源的。因此,如果是线上服务,你要很小心地控制操作时间。如果想要比较安全的操作的话,我推荐你使用GitHub开源的gh-ost来做。
后续有时间我会研究一下gh-ost
看一下重建表后的资源:
未命名.png
网友评论