该 rwlock_instances
表列出了在服务器执行期间性能模式看到的所有 rwlock(读写锁)实例。一个 rwlock
是一种同步机制,用于在代码中强制执行线程在给定时间可以访问某些公共资源,并遵循某些规则。该资源被称为被 rwlock
“保护”。访问可以是共享的(许多线程可以同时拥有读锁),独占的(在给定时间只有一个线程可以拥有写锁),或共享-独占的(一个线程可以拥有写锁,同时允许其他线程进行不一致的读取)。共享-独占访问也称为 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
只能用于识别持有写锁的线程,而不能识别持有读锁的线程。