Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


22.9.3.3 mutex_instances テーブル

mutex_instances テーブルは、サーバーの実行中にパフォーマンススキーマによって確認されるすべての相互排他ロックを一覧表示します。相互排他ロックは、特定の時間に 1 つだけのスレッドが特定の共通リソースにアクセスできるようにする、コードで使用される同期メカニズムです。リソースは相互排他ロックによって保護されていると呼ばれます。

サーバーで実行している 2 つのスレッド (たとえば、クエリーを同時に実行している 2 つのユーザーセッション) が同じリソース (ファイル、バッファー、データの一部) にアクセスする必要がある場合、これらの 2 つのスレッドは互いに競争するため、相互排他ロックのロックを取得する最初のクエリーによって、ほかのクエリーは最初のクエリーが終了し、相互排他ロックを解除するまで待たされます。

相互排他ロックの保持中に実行される作業はクリティカルセクションにあると呼ばれ、複数のクエリーがこのクリティカルセクションを連続して (一度に 1 つずつ) 実行するため、これは潜在的なボトルネックになります。

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

  • NAME

    相互排他ロックに関連付けられているインストゥルメント名。

  • OBJECT_INSTANCE_BEGIN

    インストゥルメントされた相互排他ロックのメモリー内のアドレス。

  • LOCKED_BY_THREAD_ID

    スレッドが現在相互排他ロックされている場合、LOCKED_BY_THREAD_ID はロックしているスレッドの THREAD_ID になり、そうでない場合、それは NULL になります。

コードにインストゥルメントされた各相互排他ロックについて、パフォーマンススキーマは次の情報を提供します。

  • 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、相互排他ロックを現在所有しているほかのスレッドを確認する場合