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_instances
や rwlock_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
インストゥルメントの時間が測定されるかどうか。 値は、
YES
、NO
またはNULL
です。 このカラムは変更できますが、TIMED
の設定は、すでに作成されているインストゥルメントには影響しません。TIMED
値NULL
は、インストゥルメントがタイミングをサポートしていないことを示します。 たとえば、メモリー操作は時間指定されていないため、そのTIMED
カラムはNULL
です。タイミングをサポートするインストゥルメントに対して
TIMED
をNULL
に設定しても、タイミングをサポートしないインストゥルメントに対してTIMED
をNULL
以外に設定しても効果はありません。有効にされたインストゥルメントの時間が測定されない場合、インストゥルメントコードは有効ですが、タイマーは有効ではありません。 インストゥルメントによって生成されたイベントの
TIMER_START
、TIMER_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_instruments
のENABLED
値は使用されません。 この mutex を有効または無効にするには、かわりにmutex_instances
テーブルを使用します。 -
DOCUMENTATION
インストゥルメントの目的を説明する文字列。 説明がない場合、値は
NULL
です。
setup_instruments
テーブルには次のインデックスがあります:
主キー (
NAME
)
TRUNCATE TABLE
は、setup_instruments
テーブルに対して許可されていません。