Optimize InnoDB Table遇到的问题

本文讨论了在使用MySQL InnoDB存储引擎时遇到的删除数据后磁盘空间未自动释放的问题,并通过优化表语法和调整启动选项解决了此问题。同时解释了MySQL优化表过程的限制及其工作原理。

近日在两个物品记录表中分别制造了10亿的数据(不要问我什么业务会有这么多数据^_^),每个表分别有9个字段,基本是int。之前估算过表的大小,但没有计算磁盘占用情况,这次测试主要就是想了解下磁盘占用情况。


/data总容量200GB,10亿数据很快就写满了,于是又开始删数据,但发现InnoDB存储引擎在删除数据后并不自动释放磁盘空间。在老叶的博客上我们学习到可以通过optimize table语法alter table TableName engine=innodb来实现空间的释放。


我的MySQL版本是5.1.38,在optimize执行了很久之后系统提示

Table does not support optimize, doing recreate + analyze instead

……好无语啊,消耗了时间不说,结果还没有执行成功


在网上搜索了下看到MySQL管网对optimize语法有详细的说明,参见http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

其中关键在这里

mysql> OPTIMIZE TABLE foo;

+----------+----------+----------+-------------------------------------------------------------------+
| Table    | Op       | Msg_type | Msg_text                                                          |
+----------+----------+----------+-------------------------------------------------------------------+
| test.foo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.foo | optimize | status   | OK                                                                |
+----------+----------+----------+-------------------------------------------------------------------+

You can makeOPTIMIZE TABLE work on other storage engines by starting mysqld with the --skip-new or --safe-mode option. In this case, OPTIMIZE TABLE is just mapped toALTER TABLE.

上面是说要求我们在启动的时候指定--skip-new或者--safe-mode选项来支持optimize功能


我就是没有指定这些选项遇到了上面的问题,按照上面的要求重新启动后就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值