MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  MySQL パフォーマンススキーマ  /  パフォーマンススキーマインストゥルメント命名規則

27.6 パフォーマンススキーマインストゥルメント命名規則

インストゥルメント名は、'/'文字で区切られた一連の要素で構成されます。 名前の例:

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, mysyssql などのサーバーモジュール) の名前またはプラグイン名。

  • 形式 XXX (グローバル変数) または CCC::MMM (クラス CCC のメンバー MMM) でのコード内の変数の名前。 例: COND_thread_cacheTHR_LOCK_myisamBINLOG::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_areasqlmyisam などの値で、instrument_name はインストゥルメントの詳細です。

接頭辞 memory/performance_schema/が付いたインストゥルメントは、パフォーマンススキーマ内の内部バッファーに割り当てられているメモリー量を公開します。 memory/performance_schema/インストゥルメントは組込みであり、常に有効になっており、起動時または実行時に無効にすることはできません。 組込みメモリーインストルメントは、memory_summary_global_by_event_name テーブルにのみ表示されます。 詳細は、セクション27.17「パフォーマンススキーマのメモリー割り当てモデル」を参照してください。

ステージ証書要素

ステージインストゥルメントは、形式 stage/code_area/stage_name の名前を持ちます。ここで code_areasqlmyisam などの名前で、stage_name は、Sorting resultSending 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_servicethread/performance_schema/setup など) で始まります。

待機インストゥルメントの要素

  • wait/io

    インストゥルメントされた I/O 操作。

    • wait/io/file

      インストゥルメントされたファイル I/O 操作。 ファイルの場合、待機はファイル操作の完了 (たとえば、fwrite() の呼び出し) を待機する時間です。 キャッシュのため、この呼び出し内で、ディスクへの物理的なファイル I/O は行われない可能性があります。

    • wait/io/socket

      インストゥルメントされたソケット操作。 ソケットインストゥルメントは形式 wait/io/socket/sql/socket_type の名前を持ちます。 サーバーには、それがサポートする各ネットワークプロトコルの待機ソケットがあります。 TCP/IP または Unix ソケットファイル接続の待機ソケットに関連付けられているインストゥルメントは、それぞれ server_tcpip_socket または server_unix_socketsocket_type 値を持ちます。 待機ソケットが接続を検出すると、サーバーは接続を、個別のスレッドによって管理される新しいソケットに転送します。 新しい接続スレッドのインストゥルメントは、client_connectionsocket_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 は、同時実行性を最適化し、読取り/書込みワークロードのスケーラビリティを向上させます。


関連キーワード:  テーブル, インストゥルメント, パフォーマンス, スキーマ, 要素, wait, 待機, イベント, 操作, events