25.12.3.4 rwlock_instancestable
rwlock_instancestable 列出了服务器执行时性能架构所看到的所有rwlock(读锁定)实例。 rwlock
是代码中使用的一种同步机制,用于强制给定时间的线程可以按照某些规则访问某些公共资源。据说该资源受rwlock
“保护”。访问可以是共享的(许多线程可以同时具有读锁),互斥的(排他(给定时间只有一个线程可以具有写锁))或共享的专有(线程可以在允许不一致时可以具有写锁)由其他线程读取)。共享独占访问也称为sxlock
,它优化了并发性并提高了读写工作负载的可伸缩性。
根据请求锁的线程数以及请求锁的性质,可以在共享模式,独占模式,共享独占模式下授予访问权限,也可以根本不授予访问权限,以 await 其他线程先完成。
rwlock_instancestable 具有以下列:
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
上存在读取争用,并查看当前有多少个 Reader 处于活动状态。
rwlock_instancestable 不允许TRUNCATE TABLE。
通过对以下两个 table 执行查询,监视应用程序或 DBA 可以检测到涉及锁的线程之间的某些瓶颈或死锁:
-
events_waits_current,查看某个线程在 await 什么
rwlock
-
rwlock_instances,以查看当前哪个其他线程拥有
rwlock
有一个限制:rwlock_instances仅可用于标识持有写锁的线程,而不能标识持有读锁的线程。