MySQLをプロファイる(仮)

6,187 views
5,911 views

Published on

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

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,187
On SlideShare
0
From Embeds
0
Number of Embeds
1,258
Actions
Shares
0
Downloads
29
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

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

×