インストゥルメント名は '/'
文字で区切られた一連のコンポーネントから構成されます。名前の例:
wait/io/file/myisam/log
wait/io/file/mysys/charset
wait/lock/table/sql/handler
wait/synch/cond/mysys/COND_alarm
wait/synch/cond/sql/BINLOG::update_cond
wait/synch/mutex/mysys/BITMAP_mutex
wait/synch/mutex/sql/LOCK_delete
wait/synch/rwlock/sql/Query_cache_query::lock
stage/sql/closing tables
stage/sql/Sorting result
statement/com/Execute
statement/com/Query
statement/sql/create_table
statement/sql/lock_tables
インストゥルメントの名前空間はツリー状の構造を持ちます。インストゥルメント名のコンポーネントは左から右に、より一般的からより具体的に進みます。名前のコンポーネント数はインストゥルメントの種類によって異なります。
名前の特定のコンポーネントの解釈は、その左側のコンポーネントによって異なります。たとえば、myisam
は次の名前の両方に見られますが、最初の名前の myisam
はファイル I/O に関連し、2 番目のそれは同期インストゥルメントに関連しています。
wait/io/file/myisam/log
wait/synch/cond/myisam/MI_SORT_INFO::cond
インストゥルメント名は、パフォーマンススキーマ実装によって定義された構造を持つプリフィクスと、インストゥルメントコードを実装する開発者によって定義されるサフィクスから構成されます。インストゥルメントプリフィクスのトップレベルコンポーネントはインストゥルメントの種類を示します。このコンポーネントによって、インストゥルメントに適用される setup_timers
テーブル内のイベントタイマーも決まります。インストゥルメントのプリフィクス部分のトップレベルはインストゥルメントの種類を示します。
インストゥルメント名のサフィクス部分は、インストゥルメント自体のコードから生成されます。サフィクスには次のようなレベルが含まれることがあります。
主要コンポーネントの名前 (
myisam
、innodb
、mysys
、またはsql
などのサーバーモジュール) またはプラグイン名。形式
XXX
(グローバル変数) または
(クラスCCC
::MMM
CCC
のメンバーMMM
) でのコード内の変数の名前。例:COND_thread_cache
、THR_LOCK_myisam
、BINLOG::LOCK_index
。
トップレベルインストゥルメントコンポーネント
idle
: インストゥルメントされたアイドルイベント。このインストゥルメントにはそれ以上のコンポーネントがありません。stage
: インストゥルメントされたステージイベント。statement
: インストゥルメントされたステートメントイベント。wait
: インストゥルメントされた待機イベント。
アイドルインストゥルメントコンポーネント
-
idle
アイドルインストゥルメント。パフォーマンススキーマは、セクション22.9.3.5「socket_instances テーブル」の
socket_instances.STATE
カラムの説明に示されているように、アイドルイベントを生成します。
ステージインストゥルメントコンポーネント
ステージインストゥルメントは、形式 stage/
の名前を持ちます。ここで code_area
/stage_name
code_area
は sql
や myisam
などの名前で、stage_name
は、Sorting result
や Sending data
などのステートメント処理のステージを示します。ステージは SHOW PROCESSLIST
によって表示されるか、または INFORMATION_SCHEMA.PROCESSLIST
テーブルに表示されるスレッドの状態に対応します。
ステートメントインストゥルメントコンポーネント
statement/abstract/*
: ステートメント操作の抽象インストゥルメント。抽象インストゥルメントは、正確なステートメントの種類が分かる前のステートメント分類の初期段階時に使用され、その後種類がわかったときに、より具体的なステートメントインストゥルメントに変更されます。このプロセスの説明については、セクション22.9.6「パフォーマンススキーマステートメントイベントテーブル」を参照してください。statement/com
: インストゥルメントされたコマンド操作。これらはCOM_
操作に対応する名前を持ちます (xxx
mysql_com.h
ヘッダーファイルおよびsql/sql_parse.cc
を参照してください。たとえば、statement/com/Connect
およびstatement/com/Init DB
インストゥルメントはCOM_CONNECT
およびCOM_INIT_DB
コマンドに対応します。statement/sql
: インストゥルメントされた SQL ステートメント操作。たとえば、statement/sql/create_db
およびstatement/sql/select
インストゥルメントはCREATE DATABASE
およびSELECT
ステートメントに使用されます。
待機インストゥルメントコンポーネント
-
wait/io
インストゥルメントされた I/O 操作。
-
wait/io/file
インストゥルメントされたファイル I/O 操作。ファイルの場合、待機はファイル操作の完了 (たとえば、
fwrite()
の呼び出し) を待機する時間です。キャッシュのため、この呼び出し内で、ディスクへの物理的なファイル I/O は行われない可能性があります。 -
wait/io/socket
インストゥルメントされたソケット操作。ソケットインストゥルメントは形式
wait/io/socket/sql/
の名前を持ちます。サーバーには、それがサポートする各ネットワークプロトコルの待機ソケットがあります。TCP/IP または Unix ソケットファイル接続の待機ソケットに関連付けられているインストゥルメントは、それぞれsocket_type
server_tcpip_socket
またはserver_unix_socket
のsocket_type
値を持ちます。待機ソケットが接続を検出すると、サーバーは接続を、個別のスレッドによって管理される新しいソケットに転送します。新しい接続スレッドのインストゥルメントは、client_connection
のsocket_type
値を持ちます。 -
wait/io/table
インストゥルメントされたテーブル I/O 操作。これらには、永続的ベーステーブルまたは一時テーブルへの行レベルアクセスが含まれます。行に影響する操作は、フェッチ、挿入、更新、および削除です。ビューの場合、待機はビューによって参照されるベーステーブルに関連付けられます。
ほとんどの待機と同様、テーブル I/O の待機にはほかの待機も含まれることがあります。たとえば、テーブル I/O にはファイル I/O またはメモリー操作が含まれることがあります。そのため、テーブル I/O 待機の
events_waits_current
には通常 2 行あります。詳細については、セクション22.6「パフォーマンススキーマの原子的および分子的イベント」を参照してください。一部の行操作では、複数のテーブル I/O 待機が発生することがあります。たとえば、挿入は更新を発生させるトリガーをアクティブにすることがあります。
-
-
wait/lock
インストゥルメントされたロック操作。
-
wait/lock/table
インストゥルメントされたテーブルロック操作。
-
-
wait/synch
インストゥルメントされた同期オブジェクト。同期オブジェクトでは、
TIMER_WAIT
時間には、オブジェクトへのロックがある場合に、その獲得を試みている間のブロックされる時間の量が含まれます。-
wait/synch/cond
条件は、1 つのスレッドによって、ほかのスレッドに、それらが待機している何かが発生したことを伝えるために使用されます。単一のスレッドが条件を待機していた場合、それはウェイクアップし、その実行を再開できます。複数のスレッドが待機していた場合、それらすべてがウェイクアップし、それらが待機していたリソースを奪い合うことがあります。
-
wait/synch/mutex
ほかのスレッドのリソースへのアクセスを妨げながら、リソース (実行可能コードのセクションなど) へのアクセスを許可するために使用される相互排他オブジェクト。
-
wait/synch/rwlock
ほかのスレッドによるその使用を妨げながら、特定の変数のアクセスをロックするために使用される読み取り/書き込みロックオブジェクト。共有読み取りロックは複数のスレッドによって同時に獲得できます。排他的書き込みロックは、一度に 1 つのスレッドだけが獲得できます。
-