このページは機械翻訳したものです。
events_waits_current テーブルには、現在の待機イベントが含まれます。 テーブルには、スレッドごとに最新の監視対象待機イベントの現在のステータスを示す 1 行が格納されるため、テーブルサイズを構成するためのシステム変数はありません。
待機イベント行を格納するテーブルのうち、events_waits_current はもっとも基本的です。 待機イベント行を格納するほかのテーブルは論理的に現在のイベントから派生します。 たとえば、events_waits_history テーブルと events_waits_history_long テーブルは、終了した最新の待機イベントのコレクションで、スレッド当たりの最大行数まで、およびすべてのスレッドにわたってグローバルに終了します。
3 つの待機イベントテーブル間の関係の詳細は、セクション27.9「現在および過去のイベントのパフォーマンススキーマテーブル」 を参照してください。
待機イベントを収集するかどうかの構成の詳細は、セクション27.12.4「パフォーマンススキーマ待機イベントテーブル」 を参照してください。
events_waits_current テーブルにはこれらのカラムがあります。
-
THREAD_ID、EVENT_IDイベントに関連付けられたスレッドとイベントの起動時のスレッドの現在のイベント番号。 ともに取得される
THREAD_IDとEVENT_IDの値によって、行が一意に識別されます。 同じ値のペアを持つ行は 2 つありません。 -
END_EVENT_IDこのカラムは、イベントの起動時に
NULLに設定され、イベントの終了時にスレッドの現在のイベント番号に更新されます。 -
EVENT_NAMEイベントを生成したインストゥルメントの名前。 これは
setup_instrumentsテーブルからのNAME値です。 セクション27.6「パフォーマンススキーマインストゥルメント命名規則」に説明するように、インストゥルメント名には複数の部分があり、階層を形成することがあります。 -
SOURCEイベントを生成した、インストゥルメントされたコードを格納するソースファイルの名前と、インストゥルメンテーションが行われたファイルの行番号。 これにより、ソースをチェックして、コードに含まれるものを正確に判断することができます。 たとえば、相互排他ロックまたはロックがブロックされた場合、これが発生するコンテキストをチェックできます。
-
TIMER_START、TIMER_END、TIMER_WAITイベントのタイミング情報。 これらの値の単位はピコ秒 (秒の 1 兆分の 1) です。
TIMER_STARTおよびTIMER_END値は、イベントのタイミングが開始されたときと終了したときを示します。TIMER_WAITはイベントの経過時間 (期間) です。イベントが終了していない場合、
TIMER_ENDは現在のタイマー値で、TIMER_WAITはこれまでに経過した時間です (TIMER_END-TIMER_START)。イベントが
TIMED = NOのインストゥルメントから生成されている場合、タイミング情報は収集されず、TIMER_START、TIMER_END、およびTIMER_WAITはすべてNULLになります。イベント時間の単位としてのピコ秒および時間値に影響する要因については、セクション27.4.1「パフォーマンススキーマイベントタイミング」を参照してください。
-
SPINS相互排他ロックの場合、スピンラウンドの数。 値が
NULLの場合、コードはスピンラウンドを使用しないか、スピニングがインストゥルメントされません。 -
OBJECT_SCHEMA、OBJECT_NAME、OBJECT_TYPE、OBJECT_INSTANCE_BEGINこれらのカラムは「作用している」オブジェクトを識別します。 その意味は、オブジェクトの種類によって異なります。
同期オブジェクト (
cond、mutex、およびrwlock) の場合:OBJECT_SCHEMA、OBJECT_NAME、およびOBJECT_TYPEはNULLです。OBJECT_INSTANCE_BEGINはメモリー内の同期オブジェクトのアドレスです。
ファイル I/O オブジェクトの場合:
OBJECT_SCHEMAはNULLです。OBJECT_NAMEはファイル名です。OBJECT_TYPEはFILEです。OBJECT_INSTANCE_BEGINはメモリー内のアドレスです。
ソケットオブジェクトの場合:
OBJECT_NAMEはソケットのIP:PORT値です。OBJECT_INSTANCE_BEGINはメモリー内のアドレスです。
テーブル I/O オブジェクトの場合:
OBJECT_SCHEMAはテーブルを格納するスキーマの名前です。OBJECT_NAMEはテーブル名です。OBJECT_TYPEは永続的ベーステーブルのTABLEまたは一時テーブルのTEMPORARY TABLEです。OBJECT_INSTANCE_BEGINはメモリー内のアドレスです。
OBJECT_INSTANCE_BEGIN値自体には、さまざまな値がさまざまなオブジェクトを示すことを除いて、意味がありません。OBJECT_INSTANCE_BEGINはデバッグに使用できます。 たとえば、それをGROUP BY OBJECT_INSTANCE_BEGINで使用して、1,000 相互排他ロック (つまり、データの 1,000 ページまたはブロックを保護する) の負荷が均等に広がっているか、または少数のボトルネックだけに関わっているかを確認できます。 これにより、ログファイルやほかのデバッグまたはパフォーマンスツールで同じオブジェクトアドレスが見られた場合に、情報のほかのソースと関連付けることができます。 -
INDEX_NAME使用されるインデックスの名前。
PRIMARYはテーブルプライマリインデックスを示します。NULLはインデックスが使用されなかったことを意味します。 -
NESTING_EVENT_IDこのイベントが中にネストされているイベントの
EVENT_ID値。 -
NESTING_EVENT_TYPEネストしているイベントの種類。 値は
TRANSACTION,STATEMENT,STAGEまたはWAITです。 -
OPERATIONlock、read、またはwriteなどの実行される操作の種類。 -
NUMBER_OF_BYTES操作によって読み取りまたは書き込まれるバイト数。 テーブル I/O 待機 (
wait/io/table/sql/handlerインストゥルメントのイベント) の場合、NUMBER_OF_BYTESは行数を示します。 値が 1 より大きい場合、イベントはバッチ I/O 操作用です。 次の説明では、単一行レポートとバッチ I/O を反映するレポートの違いについて説明します。MySQL は、ネステッドループ実装を使用して結合を実行します。 パフォーマンススキーマインストゥルメンテーションのジョブは、結合内のテーブルごとに行数と累積実行時間を提供することです。
t1,t2,t3のテーブル結合順序を使用して実行される次の形式の結合クエリーを想定します:SELECT ... FROM t1 JOIN t2 ON ... JOIN t3 ON ...テーブル「「ファンアウト」」は、結合処理中にテーブルを追加する行数の増減です。 テーブル
t3のファンアウトが 1 より大きい場合、行フェッチ操作の大部分はそのテーブルに対するものです。 結合がt1から 10 行、t1からt2から 20 行、テーブルt2の行ごとにt3から 30 行にアクセスするとします。 単一行レポートでは、インストゥルメントされた操作の合計数は次のとおりです:10 + (10 * 20) + (10 * 20 * 30) = 6210インスツルメント処理される操作の数は、スキャンごと (つまり、
t1とt2の行の一意の組合せごと) に集計することで大幅に削減できます。 バッチ I/O レポートでは、パフォーマンススキーマは各行ではなくもっとも内側のテーブルt3のスキャンごとにイベントを生成し、計測される行操作の数は次のように減少します:10 + (10 * 20) + (10 * 20) = 410これは 93% の削減であり、レポートコールの数を減らすことで、バッチレポート戦略によってテーブル I/O のパフォーマンススキーマのオーバーヘッドが大幅に削減される方法を示しています。 トレードオフは、イベントタイミングの精度が低くなります。 バッチ I/O のタイミングには、行ごとのレポートのように個々の行操作の時間ではなく、結合バッファリング、集計、クライアントへの行の戻しなどの操作に費やされる時間が含まれます。
バッチ I/O レポートを実行するには、次の条件が満たされている必要があります:
クエリー実行は、クエリーブロックの最も内側のテーブルにアクセスします (単一テーブルクエリーの場合、そのテーブルは最も内側としてカウントされます)
クエリーの実行では、テーブルの単一行は要求されません (たとえば、
eq_refアクセスではバッチレポートを使用できません)クエリーの実行では、テーブルに対するテーブルアクセスを含むサブクエリーは評価されません
-
FLAGS将来使用するために予約されています。
events_waits_current テーブルには次のインデックスがあります:
主キー (
THREAD_ID、EVENT_ID)
TRUNCATE TABLE は events_waits_current テーブルに対して許可されています。 行が削除されます。