39
カカカカカカカカカカカカカ MySQL Casual Talks Vol.3 @mikeda

MySQL Casual Talks Vol.3 LT

Embed Size (px)

Citation preview

Page 1: MySQL Casual Talks Vol.3 LT

カジュアルなクエリ品質管理

MySQL Casual Talks Vol.3

@mikeda

Page 2: MySQL Casual Talks Vol.3 LT

まきでいきます (;´Д` ) ハァハァ

Page 3: MySQL Casual Talks Vol.3 LT

自己紹介  @mikeda

– インフラエンジニア– 最近作ってるもの→– MySQL Casual 初参加!

  CROOZ– ソーシャルゲーム、ブログ、…– MySQL 200 台くらい。 SSD 増加中– サービス用 SQL 書いたことない><

Page 4: MySQL Casual Talks Vol.3 LT

今日は

 何番煎じかわからないですが、 クエリ解析の話をしようと思います

Page 5: MySQL Casual Talks Vol.3 LT

はじめに

Page 6: MySQL Casual Talks Vol.3 LT

たまにある光景

「イベント打つから DB 倍にして!」「チューニングでなんとかなりませんか・・・?」「そんな余裕くぁ w せ drftgy ふじこ lp 」

 サーバ増設。その後。。。

「クエリなおしたら負荷半分になったわ」

(#^ω^) ビキビキ

Page 7: MySQL Casual Talks Vol.3 LT

たまにある DB 負荷推移

危険ライン

チューニング

大きな改善・ SSD 投入・ DB 分割

これでしばらく安心や!!!

Page 8: MySQL Casual Talks Vol.3 LT

たまにある DB 負荷推移

しかしなぜか元に戻る

危険ライン

Page 9: MySQL Casual Talks Vol.3 LT

たまにある DB 負荷推移

VDB負荷の V字回復

しかしなぜか元に戻る

危険ライン

Page 10: MySQL Casual Talks Vol.3 LT

なぜ?• クエリ品質の管理ができていない     ↓• 後手後手の対応     ↓• 余計なサーバコスト

Page 11: MySQL Casual Talks Vol.3 LT

サーバエンジニアとして考える サーバ、 MySQL の監視

– CPU 使用率、ディスク IO 、…– スレッド数、各種キャッシュヒット率、…

それだけでいいのか?

クエリ品質も同じ!– 見える化– 指標化– 監視

これ大事!

Page 12: MySQL Casual Talks Vol.3 LT

というわけでその歴史

Page 13: MySQL Casual Talks Vol.3 LT

1.原始の時代

Page 14: MySQL Casual Talks Vol.3 LT

スロークエリ解析• 出てくるのは

– バッチ系、ほんとにどうしようもないクエリ

• 本命を拾えない– 例えば 1 回 50ms かかってる件数多めクエリ

• 本当に問題なクエリがログに現れだした時。。。 既にサービスは落ちている (´ ・ ω ・` ) ショボーン

※ ホントは設定次第でいろいろできます><

Page 15: MySQL Casual Talks Vol.3 LT

職人解析 「サーバ重いっすね」    ↓ 職人が show processlist を連打    ↓ これだ ( ゚ д ゚ ) クワッ !!

職人のノリ次第

※ 現れる頻度の解析は正しいアプローチ

Page 16: MySQL Casual Talks Vol.3 LT

もっと正確で、だれにでもわかるようにしたい

※ ほんとはもっといろいろやってます><

Page 17: MySQL Casual Talks Vol.3 LT

2.全クエリ解析してみよう時代

Page 18: MySQL Casual Talks Vol.3 LT

mk-query-digest でクエリ解析• mk-query-digest

– MaatKIt に入ってるクエリをいい感じに解析してくれるツール– @marqs :『 MaatKIT の紹介』

• tcpdump との組合せ– tcpdump のキャプチャファイルを食える– @ryiwo :『 tcpdump & xtrabackup 』

• アプリ、 MySQL を触らなくていい!  →(自分には)導入が簡単!!!

Page 19: MySQL Casual Talks Vol.3 LT

MaatKit って

 最近、 Percona Toolkit になった・・・?  pt-query-digest ・・・?

Page 20: MySQL Casual Talks Vol.3 LT

MaatKit って

 最近、 Percona Toolkit になった・・・?  pt-query-digest ・・・?

