mysql 表空间收缩_[InnoDB系列] - InnoDB释放表空间

前言:设置启动选项 innodb_file_per_table 即可启用独立表空间。不过,InnoDB总是需要共享标空间,.ibd文件对InnoDB不足以去运行,共享表空间包含熟悉的ibdata文件,InnoDB把内部数据词典和未作日志放在这个文件中。

测试环境:Windows XP, MySQL 6.0.0-alpha-community-nt-debug

先来查看一下该表的状态:

mysql> SHOW TABLE STATUS LIKE 'yejr'\G

*************************** 1. row ***************************

Name: yejr

Engine: InnoDB

Version: 10

Row_format: Compact

Rows: 162049

Avg_row_length: 80

Data_length: 13123584

Max_data_length: 0

Index_length: 28983296

Data_free: 0

Auto_increment: NULL

Create_time: 2007-09-13 21:58:53

Update_time: NULL

Check_time: NULL

Collation: latin1_swedish_ci

Checksum: NULL

Create_options:

Comment: InnoDB free: 4096 kB

该表空间文件大小:

D:\.....data\test>dir yejr.ibd

2007-09-13 22:18 50,331,648 yejr.ibd

清空该表:

mysql> TRUNCATE TABLE yejr;

现在,再来看看它的状态:

mysql> SHOW TABLE STATUS like 'yejr'\G

*************************** 1. row ***************************

Name: yejr

Engine: InnoDB

Version: 10

Row_format: Compact

Rows: 0

Avg_row_length: 0

Data_length: 16384

Max_data_length: 0

Index_length: 49152

Data_free: 0

Auto_increment: NULL

Create_time: 2007-09-13 21:58:53

Update_time: NULL

Check_time: NULL

Collation: latin1_swedish_ci

Checksum: NULL

Create_options:

Comment: InnoDB free: 45056 kB

以及表空间文件大小:

D:\.....data\test>dir yejr.ibd

2007-09-13 22:18 50,331,648 yejr.ibd

可以看到,表空间文件没有发生变化,因为InnoDB不会自动收缩表空间文件尺寸,但是实际空间却是释放出来了。

那么,如果我们想让InnoDB表空间文件也释放,该怎么办呢?

很简单,执行下面的语句,然后再看看:

mysql> OPTIMIZE TABLE yejr;mysql> SHOW TABLE STATUS like 'yejr'\G

*************************** 1. row ***************************

Name: yejr

Engine: InnoDB

Version: 10

Row_format: Compact

Rows: 0

Avg_row_length: 0

Data_length: 16384

Max_data_length: 0

Index_length: 49152

Data_free: 0

Auto_increment: NULL

Create_time: 2007-09-16 15:07:28

Update_time: NULL

Check_time: NULL

Collation: latin1_swedish_ci

Checksum: NULL

Create_options:

Comment: InnoDB free: 0 kB

以及表空间文件大小:

D:\.....data\test>dir yejr.ibd

2007-09-16 15:10 147,456 yejr.ibd

可以看到,不只是可用空间,包括表空间文件的尺寸都释放了。

另外,也可以执行一个所谓的 NULL 操作来达到同样的目的:

mysql> ALTER TABLE yejr ENGINE = InnoDB;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值