美文网首页
MySQL delete操作详解

MySQL delete操作详解

作者: 特仑苏纯牛乳 | 来源:发表于2019-05-21 15:32 被阅读0次

    场景:
    数据量持续增长:


    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

    相关文章

      网友评论

          本文标题:MySQL delete操作详解

          本文链接:https://www.haomeiwen.com/subject/brrjzqtx.html