What does information_schema.TABLES.DATA_FREE mean in MySQL?

1. DATA_FREE 是什么

The DATA_FREE column shows the free space in bytes for InnoDB tables.

DATA_FREE是 InnoDB 表空间中没有使用的空间,每当从 InnoDB 表中删除了一行内容,该段空间就会被留空。而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大。
如下:

...
         ENGINE: InnoDB
        VERSION: 10
     ROW_FORMAT: Compact
     TABLE_ROWS: 45667473
 AVG_ROW_LENGTH: 199
    DATA_LENGTH: 9096413184
MAX_DATA_LENGTH: 0
   INDEX_LENGTH: 10359996416
      DATA_FREE: 252824256512
...

如上面所示,该表由于经常删除导致DATA_FREE过大,已经超出表数据大小 10 多倍,表真正数据大小为:DATA_LENGTH(9096413184) + INDEX_LENGTH(10359996416)。

2. 如何取回DATA_FREE的空间

有多种方法,可以根据不同的情况选择。
方法一

1. mysqldump 出所有数据库数据;
2. 删除数据库数据,保留 schema;
3. `/etc/my.cnf`设置参数`innodb_file_per_table=1`4. 删除 ibdata1, ib_logfile0 and ib_logfile1 ;
5. 重启 MySQL;
6. 导入数据。

方法二

mysql> optimize table table_name;

方法三

删除旧表,创建新表;

ref:
http://stackoverflow.com/questions/9731853/what-does-information-schema-tables-data-free-mean-in-mysql
http://dba.stackexchange.com/questions/69765/how-to-reclaim-data-free-in-innodb-tables
http://dba.stackexchange.com/questions/16341/how-do-you-remove-fragmentation-from-innodb-tables
http://dev.mysql.com/doc/refman/5.5/en/tables-table.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值