MySQLのメンテナンス
データベースを使うソフト(WordPress、MovableType、ZenCart、EC-CUBE・・・その他色々)や、激しくSQL使ったりするとクエリーのキャッシュとかテーブルの更新とかで、どうしてもオーバヘッドが出てきてしまうらしい。
オーバヘッドが出ているということは、テーブルアクセスに時間がかかり、サイトの表示に時間がかかってしまっているので何とかしなければならないよね。
なので、「mysqlcheck」を使ってデータベースのメンテナンスを行う。「mysqlcheck」はサーバを停止しなくてもよいので、定期的に実行するようにcronにでも登録しておこう。
目次
まずは、DBがどんな感じか確認してみるよ。
テーブルを分析
- –analyze, -a
mysqlcheckはコマンドラインで確認するよ!
mysqlcheck -a データベース -uユーザ -pパスワード
mysqlcheck -a WPdb -uhoge -phogePWD WPdb.wp_blc_filters Table is already up to date WPdb.wp_blc_instances Table is already up to date WPdb.wp_blc_links Table is already up to date : : |
テーブルにエラーが無いかチェック。(デフォルト)
-
--check, -c
mysqlcheck -c WPdb -uhoge -phogePWD WPdb.wp_blc_filters OK WPdb.wp_blc_instances OK WPdb.wp_blc_links OK : : |
オーバーヘッドがどのくらいあるか確認する(\Gで縦表示で出力する)
MySQLにログインする。
mysql -uhoge -phogePWD
mysql> use WPdb; mysql> show table status\G; *************************** 17. row *************************** Name: wp_options Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 264 Avg_row_length: 2776 Data_length: 733236 Max_data_length: 281474976710655 Index_length: 15360 Data_free: 196 Auto_increment: 39610 Create_time: 2011-05-01 01:58:27 Update_time: 2011-06-11 20:58:23 Check_time: 2011-06-11 19:16:19 Collation: utf8_general_ci Checksum: NULL Create_options: Comment: |
で、出てくる「Data_free: 196」の所がオーバーヘッドの部分
(Data_freeってまぎらわしくね!時間かかったよ)
で、本題のオーバヘッドを解消しよう
テーブルを最適化
- –optimize, -o
ユニークではないユニークキー以外の全てを修復できるリペアを実行。
- –repair, -r
この2つのオプションを指定するよ!
mysqlcheck -c -r WPdb -uhoge -phogePWD : : WPdb.wp_links OK WPdb.wp_options OK : : |
最適化できたか確認してみる
mysql> show table status\G; *************************** 17. row *************************** Name: wp_options Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 264 Avg_row_length: 2776 Data_length: 732952 Max_data_length: 281474976710655 Index_length: 15360 Data_free: 0 Auto_increment: 39610 Create_time: 2011-05-01 01:58:27 Update_time: 2011-06-11 21:01:54 Check_time: 2011-06-11 21:01:54 Collation: utf8_general_ci Checksum: NULL Create_options: Comment: |
Data_freeがゼロになってるんでOK。
定期的にテーブルを最適化するようにcronに登録する
どのくらいのタイミングで実施するのか迷うのでとりあえず、12時間毎に実行する
crontab -e #MySQLオーバヘッドを解消 0 */12 * * * mysqlcheck -c -r WPdb -uhoge -phogePWD |