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. How to profile your MySQL?
● perf top -p `pidof mysqld`
●
役に立ったことはないけど紳士のたしなみ
● pt-ioprofile --cell sizes --run-time 10
● どのファイルに対して I/O したか見る
● 中身は strace を整形する bash スクリプト
●
Mroonga は mmap 使ってるから見られないことに最
近気が付いた
●
短いスパンで乱打するとハングすることが
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. 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. 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. 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 で食わせる
12. How to profile your MySQL?
● SET profiling= 1; <Query>; SHOW PROFILE;
●
問題のクエリーが判ってて、再現性がある場合
● Status の意味が判らないときはソースコードから
探す
●
EXPLAIN ..
● 「ある程度判ってる人」が見た後でも key_len と
Extra は見ておく
● possible_keys が見づらくなるから、インデックス
にはわかりやすい名前を付けてほしいなー
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. 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