私はmysqlサーバーにデータベース、たとえばabc
を持っています。 test
という名前のテーブルが1つだけあります。 test
はinnodbエンジンを使用し、innodb_file_per_table
をtrueに設定しました。
クエリdelete from abc.test
を実行した後、abc
のデータベースサイズを計算します。これが私が使用するクエリです:
SELECT
table_schema "name",
sum( IF(engine = "MyISAM", data_length + index_length - data_free,
data_length + index_length)) "size"
FROM information_schema.TABLES
where table_schema like "abc";
奇妙なことに、データベースのサイズはまったく減少していませんが、「テスト」のデータはなくなっています。
私はこの種のテストを何度も行ったことがありますが、この奇妙な動作がときどき発生します。
percona mysql server 5.5.29-rel29.4.
を使用しています
誰かが何が悪いのか教えてもらえますか?
更新:
実際、別のスレッドを使用して定期的にデータベースサイズをチェックしています。
Ibdファイルを圧縮するには、テーブルを再構築する必要があります。このコマンドはそれを行います:
optimize table abc.test;
さらに、テーブルの一部の行を削除した場合。テーブルは断片化されます。フラグメントを削除すると、テーブルがよじれます。アイクウォーカーが言ったようにテーブルを最適化すると役立ちます。
最適化テーブルはmysqldのダウンタイムを作ります。