MySQL8-すべてのテーブルとインデックスを最適化する

Nov 27 2020

いくつかのデータベース(MySQL 8)内に多数のテーブル(InnoDB)があり、ガベージコレクトスクリプトを毎日実行して、不要になった古いレコードを削除しています。すべてのテーブルにはインデックスがあります。

パフォーマンスを向上させるために、たとえば毎週、すべてのテーブルを最適化することは理にかなっていますか/まったく有益ですか?もしそうなら、実行するための良いコマンドはありますか?

やってみた

sudo mysqlcheck -o --all-databases

ただし、次のエラーメッセージが表示されます。

note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

回答

1 RickJames Nov 29 2020 at 14:36

気にしないでください。InnoDBは主にそれ自体を処理します。OPTIMIZE一時的に無駄なスペースを絞り出しますが、インサートなどが発生すると新しい無駄が発生します。のパフォーマンス上の利点はOPTIMIZEほぼゼロです。

1 RolandoMySQLDBA Nov 27 2020 at 04:39

これらのメッセージはInnoDBでは正常です。あなたはそうし続けることができます。

InnoDBストレージエンジンは次のOPTIMIZE TABLE mydb.mytable;ように動作します

ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;

私は何年にもわたってこれに言及しました:

  • Sep 27, 2015:MySQLでテーブルを最適化するにはどうすればよいですか?
  • Jun 24, 2015:テーブルの変更後に最適化テーブルを呼び出すためのガイドライン?
  • Feb 27, 2013:mysqlの最適化テーブルと分析テーブルの違いは何ですか
  • Aug 04, 2011:InnoDBのデフォルト設定の最適化

毎日または毎週分析することをお勧めします

sudo mysqlcheck --analyze --all-databases

次に、月に1回または四半期に1回最適化を実行します。