コンシューマの On/Off
計器がデータを収集するポイントという観点だとすると、コンシューマはデータを消費するための仕組みであり、データを一時保存しておく場所となる。個々のコンシューマはパフォーマンススキーマ上のテーブルとして具現化されており、どのようなコンシューマが存在するかは setup_consumers テーブルを見るのが手っ取り早い。
mysql> SELECT * FROM setup_consumers;
+----------------------------------+---------+
| NAME | ENABLED |
+----------------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | NO |
| events_transactions_current | NO |
| events_transactions_history | NO |
| events_transactions_history_long | NO |
| events_waits_current | NO |
| events_waits_history | NO |
| events_waits_history_long | NO |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+----------------------------------+---------+
15 rows in set (0.00 sec)
なお、個々のコンシューマには以下のような上下関係があり、上位のコンシューマが有効になっていないと下位のコンシューマは情報収集ができない。
global_instrumentation
thread_instrumentation
events_waits_current
events_waits_history
events_waits_history_long
events_stages_current
events_stages_history
events_stages_history_long
events_statements_current
events_statements_history
events_statements_history_long
events_transactions_current
events_transactions_history
events_transactions_history_long
statements_digest
global_instrumentation というコンシューマが最上位であり、これが有効化されていないと、ほかのコンシューマは全て無効となる。
スレッドごと、ダイジェストごとのコンシューマが次の段階であり、スレッドの配下にはスコープに応じたコンシューマが 4 つある。
それぞれの意味を以下に記載する。
コンシューマ名 | スコープ | 説明 |
---|---|---|
events_stages_current | ステージ | 個々のステージを対象にしたコンシューマ。ステージとは各 SQL の実行における段階のこと。SQL の種類によってどのようなステージが実行されるかは異なる |
events_statements_current | SQL 文 | 1 つの SQL 文ごとのコンシューマ |
events_statements_current | トランザクション | トランザクション全体を対象にしたコンシューマ |
events_waits_current | 計器 | 1 つの計器を待っている間に集計されるコンシューマ |
これら 4 つのコンシューマには同じ名前のテーブルがあり、そのテーブルへのデータ提供が行われるかどうかを setup_consumers テーブルで設定するようになっている。
データを取得するためのテーブルとオン種0まの関係性は _current 、_history 、_history_long というバリエーションの存在のために 1:1 にはなっていないが、以下はステートメントごとに集計を行うコンシューマを有効化するコマンドとなる。
mysql> UPDATE setup_consumers SET ENABLED='YES' WHERE NAME LIKE 'events_statements%';
Query OK, 1 row affected (0.00 sec)
Rows matched: 3 Changed: 1 Warnings: 0
なお、_history コンシューマはスレッドごとの履歴を、_history_long は MySQL サーバ全体の履歴を参照できるようになっている。
オブジェクトの On/Off
setup_objects テーブルを使用すると、各種オブジェクトごとにデータ収集の on/off を切り替えられる。デフォルトでは情報スキーマとパフォーマンススキーマを除く、すべてのオブジェクトに対してデータ収集が有効となっている。特定のオブジェクトだけを追跡したい場合は、一旦全てのオブジェクトに対するデータ取集をオフにし、それから個別のものだけをオンにすれば良い。
setup_objects で指定できるオブジェクトには TABLE 、FUNCTION 、PROCEDURE 、TRIGGER 、EVENT がある。
例えば hoge にあるテーブルだけを追跡したい場合は、以下のように setup_objects テーブルを更新する。
mysql> UPDATE setup_objects SET ENABLED='No', TIMED='No';
Query OK, 5 rows affected (0.01 sec)
Rows matched: 20 Changed: 5 Warnings: 0
mysql> INSERT INTO setup_objects VALUES ('TABLE', 'hoge', '%', 'Yes', 'Yes');
Query OK, 1 row affected (0.01 sec)
スレッドの On/Off
データ収集は現在存在するスレッドごとに on/off を切り替えられるようになっている。threads テーブルを更新することで動的に各スレッドのデータ収集をコントロールできる。
しかしスレッドは必要に応じて作成と破棄が繰り返されるので、setup_actors により、ユーザーアカウントごとのスレッドの初期状態を設定することが可能となっている。ENABLED と HISTORY というカラムがあり、それぞれ YES か NO で設定する。ENABLED は _current コンシューマに対して、HISTORY は _history コンシューマに対して on/off を切り替える。
mysql> SELECT * FROM setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| % | % | % | YES | YES |
+------+------+------+---------+---------+
1 row in set (0.00 sec)