Performance Schema @ MySQL Casual #2

  • 11,648 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
11,648
On Slideshare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
50
Comments
1
Likes
10

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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