rwlock_instances
テーブルには、サーバーの実行中にパフォーマンススキーマによって認識されるすべての rwlock (読み取り/書き込みロック) インスタンスが一覧表示されます。 rwlock
は、特定の時間にそのスレッドが、次の特定のルールに従って、一部の共通リソースにアクセスできるようにするために、コードで使用される同期メカニズムです。 リソースは rwlock
によって「保護されている」と呼ばれます。 アクセスは、共有 (多くのスレッドが同時に読取りロックを持つことができます)、排他 (特定の時間に書込みロックを持つことができるのは 1 つのスレッドのみ) または共有排他 (スレッドは他のスレッドによる一貫性のない読取りを許可しながら書込みロックを持つことができます) のいずれかです。 共有排他アクセスは、sxlock
とも呼ばれ、同時実行性を最適化し、読取り/書込みワークロードのスケーラビリティを向上させます。
ロックをリクエストしているスレッドの数およびリクエストされたロックの性質に応じて、他のスレッドが最初に終了するまで待機して、共有モード、排他モードまたは共有排他モードでアクセス権を付与することも、まったく付与しないこともできます。
rwlock_instances
テーブルにはこれらのカラムがあります。
-
NAME
ロックに関連付けられているインストゥルメント名。
-
OBJECT_INSTANCE_BEGIN
インストゥルメントされたロックのメモリー内のアドレス。
-
WRITE_LOCKED_BY_THREAD_ID
スレッドが現在排他 (書き込み) モードでロックされた
rwlock
を持つ場合、WRITE_LOCKED_BY_THREAD_ID
はロックしているスレッドのTHREAD_ID
になり、そうでない場合、それはNULL
になります。 -
READ_LOCKED_BY_COUNT
スレッドが現在共有 (読み取り) モードでロックされた
rwlock
を持つ場合、READ_LOCKED_BY_COUNT
が 1 増分されます。 これはカウンタのみであるため、読み取りロックを保持するスレッドを見つけるためにそれを直接使用することはできませんが、rwlock
に対して読み取りの競合があるかどうかを確認し、現在アクティブなリーダー数を確認するために使用することができます。
rwlock_instances
テーブルには次のインデックスがあります:
主キー (
OBJECT_INSTANCE_BEGIN
)(
NAME
) のインデックス(
WRITE_LOCKED_BY_THREAD_ID
) のインデックス
TRUNCATE TABLE
は、rwlock_instances
テーブルに対して許可されていません。
次の両方のテーブルに対してクエリーを実行することによって、モニタリングアプリケーションまたは DBA はロックを伴うスレッド間の何らかのボトルネックやデッドロックを検出できます。
events_waits_current
、スレッドが待機しているrwlock
を確認する場合rwlock_instances
、rwlock
を現在所有しているほかのスレッドを確認する場合
制限があります。rwlock_instances
は、書き込みロックを保持しているスレッドの識別にのみ使用できますが、読み取りロックを保持しているスレッドの識別には使用できません。