MySQL占用空间后越删越大的示例分析


今天就跟大家聊聊有关MySQL占用空间后越删越大的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。你MySQL中查询回表
话说有一天,我心血来潮。登录阿里云,发现 RDS 占用的空间挺大的。想起有一张表,当初设计的不好,没用的数据挺多的。就想着删除清理一部分数据,节约空间。说做就做,一条 delete 语句,如下:没想到意外发生了,删除几十万条数据后,我再去查看 RDS 占用的数据空间,不仅没降,还上升了。这是怎么回事?这个问题可能很多人都没有注意到。平时大家的关注点可能都不在这方面。我把这个数据删除后,阿里云立马发邮件报警,说我们的 RDS 存储空间过大,没办法,当初知识水平有限。就又花公司的钱,升级了存储空间。这个问题一直困惑着我,直到开发云主机域名两年前看了《高性能MySQL》。而今天刚好又有一个网友私信我,我想起了这件事。所以,今天就给大家解惑一下,为什么会这样。第一个就是网上很多人所说的那样,这是一个MySQL的BUG,直到MySQL 5.7 版本才解决。由于我们当初选的是 MySQL 5.6 的版本,出现这个问题后,也咨询了阿里云。但是阿里云给出的答复是只能进行数据迁移,虽然MySQL5.7版本,可以解决这个问题,但是阿里云的MySQL5.6的版本并不能直接升级到5.7。而迁移数据库也太浪费时间和精力了,搞不好,再把主要数据给丢失了。BOSS 非剁了我不可。第二个我要说的就是 MySQL 5.6中默认是独立表空间,如果采用独立表存储模式,data 中还会产生 report_site_day.ibd 这类文件(存储数据信息和索引信息)。而删除的时候,它不会被删除。第三个就是 MySQL 对于删除的功能的底层实现,并不是大家想象的那样,执行 delete 就真的给删除了。而是当你使用 delete 删除的时候,MySQL并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。关于数据迁移也会带来一些问题,这个我们下一章再说。今天我先说一下,MySQL 官方推荐的OPTIMIZE TABLE 命令来清理优化表 InnoDB 空间的做法。OPTIMIZE TABLE 命令的格式如下:具体的用法如下:或者,你也可以这样批量生成优化所有表的 SQL,再复制出来执行:除此之外,我们还还可以把表设置为单表存储的形式,这样每个表中的数据单独存储,在删除数据的时候,会随着数据的删除而释放存储空间。至于数据迁移,我们可以先备份后删除然后进行导入。看完上述内容,你们对MySQL占用空间后越删越大的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: 【收藏】一篇快速帮企业转型区块链的锦囊

无论对于哪一项技术来说,衡量技术成熟的标志都在于这项技术的最终落地。对于区块链这个行业来说,大家最关心的莫过于,什么样的企业适合踏入区块链这个领域?以及什么样的应用可以解决当下企业、用户遇到的一些问题。在10月13日杭州举行的第二次迅雷链技术沙龙上,迅雷链开放…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (2)
Donate 微信扫一扫 微信扫一扫
Previous 05/16 13:37
Next 05/16 13:37

相关推荐