Page 21: MySQL Casual Talks Vol.3 LT

全体的な概要

管理サーバApache DAV on Options Indexes

DBサーバMaatkit 導入済み

①解析スクリプトを送って実行

②結果をWEVDAVでアップ

③ブラウザで確認

毎朝バッチ実行

90台並列※ かぶらないようにアタマに SLEEP

Page 22: MySQL Casual Talks Vol.3 LT

スクリプト 概要• 概要

1.tcpdump でキャプチャ2.mk-query-digest で解析3.結果を管理サーバにアップ

• 細かいところは省略 ブログにアップしてます   http://d.hatena.ne.jp/mikeda/20111204/1322980203

Page 23: MySQL Casual Talks Vol.3 LT

スクリプト ちょっと変えてるところ

• よくある例 # tcpdump -i eth0 port 3306 -s 65535 -x -nn -q -tttt -l > dump.txt

# mk-query-digest --type tcpdump dump.txt

• 自分のやつ # tcpdump -i eth0 port 3306 -s 65535 -w qd.pcap

# tcpdump -s 65535 -x -nn -q -tttt -l -r qd.pcap | \

mk-query-digest --type tcpdump \

--explain "h=127.0.0.1,u=root,p=password”

テキストで保存

pcap形式で保存→ ファイルサイズが 1/3に

--explainオプション→EXPLAIN結果がつく!

Page 24: MySQL Casual Talks Vol.3 LT

ブラウザで確認

DBサーバ名のディレクトリが並んでる

Page 25: MySQL Casual Talks Vol.3 LT

ブラウザで確認

解析結果が 1ヶ月分並んでる

Page 26: MySQL Casual Talks Vol.3 LT

ブラウザで確認

全体的なクエリ統計

クエリランキング

合計実行時間の比率

実行回数

平均実行時間 EXPLAINサマリ

クエリ

Page 27: MySQL Casual Talks Vol.3 LT

ブラウザで確認クエリごとの統計が並ぶ

実行時間、回数接続元 IPなどなど

実行時間分布

サンプルクエリ

EXPLAIN結果

Page 28: MySQL Casual Talks Vol.3 LT

そして・・・• これなら自分でもなんとなくわかる! 

  

• クエリ品質の底上げなるか・・・?

Page 29: MySQL Casual Talks Vol.3 LT

しかし・・・• なかなか見てくれないw

• 見るのめんどくさい →正しいベンチャーマインド

Page 30: MySQL Casual Talks Vol.3 LT

3.カジュアル化の時代

Page 31: MySQL Casual Talks Vol.3 LT

サマリ作成• 毎日バッチでサマリページを作成

• 簡単な指標を作って色付け– 実行時間の比率– 1回あたりの実行時間– EXPLAIN 結果

Page 32: MySQL Casual Talks Vol.3 LT

サマリページ 全体

見た目がカジュアル(しょぼい)!!!

Page 33: MySQL Casual Talks Vol.3 LT

サマリページ 1

ステータス

サマリ解析へのリンク

詳細解析へのリンク

要注意サーバが一目でわかる!

Page 34: MySQL Casual Talks Vol.3 LT

サマリページ 2

要注意クエリが一目でわかる!

Page 35: MySQL Casual Talks Vol.3 LT

サマリページ おまけ

細やかな気づかい!

EXPLAINサマリの対応表と日本男子さんの解説ページへのリンク

Page 36: MySQL Casual Talks Vol.3 LT

ちょっとめんどくさくなくなった!?

Page 37: MySQL Casual Talks Vol.3 LT

そして夢の生活が・・・

赤いのなおしたら負荷下がりました。」「「サーバ減らしましょう( ^ ω ^)ニコッ 」

「サーバ追加必要ですかね?」「緑でこの負荷ですか、 じゃあ足しましょう( ^ ω ^)ニコッ 」

Page 38: MySQL Casual Talks Vol.3 LT

妄想でした。まとめ• クエリ品質管理をカジュアルにやりたい!

– 最低限おさえるべきところが簡単にチェックできるように

• まだまだ精度が高くない– 画一的に指標化しづらい– MySQL 知識不足

• アドバイスお待ちしてます!

Page 39: MySQL Casual Talks Vol.3 LT

終わりです