的mutex_instances
表列出了服务器执行时性能模式所看到的所有互斥。互斥是代码中使用的一种同步机制,用于强制在给定时间只有一个线程可以访问一些公共资源。资源被称为”受保护的”通过互斥量。
当服务器中执行的两个线程(例如,两个用户会话同时执行一个查询)确实需要访问相同的资源(一个文件、缓冲区或一些数据)时,这两个线程会相互竞争,因此第一个获取互斥锁的查询会导致另一个查询等待,直到第一个查询完成并解锁互斥锁。
在持有互斥锁时执行的工作被称为在”至关重要的部分,”而且多个查询确实以序列化的方式(一次一个)执行这个临界区,这是一个潜在的瓶颈。
的mutex_instances
表有这些列:
的名字
与互斥锁相关联的仪器名称。
OBJECT_INSTANCE_BEGIN
被检测互斥锁在内存中的地址。
LOCKED_BY_THREAD_ID
当线程当前有一个互斥锁时,
LOCKED_BY_THREAD_ID
是THREAD_ID
否则,它就是锁螺纹零
.
的mutex_instances
表中有这些索引:
主键(
OBJECT_INSTANCE_BEGIN
)索引(
的名字
)索引(
LOCKED_BY_THREAD_ID
)
截断表
是不允许的mutex_instances
表格
对于代码中使用的每个互斥量,性能模式提供了以下信息。
的
setup_instruments
表中列出了带有前缀的检测点的名称等待/同步/互斥
.对象中创建互斥锁时,会向互斥锁中添加一行
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
列是零
).当互斥对象被销毁时,相应的行将被删除
mutex_instances
.
通过对以下两个表执行查询,监控应用程序或DBA可以检测到涉及互斥对象的线程之间的瓶颈或死锁:
events_waits_current
,以查看线程正在等待的互斥量mutex_instances
,以查看当前拥有互斥锁的其他线程