What does information_schema.TABLES.DATA_FREE mean in MySQL?

来源:互联网 发布:简历采集软件 编辑:程序博客网 时间:2024/05/17 05:50

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: 9096413184MAX_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

0 0
原创粉丝点击