Performance Schema 活用入門 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com 〜 カジュアルにディープな機能を使いこなそう 〜
免責事項 <ul><li>本プレゼンテーションにおいて示されている見解は、私自身の見解であって、オラクル・コーポレーションの見解を必ずしも反映したものではありません。ご了承ください。 </li></ul>
Performance Schemaって? <ul><li>情報を収集するためのツール。
MySQL 5.5 から搭載。
ストレージエンジンとして実装。
きめ細かな情報を採取できる。 </li></ul>ふ 〜 ん
MySQL の状況を知りたい!! <ul><li>MySQL を華麗に使い始めたはいいけれど・・・ </li><ul><li>うまく動かない!
性能が出ない!
クエリの結果がおかしい!
リソースの消費が多すぎる! </li></ul></ul>どうなってるのか 知りたい!知りたい!知りたい!!
どうして新しい仕掛けが必要なの? <ul><li>非破壊検査は難しい!
例えば人体の場合 </li><ul><li>脈拍
聴診器
尿検査
X 線撮影
胃カメラ
血液検査
CT スキャン
MRI
: </li></ul></ul>検査対象を 止めるのは NG
MySQL にも 状況を調べる方法が いろいろある。
プロセス監視 <ul><li>最も単純な監視 </li><ul><li>プロセスが存在するかどうか。
中身のことは一切わからない。 </li></ul><li>方法 </li><ul><li>shell> pgrep -x mysqld
shell> mysqladmin ping </li></ul></ul>
STATUS コマンド <ul><li>最も基本的な統計情報が見られる。 </li></ul>Uptime: 79283  Threads: 1  Questions: 265  Slow queries: 0  Opens: 219  Flu...
shell> mysqladmin status </li></ul></ul>
SHOW コマンド <ul><li>各種情報を表示する。 </li><ul><li>統計情報
現在のステータス
ストアドプロシージャで使えれば・・・ </li></ul><li>方法 </li><ul><li>SHOW GLOBAL VARIABLES
SHOW GLOBAL STATUS
SHOW SLAVE STATUS
SHOW BINARY LOGS
: </li></ul></ul>
INFORMATION_SCHEMA <ul><li>SQL 標準で定義された情報取得方法。 </li><ul><li>SELECT で情報にアクセスできる。
スクロールも可。
Upcoming SlideShare
Loading in...5
×

Performance Schema @ MySQL Casual #2

12,047

Published on

MySQL Casual #2で使ったスライドです。

Published in: Technology
1 Comment
10 Likes
Statistics
Notes
No Downloads
Views
Total Views
12,047
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
54
Comments
1
Likes
10
Embeds 0
No embeds

No notes for slide

