InnoDBではレコード削除しても容量確保されない
MySQL使っていて大量のデータを削除してもサーバーの容量が解放されなくて焦った。
InnoDBではレコード削除してもその容量を開放してくれなくて、別途
alter table t engine=InnoDB;
と叩く必要があるらしい。
試しにAlter流してみるとテーブルが巨大だったためかなり時間がかかりました。
しかも、流してる間謎にサーバーの容量が減っていく。
公式ドキュメントに
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.7 ALTER TABLE 構文
ほとんどの場合、ALTER TABLE は元のテーブルの一時的なコピーを作成します。
とあったので、多分そのせいだと思う。
自分の場合サーバーの容量が結構ギリギリだった(98%とかいってた)ので、ヤバイパンクする
という状況でした。
結局はテーブルのデータ全削除が許される状況だったので、
Drop TableしてからすぐCreate Tableすることで無事解決しました。
(後からわかったけどTruncateでも良かったっぽい。動いてるシステムだったからむしろTruncateした方が安全だった。)
いやー、焦った...
追記:この仕様は後で再利用するためにやっていることっぽい
なのでデータの削除と登録を繰り返す分には問題なさそう(未検証だけど)