インストゥルメント名は、'/'
文字で区切られた一連の要素で構成されます。 名前の例:
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
errors
インストゥルメントの名前空間はツリー状の構造を持ちます。 インストゥルメント名の要素は左から右に、より一般的なものからより具体的なものへと進行します。 名前が持つ要素の数は、インストゥルメントのタイプによって異なります。
名前内の特定の要素の解釈は、その左側の要素によって異なります。 たとえば、myisam
は次の名前の両方に見られますが、最初の名前の myisam
はファイル I/O に関連し、2 番目のそれは同期インストゥルメントに関連しています。
wait/io/file/myisam/log
wait/synch/cond/myisam/MI_SORT_INFO::cond
インストゥルメント名は、パフォーマンススキーマ実装によって定義された構造を持つプリフィクスと、インストゥルメントコードを実装する開発者によって定義されるサフィクスから構成されます。 インストゥルメント接頭辞の最上位要素はインストゥルメントのタイプを示します。 この要素は、performance_timers
テーブルのどのイベントタイマーがインストゥルメントに適用されるかも決定します。 インストゥルメントのプリフィクス部分のトップレベルはインストゥルメントの種類を示します。
インストゥルメント名のサフィクス部分は、インストゥルメント自体のコードから生成されます。 サフィクスには次のようなレベルが含まれることがあります。
メジャー要素 (
myisam
,innodb
,mysys
やsql
などのサーバーモジュール) の名前またはプラグイン名。形式
XXX
(グローバル変数) または
(クラスCCC
::MMM
CCC
のメンバーMMM
) でのコード内の変数の名前。 例:COND_thread_cache
、THR_LOCK_myisam
、BINLOG::LOCK_index
。
idle
: インストゥルメントされたアイドルイベント。 このインストゥルメントにはこれ以上要素はありません。error
: インストゥルメントされたエラーイベント。 このインストゥルメントにはこれ以上要素はありません。memory
: インストゥルメントされたメモリーイベント。stage
: インストゥルメントされたステージイベント。statement
: インストゥルメントされたステートメントイベント。transaction
: インストゥルメントされたトランザクションイベント。 このインストゥルメントにはこれ以上要素はありません。wait
: インストゥルメントされた待機イベント。
idle
インストゥルメントはアイドルイベントに使用されます。このイベントは、セクション27.12.3.5「socket_instances テーブル」 の socket_instances.STATE
カラムの説明に従ってパフォーマンススキーマによって生成されます。
error
インストゥルメントは、サーバーのエラーおよび警告に関する情報を収集するかどうかを示します。 このインストゥルメントはデフォルトで有効になっています。 タイミング情報が収集されないため、setup_instruments
テーブルの error
行の TIMED
カラムは適用できません。
メモリーインストゥルメンテーションはデフォルトで有効になっています。 メモリーインツルメンテーションは、起動時に有効化または無効化できます。また、setup_instruments
テーブル内の関連するインストゥルメントの ENABLED
カラムを更新することで、実行時に動的に有効化または無効化できます。 メモリーインストゥルメントの名前の形式は memory/
で、ここで、code_area
/instrument_name
code_area
は sql
や myisam
などの値で、instrument_name
はインストゥルメントの詳細です。
接頭辞 memory/performance_schema/
が付いたインストゥルメントは、パフォーマンススキーマ内の内部バッファーに割り当てられているメモリー量を公開します。 memory/performance_schema/
インストゥルメントは組込みであり、常に有効になっており、起動時または実行時に無効にすることはできません。 組込みメモリーインストルメントは、memory_summary_global_by_event_name
テーブルにのみ表示されます。 詳細は、セクション27.17「パフォーマンススキーマのメモリー割り当てモデル」を参照してください。
ステージインストゥルメントは、形式 stage/
の名前を持ちます。ここで code_area
/stage_name
code_area
は sql
や myisam
などの名前で、stage_name
は、Sorting result
や Sending data
などのステートメント処理のステージを示します。 ステージは SHOW PROCESSLIST
によって表示されるか、または INFORMATION_SCHEMA.PROCESSLIST
テーブルに表示されるスレッドの状態に対応します。
statement/abstract/*
: ステートメント操作の抽象インストゥルメント。 抽象インストゥルメントは、正確なステートメントの種類が分かる前のステートメント分類の初期段階時に使用され、その後種類がわかったときに、より具体的なステートメントインストゥルメントに変更されます。 このプロセスの説明については、セクション27.12.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/scheduler/event
: イベントスケジューラによって実行されたすべてのイベントを追跡する単一のインストゥルメント。 このインストゥルメントは、スケジュールされたイベントの実行が開始されると再生されます。statement/sp
: ストアドプログラムによって実行されるインストゥルメントされた内部命令。 たとえば、statement/sp/cfetch
およびstatement/sp/freturn
インストゥルメントは、カーソルフェッチおよび関数の戻り命令に使用されます。statement/sql
: インストゥルメントされた SQL ステートメント操作。 たとえば、statement/sql/create_db
およびstatement/sql/select
インストゥルメントはCREATE DATABASE
およびSELECT
ステートメントに使用されます。
インストゥルメントされたスレッドは、スレッドクラス名と属性を公開する setup_threads
テーブルに表示されます。
スレッドインストゥルメントは、thread
(thread/sql/parser_service
や thread/performance_schema/setup
など) で始まります。
-
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 行あります。 詳細については、セクション27.8「パフォーマンススキーマの原子的および分子的イベント」を参照してください。一部の行操作では、複数のテーブル I/O 待機が発生することがあります。 たとえば、挿入は更新を発生させるトリガーをアクティブにすることがあります。
-
-
wait/lock
インストゥルメントされたロック操作。
-
wait/lock/table
インストゥルメントされたテーブルロック操作。
-
wait/lock/metadata/sql/mdl
インストゥルメントされたメタデータロック操作。
-
-
wait/synch
インストゥルメントされた同期オブジェクト。 同期オブジェクトでは、
TIMER_WAIT
時間には、オブジェクトへのロックがある場合に、その獲得を試みている間のブロックされる時間の量が含まれます。-
wait/synch/cond
条件は、1 つのスレッドによって、ほかのスレッドに、それらが待機している何かが発生したことを伝えるために使用されます。 単一のスレッドが条件を待機していた場合、それはウェイクアップし、その実行を再開できます。 複数のスレッドが待機していた場合、それらすべてがウェイクアップし、それらが待機していたリソースを奪い合うことがあります。
-
wait/synch/mutex
ほかのスレッドのリソースへのアクセスを妨げながら、リソース (実行可能コードのセクションなど) へのアクセスを許可するために使用される相互排他オブジェクト。
-
wait/synch/prlock
優先度 rwlock ロックオブジェクト。
-
wait/synch/rwlock
他のスレッドによる使用を防止しながら、特定の変数をアクセス用にロックするために使用されるプレーン read/write lock オブジェクト。 共有読み取りロックは複数のスレッドによって同時に獲得できます。 排他的書き込みロックは、一度に 1 つのスレッドだけが獲得できます。
-
wait/synch/sxlock
共有排他 (SX) ロックは、他のスレッドによる一貫性のない読取りを許可しながら、共通リソースへの書込みアクセスを提供する rwlock ロックオブジェクトのタイプです。
sxlocks
は、同時実行性を最適化し、読取り/書込みワークロードのスケーラビリティを向上させます。
-