Performance Schema @ MySQL Casual #2

  1. 1. Performance Schema 活用入門 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com 〜 カジュアルにディープな機能を使いこなそう 〜
  2. 2. 免責事項 <ul><li>本プレゼンテーションにおいて示されている見解は、私自身の見解であって、オラクル・コーポレーションの見解を必ずしも反映したものではありません。ご了承ください。 </li></ul>
  3. 3. Performance Schemaって? <ul><li>情報を収集するためのツール。
  4. 4. MySQL 5.5 から搭載。
  5. 5. ストレージエンジンとして実装。
  6. 6. きめ細かな情報を採取できる。 </li></ul>ふ 〜 ん
  7. 7. MySQL の状況を知りたい!! <ul><li>MySQL を華麗に使い始めたはいいけれど・・・ </li><ul><li>うまく動かない!
  8. 8. 性能が出ない!
  9. 9. クエリの結果がおかしい!
  10. 10. リソースの消費が多すぎる! </li></ul></ul>どうなってるのか 知りたい!知りたい!知りたい!!
  11. 11. どうして新しい仕掛けが必要なの? <ul><li>非破壊検査は難しい!
  12. 12. 例えば人体の場合 </li><ul><li>脈拍
  13. 13. 聴診器
  14. 14. 尿検査
  15. 15. X 線撮影
  16. 16. 胃カメラ
  17. 17. 血液検査
  18. 18. CT スキャン
  19. 19. MRI
  20. 20. : </li></ul></ul>検査対象を 止めるのは NG
  21. 21. MySQL にも 状況を調べる方法が いろいろある。
  22. 22. プロセス監視 <ul><li>最も単純な監視 </li><ul><li>プロセスが存在するかどうか。
  23. 23. 中身のことは一切わからない。 </li></ul><li>方法 </li><ul><li>shell> pgrep -x mysqld
  24. 24. shell> mysqladmin ping </li></ul></ul>
  25. 25. STATUS コマンド <ul><li>最も基本的な統計情報が見られる。 </li></ul>Uptime: 79283 Threads: 1 Questions: 265 Slow queries: 0 Opens: 219 Flush tables: 1 Open tables: 53 Queries per second avg: 0.3 <ul><li>方法 </li><ul><li>mysql> STATUS
  26. 26. shell> mysqladmin status </li></ul></ul>
  27. 27. SHOW コマンド <ul><li>各種情報を表示する。 </li><ul><li>統計情報
  28. 28. 現在のステータス
  29. 29. ストアドプロシージャで使えれば・・・ </li></ul><li>方法 </li><ul><li>SHOW GLOBAL VARIABLES
  30. 30. SHOW GLOBAL STATUS
  31. 31. SHOW SLAVE STATUS
  32. 32. SHOW BINARY LOGS
  33. 33. : </li></ul></ul>
  34. 34. INFORMATION_SCHEMA <ul><li>SQL 標準で定義された情報取得方法。 </li><ul><li>SELECT で情報にアクセスできる。
  35. 35. スクロールも可。
  36. 36. SHOW コマンド涙目。 </li></ul><li>方法 </li><ul><li>SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'hoge'; </li></ul></ul>
  37. 37. EXPLAIN <ul><li>クエリの実行計画を表示する。 </li><ul><li>クエリのチューニングに必須。
  38. 38. オプティマイザの気持ちが分かる! </li></ul><li>方法 </li><ul><li>EXPLAIN SELECT …; </li></ul></ul>
  39. 39. SHOW PROFILE <ul><li>クエリがどこで時間を食っていたかが分かる。 </li><ul><li>個別のセッションで情報採取
  40. 40. ほとんど Sending data だよね・・・ </li></ul><li>使い方 </li><ul><li>set profiling = 1;
  41. 41. SELECT …
  42. 42. SHOW PROFILE; </li></ul></ul>
  43. 43. ログ <ul><li>時系列で過去に起こったイベントを把握する。 </li><ul><li>見られるのは履歴のみ。
  44. 44. 統計情報など気の利いたものはナシ。 </li></ul><li>方法 </li><ul><li>エラーログ
  45. 45. 一般クエリログ
  46. 46. スロークエリログ
  47. 47. バイナリログ </li></ul></ul>
  48. 48. GDB <ul><li>どんな情報でも見られる </li><ul><li>天敵は Optimized away
  49. 49. ただし時間が止まる。
  50. 50. デバッグ情報必須。 </li></ul><li>方法 </li><ul><li>gdb -p `pgrep -x mysqld` </li></ul></ul>
  51. 51. Dtrace/SystemTap... <ul><li>動的にプロセスをトレースする。 </li><ul><li>汎用的な仕組み
  52. 52. スクリプトで極め細やかな調整が可能。
  53. 53. ただし Solaris や Linux 限定 </li></ul><li>方法 </li><ul><li>dtrace -p `pgrep -x mysqld` -s script_name </li></ul></ul>
  54. 54. DBUG トレース <ul><li>デバッグ版で利用できるトレース機能 </li><ul><li>関数の呼び出しとリターン
  55. 55. その他必要に応じて情報を出力
  56. 56. /tmp/mysqld.trace </li></ul><li>方法 </li><ul><li>[mysqld]
  57. 57. debug </li></ul></ul>
  58. 58. すげーっ! 方法がたくさんある!! けどまだ足りないの?
  59. 59. 足りないんです!!
  60. 60. PERFORMANCE_SCHEMA! <ul><li>DTrace の SDT に似ている。
  61. 61. ソースコードに埋めこまれた Instruments という観測点から情報を収集。
  62. 62. 統計情報と履歴を貯めこんで、 SQL を使ってアクセス。
  63. 63. ストレージエンジンとして実装。
  64. 64. プラットフォームフリー。 </li></ul>Windows でも OK !
  65. 65. オーバーヘッドは? <ul><li>CPU </li><ul><li>若干あり。無視できない。
  66. 66. 利用中 PC での比較 </li><ul><li>sysbench 12 スレッド read-only
  67. 67. 2285.76 per sec vs 1804.77 per sec </li></ul></ul><li>メモリ </li><ul><li>設定やバージョンにもよるが数百 MB 〜 </li></ul></ul>
  68. 68. 利用シーン マスター スレーブ スレーブ スレーブ Load Balancer P_S APP
  69. 69. INFORMATION_SCHEMA との違い <ul>I_S <li>I_S 専用の枠組みがあり。
  70. 70. 都度情報収集
  71. 71. SQL 標準
  72. 72. 調整する余地なし </li></ul><ul>P_S <li>ストレージエンジンとして実装
  73. 73. P_S が保存
  74. 74. MySQL 固有
  75. 75. フィルタ、タイマーなど設定可 </li></ul>
  76. 76. 設定 <ul><li>MySQL 5.5 以上
  77. 77. mysql_install_db
  78. 78. 設定 </li><ul><li>[mysqld]
  79. 79. performance_schema
  80. 80. ※ 起動中に変更不可 </li></ul></ul>
  81. 81. 基本的な使い方 SELECT * FROM performance_schema.objects_summary_global_by_type where object_schema='sbtest'G *************************** 1. row *************************** OBJECT_TYPE: TABLE OBJECT_SCHEMA: sbtest OBJECT_NAME: sbtest COUNT_STAR: 25368838 SUM_TIMER_WAIT: 35553955610133 MIN_TIMER_WAIT: 61953 AVG_TIMER_WAIT: 1401180 MAX_TIMER_WAIT: 21716203284 1 row in set (0.01 sec)
  82. 82. mysql-5.6-labs-performance-schema <ul><li>http://labs.mysql.com/
  83. 83. MySQL 5.6 で搭載される
  84. 84. かも知れない機能が追加されている。
  85. 85. ようやく実践的に? </li></ul>
  86. 86. カジュアルに使うには? 残念ながら そんな方法はない
  87. 87. テーブルの種類 <ul><li>setup テーブル … 各種設定を行う。
  88. 88. instance テーブル … mutex 等のインスタンス情報。
  89. 89. wait event テーブル … 各種操作にかかった時間を記録
  90. 90. stage event テーブル … プロファイリング情報
  91. 91. statement event テーブル … コマンド実行の履歴
  92. 92. table io event テーブル … テーブルごとのストレージエンジンへのリクエスト
  93. 93. summary テーブル … 各種イベントの統計情報を記録 </li></ul>
  94. 94. Summary テーブル命名規約 events_stages_summary_by_host_by_event_name <ul><li>wait
  95. 95. stage
  96. 96. statement
  97. 97. table io </li></ul><ul><li>by_host_by_event_name
  98. 98. by_instance
  99. 99. by_thread_by_event_name
  100. 100. by_user_by_event_name
  101. 101. by_user_host_by_event_name
  102. 102. by_global_by_event_name </li></ul>何のサマリーなのか 何でグルーピングしているか
  103. 103. 便利なテーブル <ul><li>objects_summary_global_by_type … テーブルへのアクセスにかかる時間の合計、最大、最小、平均値を計測。
  104. 104. table_io_waits_summary_by_table … 上記のテーブルより少し詳細な情報を表示できる。
  105. 105. events_statements_history_long … 直近のステートメントの履歴を表示(サンプリングに最適!) </li></ul>
  106. 106. 数値を見るときのポイント <ul><li>時間の単位はピコ秒
  107. 107. ORDER BY COUNT_STAR DESC </li><ul><li>タイマーの合計値や平均値でソートしても可
  108. 108. pager less </li></ul><li>よく見るものはビューを定義しておくのもアリ </li></ul>
  109. 109. ビューの例 create view top_access_tables as select * from performance_schema. objects_summary_global_by_type order by count_star desc limit 10;
  110. 110. デモ
  111. 111. まとめ <ul><li>P_S は情報を見るための新たな手段
  112. 112. プラットフォームフリーだから Windows でも安心
  113. 113. オーバーヘッドが少しあるので使いどころは慎重に。
  114. 114. テーブル数が多いのでカジュアルに使うのは難しい。
  115. 115. まだまだ発展途上。
  116. 116. 便利なビューが欲しくなるかも。 </li></ul>
  117. 117. Q&A
  118. 118. 自己紹介 <ul><li>MySQL サポートエンジニア。
  119. 119. Blog: http://nippondanji.blogspot.com/
  120. 120. Twitter: @nippondanji
  121. 121. http://www.facebook.com/mikiya.okuno
  122. 122. 著書 </li><ul><li>エキスパートのための MySQL[ 運用 + 管理 ] トラブルシューティングガイド </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×