mysqlをプロファイる(仮)

16

Click here to load reader

Upload: yoku0825

Post on 30-Jun-2015

5.213 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: MySQLをプロファイる(仮)

MySQLをプロファイる(仮)

2014/04/14yoku0825

MyNA会 2014年 4月

Page 2: MySQLをプロファイる(仮)

I'm yoku0825

● とある企業のDBA● オラクれない● ポスグれない● マイエスキューエる

● 家に帰ると● 嫁の夫● せがれの父

● My role in MyNA is sliding.        ⊂( ゚Д ゚⊂⌒`つ≡≡≡

Page 3: MySQLをプロファイる(仮)

会場提供

LINE++@studio3104++

Page 4: MySQLをプロファイる(仮)

今日のコンセプト

● みなさんMySQLのご機嫌をうかがう時何使ってます?● 私はこんなの使ってますので、他にも「こんなのあるよ」ってあったら教えろください

Page 5: MySQLをプロファイる(仮)

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)

Page 6: MySQLをプロファイる(仮)

How to profile your MySQL?

● perf top -p `pidof mysqld`● 役に立ったことはないけど紳士のたしなみ

● pt-ioprofile --cell sizes --run-time 10● どのファイルに対してI/Oしたか見る● 中身はstraceを整形するbashスクリプト● Mroongaは mmap使ってるから見られないことに最近気が付いた

● 短いスパンで乱打するとハングすることが

Page 7: MySQLをプロファイる(仮)

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")

Page 8: MySQLをプロファイる(仮)

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と同じくたしなみ

Page 9: MySQLをプロファイる(仮)

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される領域の数の把握

Page 10: MySQLをプロファイる(仮)

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で食わせる

Page 11: MySQLをプロファイる(仮)

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`● ステップ実行最強説● パフォーマンスのプロファイルには使わない。マニュアルよくわからん時とか

Page 12: MySQLをプロファイる(仮)

How to profile your MySQL?

● SET profiling= 1; <Query>; SHOW PROFILE;● 問題のクエリーが判ってて、再現性がある場合● Statusの意味が判らないときはソースコードから探す

● EXPLAIN ..● 「ある程度判ってる人」が見た後でもkey_lenとExtraは見ておく

● possible_keysが見づらくなるから、インデックスにはわかりやすい名前を付けてほしいなー

Page 13: MySQLをプロファイる(仮)

How to profile your MySQL?

● SET SESSION optimizer_trace= 'enabled=on'; <Query>; SELECT * FROM information_schema.optimizer_trace\G● 実はあんまり見たことない

● 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

Page 14: MySQLをプロファイる(仮)

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

Page 15: MySQLをプロファイる(仮)

Any Suggestions?

Page 16: MySQLをプロファイる(仮)

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/windows/hardware/hh162920.aspx