MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
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、相互排他ロックを現在所有しているほかのスレッドを確認する場合