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回最適化を実行します。