MySQLのメンテナンス

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
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です