该rwlock_instances
表列出了服务器执行时性能模式看到的所有rwlock(读写锁)实例。Anrwlock
是代码中使用的一种同步机制,用于强制线程在给定时间可以按照特定规则访问某些公共资源。据说该资源
受到“保护”rwlock
. 访问可以是共享的(许多线程可以同时拥有一个读锁)、独占的(在给定时间只有一个线程可以拥有一个写锁),或者是共享独占的(一个线程可以拥有一个写锁,同时允许不一致的由其他线程读取)。共享独占访问也称为 an
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。这只是一个计数器,所以不能直接用来查找哪个线程持有读锁,但可以用来查看是否有a 上的阅读争用rwlock
,并查看当前有多少读者处于活动状态。
TRUNCATE TABLE
不允许用于rwlock_instances
表。
通过对以下两个表执行查询,监视应用程序或 DBA 可能会检测到涉及锁的线程之间的一些瓶颈或死锁:
events_waits_current
, 查看rwlock
线程正在等待 什么rwlock_instances
, 以查看哪个其他线程当前拥有一个rwlock
有一个限制:
rwlock_instances
只能用于标识持有写锁的线程,不能用于标识持有读锁的线程。