MySQL表空间回收

表空间分析

  表删掉了一半的数据,表文件的大小还是没变,这背后的原因是什么呢?
  首先本文的全部分析依赖于InnoDB存储引擎,一个InnoDB表包含两部分,即:表结构定义和数据。表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数innodb_file_per_table控制的。
  OFF表示:表的数据放在系统共享表空间,也就是跟数据字典放在一起;
  ON表示:每个InnoDB表数据存储在一个以 .ibd为后缀的文件中。
  从MySQL5.6.6开始,这个参数默认为ON,将表结构和表数据分开存储,drop table的时候可以直接删掉这个文件。

数据删除流程

  InnoDB的数据是通过B+树存储的,当删除某条记录时,并不是直接删掉,而是将这个位置标记为可复用,下次在相近位置插入数据时,就可以重用这个位置(这个位置就是一个空洞)。当整个数据页被删除之后,这个数据页也被标记为可重用,这也就是为什么delete 删除数据之后不会缩小占用空间的原因。除了删除数据,插入数据也可能由于页分裂、合并出现空洞。为了去掉这些空洞,真正缩小表的占用空间,就要进行表重建。
表重建:
  可以使用alter table A engine=InnoDB命令来重建表,从MySQL 5.6版本开始引入了Online DDL,在重建表的过程中,允许对表A做增删改操作。其主要流程如下:
  1.建立一个临时文件,扫描表A主键的所有数据页&

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值