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


27.12.2.3 setup_instruments テーブル

setup_instruments テーブルは、イベントを収集できるインストゥルメントされたオブジェクトのクラスを一覧表示します。

mysql> SELECT * FROM performance_schema.setup_instruments\G
*************************** 1. row ***************************
         NAME: wait/synch/mutex/pfs/LOCK_pfs_share_list
      ENABLED: NO
        TIMED: NO
   PROPERTIES: singleton
   VOLATILITY: 1
DOCUMENTATION: Components can provide their own performance_schema tables.
               This lock protects the list of such tables definitions.
...
*************************** 369. row ***************************
         NAME: stage/sql/executing
      ENABLED: NO
        TIMED: NO
   PROPERTIES:
   VOLATILITY: 0
DOCUMENTATION: NULL
...
*************************** 687. row ***************************
         NAME: statement/abstract/Query
      ENABLED: YES
        TIMED: YES
   PROPERTIES: mutable
   VOLATILITY: 0
DOCUMENTATION: SQL query just received from the network. At this point,
               the real statement type is unknown, the type will be
               refined after SQL parsing.
...
*************************** 696. row ***************************
         NAME: memory/performance_schema/metadata_locks
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: global_statistics
   VOLATILITY: 1
DOCUMENTATION: Memory used for table performance_schema.metadata_locks
...

ソースコードに追加された各インストゥルメントは、インストゥルメントコードが実行されない場合でも、setup_instruments テーブルの行を提供します。 インストゥルメントが有効化されて実行されると、インストゥルメントされたインスタンスが作成され、file_instancesrwlock_instances などの xxx_instances テーブルに表示されます。

ほとんどの setup_instruments 行を変更すると、すぐに監視に影響します。 一部のインストゥルメントでは、変更はサーバーの起動時にのみ有効です。実行時に変更しても効果はありません。 これは主にサーバー内の mutex、条件、および rwlocks に影響しますが、これが当てはまるほかのインストゥルメントが存在する可能性があります。

イベントフィルタリングにおける setup_instruments テーブルの役割の詳細については、セクション27.4.3「イベントの事前フィルタリング」を参照してください。

