web-dev-qa-db-ja.com

MySQL information_schemaが更新されない

私は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.を使用しています

誰かが何が悪いのか教えてもらえますか?

更新:

実際、別のスレッドを使用して定期的にデータベースサイズをチェックしています。

5
Eagle

Ibdファイルを圧縮するには、テーブルを再構築する必要があります。このコマンドはそれを行います:

optimize table abc.test;
2
Ike Walker

さらに、テーブルの一部の行を削除した場合。テーブルは断片化されます。フラグメントを削除すると、テーブルがよじれます。アイクウォーカーが言ったようにテーブルを最適化すると役立ちます。

最適化テーブルはmysqldのダウンタイムを作ります。

1
Luke Nguyen