• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Mutex_instances表

    mutex_instances表列出了服务器执行时性能架构看到的所有互斥锁。互斥锁是代码中使用的一种同步机制,用于强制在给定时间只有一个线程可以访问某些公共资源。该资源被互斥对象“保护”。

    当服务器中执行的两个线程(例如,同时执行查询的两个用户会话)确实需要访问相同的资源(文件,缓冲区或某些数据)时,这两个线程将相互竞争,因此获得互斥锁的第一个查询将导致另一个查询等待,直到第一个查询完成并解锁互斥锁。

    持有互斥锁时执行的工作被称为在“关键部分”中,并且多个查询确实以串行方式(一次一个)执行该关键部分,这是潜在的瓶颈。

    mutex_instances表包含以下列:

    • NAME

      与互斥锁关联的仪器名称。

    • OBJECT_INSTANCE_BEGIN

      已检测互斥锁在内存中的地址。

    • LOCKED_BY_THREAD_ID

      当前线程已锁定互斥锁时,LOCKED_BY_THREAD_IDTHREAD_ID锁定线程的,否则为NULL

    mutex_instances表具有以下索引:

    • OBJECT_INSTANCE_BEGIN)上的主键
    • 在(NAME)上的索引
    • 在(LOCKED_BY_THREAD_ID)上的索引

    TRUNCATE TABLE不允许用于该mutex_instances表。

    对于代码中检测到的每个互斥体,性能模式都提供以下信息。

    • setup_instruments表列出了检测点的名称,并带有前缀wait/synch/mutex/
    • 当某些代码创建互斥量时,将在mutex_instances表中添加一行。该OBJECT_INSTANCE_BEGIN列是唯一标识互斥锁的属性。
    • 当线程尝试锁定互斥锁时,该events_waits_current表会显示该线程的一行,表明它正在等待一个互斥锁(在EVENT_NAME列中),并指示正在等待哪个互斥锁(在OBJECT_INSTANCE_BEGIN列中)。
    • 当线程成功锁定互斥锁时:

      • events_waits_current显示对互斥锁的等待已完成(在TIMER_ENDTIMER_WAIT列中)
      • 完成的等待事件将添加到events_waits_historyevents_waits_history_long表中
      • mutex_instances显示互斥锁现在由线程拥有(在THREAD_ID列中)。
    • 当线程解锁互斥锁时,mutex_instances表明该互斥锁现在没有所有者(THREAD_ID列为NULL)。
    • 销毁互斥对象后,将从中删除相应的行mutex_instances

    通过对以下两个表执行查询,监视应用程序或DBA可以检测到涉及互斥的线程之间的瓶颈或死锁:

    • events_waits_current,以参见线程正在等待什么互斥锁
    • mutex_instances,参见哪个其他线程当前拥有互斥锁