mysql 快速回收表空间_高效回收MySQL InnoDB 独立表空间

对于innodb独立表空间来说,delete 是不能回收其在磁盘所占用的空间,采用truncate (原理是先删除,或重建)倒是可以;

这里不讨论直接drop表的情况,直接alter table ....engine=innodb 是可以整理碎片,回收部分表空间,在数据量小或者buffer pool 比较小的时候(小于30G)倒是很不错;

当碎片较多或者buffer pool较大的时候,我们需要面临风险----对Innodb存储引擎在执行DDL语句的时候,会短暂hang住整个系统,而且这个hang的时间的长短与Buffer Pool的大小相关。主要原因在于InnoDB在drop table时,会连续两次遍历buf pool LRU 链表,遍历的过程加锁,因此导致系统hang住。第一遍遍历LRU链表,会定期释放buf pool mutex,因此对于系统hang的影响较小;而第二遍会一直持有,对系统hang的影响较大。-

--相关文章可以参考:

在这里我介绍一种安全高效的碎片整理方法;pt-online-schema-change

percona这款工具本身是用来进行非阻塞的online ddl的,但由于只有alter table ...语句才能回收表空间,那可以采用该工具的原理:创建一张临时表,以触发器来保证与原表的数据一致,最后renmame替换掉;用过这款工具的朋友可能会有疑问,“online ddl”最后的操作时 drop old table;drop trigger;这样的操作;但可以采用--no-drop-old-table,让其不会删除旧表,等有其他时间的时候,采用脚本形式批量删除记录,最后在drop掉剩余的“小表”;这样就避免了hang 住系统;

本人亲测,版本2.2.1,60G表,2个小时左右回收至21G;

推荐阅读:

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值