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