Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MySQLをプロファイる(仮)

6,833 views

Published on

2014/04/14 MyNA(日本MySQLユーザ会)会 2014年4月

Published in: Technology

MySQLをプロファイる(仮)

  1. 1. MySQL をプロファイる ( 仮 ) 2014/04/14 yoku0825 MyNA 会 2014 年 4 月
  2. 2. I'm yoku0825 ● とある企業の DBA ● オラクれない ● ポスグれない ● マイエスキューエる ● 家に帰ると ● 嫁の夫 ● せがれの父 ● My role in MyNA is sliding.         ⊂ ( ゚ Д ゚⊂⌒`つ≡≡≡
  3. 3. 会場提供 LINE++ @studio3104++
  4. 4. 今日のコンセプト ● みなさん MySQL のご機嫌をうかがう時何使って ます? ● 私はこんなの使ってますので、他にも「こんなのあ るよ」ってあったら教えろください
  5. 5. How to profile your MySQL? ● dstat -apr ● 他のサーバーと比べる時に便利 ● SET GLOBAL する時は一緒に流しておく ● 定常値的なものを把握するのに ● カーネルによっては -r 使えない ● iostat -mx ● await, svctm あたり ● I/O なのかそれ以外なのか…というあたり ● top -iH -p `pidof mysqld` ● 見るのは State くらい ● "f"=> "J"(CPU 番号 ), "P"(SWAP)
  6. 6. How to profile your MySQL? ● perf top -p `pidof mysqld` ● 役に立ったことはないけど紳士のたしなみ ● pt-ioprofile --cell sizes --run-time 10 ● どのファイルに対して I/O したか見る ● 中身は strace を整形する bash スクリプト ● Mroonga は mmap 使ってるから見られないことに最 近気が付いた ● 短いスパンで乱打するとハングすることが
  7. 7. How to profile your MySQL? ● innotop ● Query List("Q") ● InnoDB Row Ops("R") ● InnoDB Txns("T") ● InnoDB Lock Waits("K") ● Locks("L") ● Variables & Status("S") – Choose a set of values("s") – Enter variables for commands("e") – 自分でカスタムできるっぽいけどやってない ● InnoDB I/O Info("I")
  8. 8. How to profile your MySQL? ● mysqladmin ex -r -i 2 | grep .. ● 差分だけちゃきちゃき流しっぱにする ● そこにだけ気を取られて他の数値が跳ね上がったり すると orz ● mysql -Ee "SHOW ENGINE INNODB STATUS" | tee >(grep --color -i pending) ● pending なんちゃらだけ見ていたいけど、 pending なんちゃらが出てた時には他の出力も見たい ● gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p `pidof mysqld` ● 世界が止まるので注意 ● perf top と同じくたしなみ
  9. 9. How to profile your MySQL? ● SELECT table_name, index_name, SUM(number_records) AS record, SUM(data_size) AS datasize FROM information_schema.innodb_buffer_page GROUP BY 1, 2; ● 使ってるはずなのに載ってないインデックスとかあ ると泣ける ● SELECT free_page_clock, count(*) FROM information_schema.innodb_buffer_page GROUP BY 1; ● 何回そのページが free されたか ● ずっと載りっぱなしの領域と、どんどん LRU Flush される領域の数の把握
  10. 10. How to profile your MySQL? ● pager grep -v Sleep からの SHOW FULL PROCESSLIST; ● だいたい State 見る ● Waiting for query cache lock に出会うこと多い ● cmake -DENABLE_GPROF=ON ● gprof をオンにしてコンパイル ● 複数スレッドの劣化が激しすぎて微妙だった ● 正常終了時、 datadir に gmon.out を作るの で、 gprof bin/mysqld data/gmon.out で食わせる
  11. 11. How to profile your MySQL? ● cmake -DWITH_VALGRIND=ON ● valgrind --tool=massif mysqld .. ヒープ周り ● valgrind --tool=callgrind mysqld.. コールグラ フ取れるらしいけど使ったことない ● strace -f -p `pidof mysqld` 2>&1 | grep .. ● ソケット周りの I/O を見るときに使うことが多い ● 標準エラー出力に吐いちゃうのでリダイレクト忘れ ると泣きそうになる ● gdb -p `pidof mysqld` ● ステップ実行最強説 ● パフォーマンスのプロファイルには使わない。マ ニュアルよくわからん時とか
  12. 12. How to profile your MySQL? ● SET profiling= 1; <Query>; SHOW PROFILE; ● 問題のクエリーが判ってて、再現性がある場合 ● Status の意味が判らないときはソースコードから 探す ● EXPLAIN .. ● 「ある程度判ってる人」が見た後でも key_len と Extra は見ておく ● possible_keys が見づらくなるから、インデックス にはわかりやすい名前を付けてほしいなー
  13. 13. How to profile your MySQL? ● SET SESSION optimizer_trace= 'enabled=on'; <Query>; SELECT * FROM information_schema.optimizer_traceG ● 実はあんまり見たことない ● ps_helper(sys schema) ● statements_with_full_table_scans とか statements_with_temp_tables とか statements_with_sorting とか schema_unused_indexes とか、名前を聞くだけでス テキそうでしょ? ● https://github.com/MarkLeith/mysql-sys
  14. 14. How to profile your MySQL? ● MySQL Workbench 6.1 ● ps_helper の後継になる sys スキーマを作れる – sys スキーマには i_s を食う VIEW も追加されてる ● しかもマウスでポチポチできて見やすい ● perfornamce_schema ● SELECT event_name, source, timer_wait/ 1000/ 1000/ 1000 AS timer_wait FROM events_stages_history WHERE thread_id= (SELECT thread_id FROM threads WHERE processlist_id= 310) ORDER BY timer_start; ● profiling が deprecated になってしまったのでそ の代替えぽく思ってるやつ ● http://bugs.mysql.com/bug.php?id=72130
  15. 15. Any Suggestions?
  16. 16. Suggestions ● mysqladmin ex -r -i 2 | grep -v ' | 0' ● Suggested by Ronald Bradford ● ↑ だと、 2 秒ごとの SHOW GLOBAL STATUS の差分の 結果のうち、「変化のあったもの (= 0 でないも の ) 」だけをひっかける ● xperf(Windows Only) ● MySQL サポートチームの横道さん ● 使うには SDK 入れる必要があります、だそう ● http://msdn.microsoft.com/en-us/library/window s/hardware/hh162920.aspx

×