Upload
tomohiro-ikeda
View
11.800
Download
4
Embed Size (px)
Citation preview
カジュアルなクエリ品質管理
MySQL Casual Talks Vol.3
@mikeda
まきでいきます (;´Д` ) ハァハァ
自己紹介 @mikeda
– インフラエンジニア– 最近作ってるもの→– MySQL Casual 初参加!
CROOZ– ソーシャルゲーム、ブログ、…– MySQL 200 台くらい。 SSD 増加中– サービス用 SQL 書いたことない><
今日は
何番煎じかわからないですが、 クエリ解析の話をしようと思います
はじめに
たまにある光景
「イベント打つから DB 倍にして!」「チューニングでなんとかなりませんか・・・?」「そんな余裕くぁ w せ drftgy ふじこ lp 」
サーバ増設。その後。。。
「クエリなおしたら負荷半分になったわ」
(#^ω^) ビキビキ
たまにある DB 負荷推移
危険ライン
チューニング
大きな改善・ SSD 投入・ DB 分割
これでしばらく安心や!!!
たまにある DB 負荷推移
しかしなぜか元に戻る
危険ライン
たまにある DB 負荷推移
VDB負荷の V字回復
しかしなぜか元に戻る
危険ライン
なぜ?• クエリ品質の管理ができていない ↓• 後手後手の対応 ↓• 余計なサーバコスト
サーバエンジニアとして考える サーバ、 MySQL の監視
– CPU 使用率、ディスク IO 、…– スレッド数、各種キャッシュヒット率、…
それだけでいいのか?
クエリ品質も同じ!– 見える化– 指標化– 監視
これ大事!
というわけでその歴史
1.原始の時代
スロークエリ解析• 出てくるのは
– バッチ系、ほんとにどうしようもないクエリ
• 本命を拾えない– 例えば 1 回 50ms かかってる件数多めクエリ
• 本当に問題なクエリがログに現れだした時。。。 既にサービスは落ちている (´ ・ ω ・` ) ショボーン
※ ホントは設定次第でいろいろできます><
職人解析 「サーバ重いっすね」 ↓ 職人が show processlist を連打 ↓ これだ ( ゚ д ゚ ) クワッ !!
職人のノリ次第
※ 現れる頻度の解析は正しいアプローチ
もっと正確で、だれにでもわかるようにしたい
※ ほんとはもっといろいろやってます><
2.全クエリ解析してみよう時代
mk-query-digest でクエリ解析• mk-query-digest
– MaatKIt に入ってるクエリをいい感じに解析してくれるツール– @marqs :『 MaatKIT の紹介』
• tcpdump との組合せ– tcpdump のキャプチャファイルを食える– @ryiwo :『 tcpdump & xtrabackup 』
• アプリ、 MySQL を触らなくていい! →(自分には)導入が簡単!!!
MaatKit って
最近、 Percona Toolkit になった・・・? pt-query-digest ・・・?
MaatKit って
最近、 Percona Toolkit になった・・・? pt-query-digest ・・・?
全体的な概要
管理サーバApache DAV on Options Indexes
DBサーバMaatkit 導入済み
①解析スクリプトを送って実行
②結果をWEVDAVでアップ
③ブラウザで確認
毎朝バッチ実行
90台並列※ かぶらないようにアタマに SLEEP
スクリプト 概要• 概要
1.tcpdump でキャプチャ2.mk-query-digest で解析3.結果を管理サーバにアップ
• 細かいところは省略 ブログにアップしてます http://d.hatena.ne.jp/mikeda/20111204/1322980203
スクリプト ちょっと変えてるところ
• よくある例 # 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結果がつく!
ブラウザで確認
DBサーバ名のディレクトリが並んでる
ブラウザで確認
解析結果が 1ヶ月分並んでる
ブラウザで確認
全体的なクエリ統計
クエリランキング
合計実行時間の比率
実行回数
平均実行時間 EXPLAINサマリ
クエリ
ブラウザで確認クエリごとの統計が並ぶ
実行時間、回数接続元 IPなどなど
実行時間分布
サンプルクエリ
EXPLAIN結果
そして・・・• これなら自分でもなんとなくわかる!
• クエリ品質の底上げなるか・・・?
しかし・・・• なかなか見てくれないw
• 見るのめんどくさい →正しいベンチャーマインド
3.カジュアル化の時代
サマリ作成• 毎日バッチでサマリページを作成
• 簡単な指標を作って色付け– 実行時間の比率– 1回あたりの実行時間– EXPLAIN 結果
サマリページ 全体
見た目がカジュアル(しょぼい)!!!
サマリページ 1
ステータス
サマリ解析へのリンク
詳細解析へのリンク
要注意サーバが一目でわかる!
サマリページ 2
要注意クエリが一目でわかる!
サマリページ おまけ
細やかな気づかい!
EXPLAINサマリの対応表と日本男子さんの解説ページへのリンク
ちょっとめんどくさくなくなった!?
そして夢の生活が・・・
赤いのなおしたら負荷下がりました。」「「サーバ減らしましょう( ^ ω ^)ニコッ 」
「サーバ追加必要ですかね?」「緑でこの負荷ですか、 じゃあ足しましょう( ^ ω ^)ニコッ 」
妄想でした。まとめ• クエリ品質管理をカジュアルにやりたい!
– 最低限おさえるべきところが簡単にチェックできるように
• まだまだ精度が高くない– 画一的に指標化しづらい– MySQL 知識不足
• アドバイスお待ちしてます!
終わりです