Slowquerylogの結果からインデックスを張ってみた

もう2か月近く前の事になるけど、SlowqueryLogを取るように設定した。

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を使用して、クエリを最適化する

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *