もう2か月近く前の事になるけど、SlowqueryLogを取るように設定した。
毎朝ログを見ているものの、見てるだけ~(懐かしいなあ)でとくに何もしていなかったのだが、これでは宝の持ち腐れ~っだったわけだけど、ここ2カ月くらいずっと仮想環境にはまってたのでまあいいかなと。
今はDebianのPreceed作成が順調に進んでいるとこだけど、気まぐれで別の事をちょこっと調べたら、ちょっとはまってしまってしばらく弄ってたので、日記にアップしようと思った。
ログを調べてみよう
メールも来ているけど、せっかくログインしたしコマンドで見てみよう。
# mysqldumpslow -s t /var/lib/mysql/slow.log
上のコマンドで順番に並べてくれるらしい。ここ数日のものを調べてみたら1個だけ数字がでかいのがあった。
Reading mysql slow query log from /var/lib/mysql/slow.log.20131022 Count: 884 Time=0.02s (20s) Lock=0.00s (0s) Rows=277.2 (245047), wpdata[wpdata]@localhost SELECT option_name, option_value FROM wp_options WHERE autoload = 'S' Reading mysql slow query log from /var/lib/mysql/slow.log.20131023 Count: 1165 Time=0.02s (26s) Lock=0.00s (0s) Rows=277.6 (323453), wpdata[wpdata]@localhost SELECT option_name, option_value FROM wp_options WHERE autoload = 'S' Reading mysql slow query log from /var/lib/mysql/slow.log.20131021 Count: 1354 Time=0.02s (31s) Lock=0.00s (0s) Rows=277.8 (376113), wpdata[wpdata]@localhost SELECT option_name, option_value FROM wp_options WHERE autoload = 'S'
これは改善の余地がありそうだ(たぶん)。DBサーバーのチューンではExplainというのが定番なようで、そのExplainを使ってこのテーブルをちょっと調べてみる。
mysql> EXPLAIN SELECT option_name, option_value FROM wp_options WHERE autoload = 'S'\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: wp_options type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 13516 Extra: Using where 1 row in set (0.00 sec) ERROR: No query specified
こんな感じらしい。
タイトルにもなってるインデックスを張るってことだけど、これはそのままの意味でインデックスをつけます。
あの文房具屋さんでインデックスくださいって言ったら出てくるインデックスそのものですわ。
インデックスを張るのも何種類か方法があるみたいだけど、今回はCreate indexを使った。
っていうかMysqlには全然詳しくなくって、見たまま書いてるのでそこは参考にしようとしている人は注意してな。
ログインしてさっそく張ってみる。
mysql> create index idx01_wp_options on wp_options(autoload); Query OK, 14331 rows affected (0.35 sec) Records: 14331 Duplicates: 0 Warnings: 0
これで終わりだ。ではもっかいExplainでテーブルを見ると。
mysql> EXPLAIN SELECT option_name, option_value FROM wp_options WHERE autoload = 'S'\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: wp_options type: ref possible_keys: idx01_wp_options key: idx01_wp_options key_len: 62 ref: const rows: 1 Extra: Using where 1 row in set (0.00 sec) ERROR: No query specified
これで明日以降のログを見てのお楽しみってな。
ものによってはインデックスは張らずにALLのままの方が良かったりするらしいので、設定して負荷が上がったりしたら即止めでいいと思うけど、じっくり時間をかける必要がありそうだね。
今回はテーブル1個で終わるけどw
まだほかにもチューンできそうなログはあるので、今回の結果が良かったらまたやりたいですね。
参考サイト
プログラムと絵と写真
mysql5.5 で slow query log スロークエリーログ を採る
QuickKnowLedge
遅いクエリーを検出する①
MySQL.COM
6.2.1. EXPLAIN
を使用して、クエリを最適化する