次の例は、パフォーマンススキーマのステートメントイベントとステージイベントを使用して、SHOW PROFILES
および SHOW PROFILE
ステートメントによって提供されるプロファイリング情報と同等のデータを取得する方法を示しています。
setup_actors
テーブルを使用すると、ホスト、ユーザーまたはアカウントごとに履歴イベントの収集を制限して、実行時のオーバーヘッドおよび履歴テーブルに収集されるデータ量を減らすことができます。 例の最初のステップは、履歴イベントの収集を特定のユーザーに制限する方法を示しています。
パフォーマンススキーマは、タイミングデータを標準単位に正規化するために、イベントタイマー情報をピコ秒 (1 秒に 1 兆) で表示します。 次の例では、TIMER_WAIT
値を 1000000000000 で除算して、データを秒単位で表示します。 また、値は小数点以下 6 桁に切り捨てられ、SHOW PROFILES
および SHOW PROFILE
ステートメントと同じ形式でデータが表示されます。
-
履歴イベントの収集を、クエリーを実行するユーザーに制限します。 デフォルトでは、
setup_actors
は、すべてのフォアグラウンドスレッドのモニタリングおよび履歴イベント収集を許可するように構成されています:mysql> SELECT * FROM performance_schema.setup_actors; +------+------+------+---------+---------+ | HOST | USER | ROLE | ENABLED | HISTORY | +------+------+------+---------+---------+ | % | % | % | YES | YES | +------+------+------+---------+---------+
setup_actors
テーブルのデフォルト行を更新して、すべてのフォアグラウンドスレッドの履歴イベント収集および監視を無効にし、クエリーを実行するユーザーの監視および履歴イベント収集を有効にする新しい行を挿入します:mysql> UPDATE performance_schema.setup_actors SET ENABLED = 'NO', HISTORY = 'NO' WHERE HOST = '%' AND USER = '%'; mysql> INSERT INTO performance_schema.setup_actors (HOST,USER,ROLE,ENABLED,HISTORY) VALUES('localhost','test_user','%','YES','YES');
これで、
setup_actors
テーブルのデータは次のようになります:mysql> SELECT * FROM performance_schema.setup_actors; +-----------+-----------+------+---------+---------+ | HOST | USER | ROLE | ENABLED | HISTORY | +-----------+-----------+------+---------+---------+ | % | % | % | NO | NO | | localhost | test_user | % | YES | YES | +-----------+-----------+------+---------+---------+
-
setup_instruments
テーブルを更新して、ステートメントおよびステージインストゥルメンテーションが有効になっていることを確認します。 一部のインストゥルメントは、デフォルトですでに有効になっている場合があります。mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE '%statement/%'; mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE '%stage/%';
-
events_statements_*
およびevents_stages_*
コンシューマが有効になっていることを確認します。 一部のコンシューマは、デフォルトですでに有効になっている場合があります。mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events_statements_%'; mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events_stages_%';
-
監視しているユーザーアカウントで、プロファイリングするステートメントを実行します。 例:
mysql> SELECT * FROM employees.employees WHERE emp_no = 10001; +--------+------------+------------+-----------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-----------+--------+------------+ | 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 | +--------+------------+------------+-----------+--------+------------+
-
events_statements_history_long
テーブルをクエリーして、ステートメントのEVENT_ID
を識別します。 このステップは、Query_ID
を識別するためのSHOW PROFILES
の実行に似ています。 次のクエリーでは、SHOW PROFILES
のような出力が生成されます:mysql> SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%10001%'; +----------+----------+--------------------------------------------------------+ | event_id | duration | sql_text | +----------+----------+--------------------------------------------------------+ | 31 | 0.028310 | SELECT * FROM employees.employees WHERE emp_no = 10001 | +----------+----------+--------------------------------------------------------+
-
events_stages_history_long
テーブルをクエリーして、ステートメントステージイベントを取得します。 ステージは、イベントネストを使用してステートメントにリンクされます。 各ステージイベントレコードには、親ステートメントのEVENT_ID
を含むNESTING_EVENT_ID
カラムがあります。mysql> SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=31; +--------------------------------+----------+ | Stage | Duration | +--------------------------------+----------+ | stage/sql/starting | 0.000080 | | stage/sql/checking permissions | 0.000005 | | stage/sql/Opening tables | 0.027759 | | stage/sql/init | 0.000052 | | stage/sql/System lock | 0.000009 | | stage/sql/optimizing | 0.000006 | | stage/sql/statistics | 0.000082 | | stage/sql/preparing | 0.000008 | | stage/sql/executing | 0.000000 | | stage/sql/Sending data | 0.000017 | | stage/sql/end | 0.000001 | | stage/sql/query end | 0.000004 | | stage/sql/closing tables | 0.000006 | | stage/sql/freeing items | 0.000272 | | stage/sql/cleaning up | 0.000001 | +--------------------------------+----------+