狠狠撸

狠狠撸Share a Scribd company logo
カジュアルなクエリ品質管理

  MySQL Casual Talks Vol.3
        @mikeda
まきでいきます (;?Д ` ) ????
自己紹介
  @mikeda
 – インフラエンジニア
 – 最近作ってるもの→
 – MySQL Casual 初参加!


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

 何番煎じかわからないですが、
 クエリ解析の話をしようと思います
はじめに
たまにある光景
「イベント打つから DB 倍にして!」
「チューニングでなんとかなりませんか????」
「そんな余裕くぁ w せ drftgy ふじこ lp 」

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

「クエリなおしたら負荷半分になったわ」
(#^ω^) ??????
たまにある DB 負荷推移
          大きな改善
          ? SSD 投入
          ? DB 分割    危険ライン




         これでしばらく安心や!!!
チューニング
たまにある DB 負荷推移


            危険ライン




      しかしなぜか元に戻る
たまにある DB 負荷推移




  V
                危険ライン




       しかしなぜか元に戻る



 DB 負荷の 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       毎朝バッチ実行                    DB サーバ
DAV on                                  Maatkit 導入済み
Options Indexes     ② 結果を WEVDAV でアップ



③ ブラウザで確認




                   90 台並列
                   ※ かぶらないようにアタマに SLEEP
スクリプト 概要
? 概要
   ? tcpdump でキャプチャ
   ? mk-query-digest で解析
   ? 結果を管理サーバにアップ


? 細かいところは省略
 ブログにアップしてます
   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                  テキストで保存

                                              pcap 形式で保存
? 自分のやつ                                       → ファイルサイズが 1/3 に
# 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”
                                           --explain オプション
                                           →EXPLAIN 結果がつく!
ブラウザで確認




DB サーバ名のディレクトリが並んでる
ブラウザで確認




解析結果が 1 ヶ月分並んでる
ブラウザで確認


全体的なクエリ統計

   合計実行時間の比率      平均実行時間    EXPLAIN サマリ




クエリランキング


           実行回数            クエリ
ブラウザで確認
クエリごとの統計が並ぶ
               実行時間、回数
              接続元 IP などなど



               実行時間分布

              サンプルクエリ


               EXPLAIN 結果
そして???
? これなら自分でもなんとなくわかる! 
    

? クエリ品質の底上げなるか????
しかし???
? なかなか見てくれないw

? 見るのめんどくさい
 →正しいベンチャーマインド
3.カジュアル化の时代
サマリ作成
? 毎日バッチでサマリページを作成

? 簡単な指標を作って色付け
 – 実行時間の比率
 – 1回あたりの実行時間
 – EXPLAIN 結果
サマリページ 全体




見た目がカジュアル(しょぼい)!!!
サマリページ 1




ステータス
                 詳細解析へのリンク


         サマリ解析へのリンク



要注意サーバが一目でわかる!
サマリページ 2




要注意クエリが一目でわかる!
サマリページ おまけ
    EXPLAIN サマリの対応表と
    日本男子さんの解説ページへのリンク




細やかな気づかい!
ちょっとめんどくさくなくなった!?
そして夢の生活が???
?赤いのなおしたら負荷下がりました。」
「サーバ減らしましょう( ^ ω ^)??? 」

「サーバ追加必要ですかね?」
「緑でこの負荷ですか、
 じゃあ足しましょう( ^ ω ^)??? 」
妄想でした。まとめ
? クエリ品質管理をカジュアルにやりたい!
 – 最低限おさえるべきところが簡単にチェックでき
   るように

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


? アドバイスお待ちしてます!
终わりです

More Related Content

MySQL Casual Talks Vol.3 LT