このページは機械翻訳したものです。
mutex_instances テーブルは、サーバーの実行中にパフォーマンススキーマによって確認されるすべての相互排他ロックを一覧表示します。 相互排他ロックは、特定の時間に 1 つだけのスレッドが特定の共通リソースにアクセスできるようにする、コードで使用される同期メカニズムです。 リソースは相互排他ロックによって「保護されている」と呼ばれます。
サーバーで実行されている 2 つのスレッド (たとえば、クエリーを同時に実行する 2 つのユーザーセッション) が同じリソース (ファイル、バッファまたは一部のデータ) にアクセスする必要がある場合、これらの 2 つのスレッドは互いに競合するため、mutex でロックを取得する最初のクエリーによって、最初のクエリーが完了するまで待機し、mutex のロックを解除します。
相互排他ロックの保持中に実行される作業は「クリティカルセクション」にあると呼ばれ、複数のクエリーがこのクリティカルセクションを連続して (一度に 1 つずつ) 実行するため、これは潜在的なボトルネックになります。
mutex_instances テーブルにはこれらのカラムがあります。
-
NAME相互排他ロックに関連付けられているインストゥルメント名。
-
OBJECT_INSTANCE_BEGINインストゥルメントされた相互排他ロックのメモリー内のアドレス。
-
LOCKED_BY_THREAD_IDスレッドが現在相互排他ロックされている場合、
LOCKED_BY_THREAD_IDはロックしているスレッドのTHREAD_IDになり、そうでない場合、それはNULLになります。
mutex_instances テーブルには次のインデックスがあります:
主キー (
OBJECT_INSTANCE_BEGIN)(
NAME) のインデックス(
LOCKED_BY_THREAD_ID) のインデックス
TRUNCATE TABLE は、mutex_instances テーブルに対して許可されていません。
コードにインストゥルメントされた各相互排他ロックについて、パフォーマンススキーマは次の情報を提供します。
setup_instrumentsテーブルは、プリフィクスwait/synch/mutex/を付けて、インストゥルメンテーションポイントの名前を一覧表示します。一部のコードで相互排他ロックが作成されると、行が
mutex_instancesテーブルに追加されます。OBJECT_INSTANCE_BEGINカラムは相互排他ロックを一意に識別するプロパティーです。スレッドが相互排他ロックのロックを試みた場合、
events_waits_currentテーブルにそのスレッドの行が表示され、それが相互排他ロックを待機していることが示され (EVENT_NAMEカラム内)、待機されている相互排他ロックが示されます (OBJECT_INSTANCE_BEGINカラム内)。-
スレッドが相互排他ロックのロックに成功した場合:
events_waits_currentは相互排他ロックへの待機が完了したことを示します (TIMER_ENDおよびTIMER_WAITカラム内)完了した待機イベントは
events_waits_historyおよびevents_waits_history_longテーブルに追加されます。mutex_instancesは相互排他ロックがスレッドによって所有されるようになったことを示します (THREAD_IDカラム内)。
スレッドが相互排他ロックのロックを解除すると、
mutex_instancesは相互排他ロックに所有者がいなくなったことを示します (THREAD_IDカラムがNULLになります)。相互排他ロックオブジェクトが破棄されると、対応する行が
mutex_instancesから削除されます。
次の両方のテーブルに対してクエリーを実行することによって、モニタリングアプリケーションまたは DBA は相互排他ロックを伴うスレッド間のボトルネックやデッドロックを検出できます。
events_waits_current、スレッドが待機している相互排他ロックを確認する場合mutex_instances、相互排他ロックを現在所有しているほかのスレッドを確認する場合