web-dev-qa-db-ja.com

InnoDBテーブルを*実際に*最適化するにはどうすればよいですか?

mysqltunerによる推奨の後、mysqlcheck --optimize --all-databasesを正常に実行しました(すべてのテーブルで「注:テーブルは最適化をサポートしていないため、代わりに再作成+分析を実行しています」および「ステータス:OK」と報告されています)。テーブルはまだ断片化しています。私は実行しました このクエリ

SELECT engine,
       table_name,
       ROUND(data_length/1024/1024) AS data_length,
       ROUND(index_length/1024/1024) AS index_length,
       ROUND(data_free/1024/1024) AS data_free
  FROM information_schema.tables;

そして、私のテーブルの約の半分がまだ断片化されていることがわかりました。それらのいくつかは100%よりも断片化されています(つまり、data_free> data_length + index_length)。 データベース全体を再作成せずに最適化を確実にするにはどうすればよいですか?

ibdata1は82 MB(DB全体は> 100 GB)で、innodb_file_per_table = onが設定されています。また、1つのテーブルで ALTER TABLE schema_name.table_name ENGINE=InnoDB; を試して、mysqlcheckに問題があるかどうかを確認しましたが、ファイルサイズに大きな変化はありませんでした。

MariaDB 5.5を実行しています。

4
l0b0

テーブルを再作成するか、「optimize table」コマンドを使用してテーブルを再構築できます。念のためにバックアップを作成することを強くお勧めします。

https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-storage-layout.htmlhttps://mariadb.com/kb/en/ mariadb/optimize-table /

1
RMathis