setup_instruments テーブルにはこれらのカラムがあります。

  • NAME

    インストゥルメント名。 セクション27.6「パフォーマンススキーマインストゥルメント命名規則」に説明するように、インストゥルメント名には複数の部分があり、階層を形成することがあります。 インストゥルメントの実行から生成されるイベントには、インストゥルメント NAME 値から取得される EVENT_NAME 値があります。 (イベントには実際には名前がありませんが、これによって、イベントをインストゥルメントに関連付ける方法を提供します。)

  • ENABLED

    インストゥルメントが有効にされているかどうか。 値は YES または NO です。 無効にされたインストゥルメントはイベントを生成しません。 このカラムは変更できますが、ENABLED の設定は、すでに作成されているインストゥルメントには影響しません。

  • TIMED

    インストゥルメントの時間が測定されるかどうか。 値は、YESNO または NULL です。 このカラムは変更できますが、TIMED の設定は、すでに作成されているインストゥルメントには影響しません。

    TIMEDNULL は、インストゥルメントがタイミングをサポートしていないことを示します。 たとえば、メモリー操作は時間指定されていないため、その TIMED カラムは NULL です。

    タイミングをサポートするインストゥルメントに対して TIMEDNULL に設定しても、タイミングをサポートしないインストゥルメントに対して TIMEDNULL 以外に設定しても効果はありません。

    有効にされたインストゥルメントの時間が測定されない場合、インストゥルメントコードは有効ですが、タイマーは有効ではありません。 インストゥルメントによって生成されたイベントの TIMER_STARTTIMER_END、および TIMER_WAIT タイマー値が NULL になります。 これによって、サマリーテーブルの合計、最小、最大、および平均の時間値の計算時に、それらの値が無視されます。

  • PROPERTIES

    インストゥルメントプロパティ。 このカラムは SET データ型を使用するため、インストゥルメントごとに次のリストの複数のフラグを設定できます:

    • global_statistics: インストゥルメントはグローバルサマリーのみを生成します。 スレッドごと、アカウントごと、ユーザーごと、ホストごとなど、より詳細なレベルのサマリーは使用できません。 たとえば、ほとんどのメモリーインストゥルメントではグローバルサマリーのみが生成されます。

    • mutable: インストゥルメントは、より具体的なものに mutate できます。 このプロパティは、ステートメントインストゥルメントにのみ適用されます。

    • progress: インストゥルメントは進捗データをレポートできます。 このプロパティはステージインストゥルメントにのみ適用されます。

    • singleton: インストゥルメントには単一のインスタンスがあります。 たとえば、サーバー内のほとんどのグローバル mutex ロックはシングルトンであるため、対応するインストゥルメントも同様です。

    • user: インストゥルメントは、(システムワークロードではなく) ユーザーワークロードに直接関連しています。 そのようなインストゥルメントには、wait/io/socket/sql/client_connection があります。

  • VOLATILITY

    インストゥルメントのボラティリティ。 ボラティリティ値の範囲は、低から高です。 値は、mysql/psi/psi_base.h ヘッダーファイルで定義されている PSI_VOLATILITY_xxx 定数に対応します:

    #define PSI_VOLATILITY_UNKNOWN 0
    #define PSI_VOLATILITY_PERMANENT 1
    #define PSI_VOLATILITY_PROVISIONING 2
    #define PSI_VOLATILITY_DDL 3
    #define PSI_VOLATILITY_CACHE 4
    #define PSI_VOLATILITY_SESSION 5
    #define PSI_VOLATILITY_TRANSACTION 6
    #define PSI_VOLATILITY_QUERY 7
    #define PSI_VOLATILITY_INTRA_QUERY 8

    VOLATILITY カラムは、ユーザー (およびパフォーマンススキーマコード) にインストゥルメントの実行時動作に関するヒントを提供するための単なる情報です。

    低揮発性インデックス (PERMANENT = 1) を持つインストゥルメントは、サーバーの起動時に一度作成され、通常のサーバー操作中に破棄または再作成されることはありません。 これらは、サーバーの停止中にのみ破棄されます。

    たとえば、wait/synch/mutex/pfs/LOCK_pfs_share_list mutex は揮発性 1 で定義されており、これは一度作成されることを意味します。 インストゥルメンテーション自体から発生する可能性のあるオーバーヘッド (相互排他ロック初期化) は、このインストゥルメントには影響しません。 実行時オーバーヘッドは、mutex をロックまたはロック解除する場合にのみ発生します。

    ボラティリティインデックスが高いインストゥルメント (SESSION = 5 など) は、ユーザーセッションごとに作成および破棄されます。 たとえば、wait/synch/mutex/sql/THD::LOCK_query_plan mutex は、セッションが接続されるたびに作成され、セッションが切断されると破棄されます。

    この mutex は、パフォーマンススキーマのオーバーヘッドにより機密性が高くなります。これは、オーバーヘッドがロックおよびロック解除インストゥルメンテーションだけでなく、より頻繁に実行される相互排他ロック作成および破棄インストゥルメンテーションからも発生するためです。

    ボラティリティの別の側面は、ENABLED カラムの更新が実際になんらかの影響を与えるかどうかと、そのタイミングに関するものです:

    • ENABLED の更新は、後で作成されるインストゥルメントされたオブジェクトに影響しますが、すでに作成されているインストゥルメントには影響しません。

    • より多くの volatile のインストゥルメントでは、setup_instruments テーブルの新しい設定がより早く使用されます。

    たとえば、次のステートメントは既存のセッションの LOCK_query_plan mutex には影響しませんが、更新後に作成された新しいセッションには影響します:

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';

    このステートメントは、実際には何の効果もありません:

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';

    この mutex は永続的であり、更新の実行前にすでに作成されています。 mutex が再度作成されることはないため、setup_instrumentsENABLED 値は使用されません。 この mutex を有効または無効にするには、かわりに mutex_instances テーブルを使用します。

  • DOCUMENTATION

    インストゥルメントの目的を説明する文字列。 説明がない場合、値は NULL です。

setup_instruments テーブルには次のインデックスがあります:

  • 主キー (NAME)

TRUNCATE TABLE は、setup_instruments テーブルに対して許可されていません。


関連キーワード:  テーブル, インストゥルメント, パフォーマンス, スキーマ, setup, mutex, VOLATILITY, instruments, 作成, イベント