文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


29.12.3.3 mutex_instances 表

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

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

持有互斥锁时执行的工作被称为在“临界区”中,并且多个查询确实以序列化方式(一次一个)执行此临界区,这可能成为瓶颈。

mutex_instances 表具有以下列:

  • NAME

    与互斥锁关联的检测点名称。

  • OBJECT_INSTANCE_BEGIN

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

  • LOCKED_BY_THREAD_ID

    当某个线程当前已锁定互斥锁时,LOCKED_BY_THREAD_ID 是锁定线程的 THREAD_ID,否则为 NULL

mutex_instances 表具有以下索引:

  • 在 (OBJECT_INSTANCE_BEGIN) 上的主键

  • 在 (NAME) 上的索引

  • 在 (LOCKED_BY_THREAD_ID) 上的索引

不允许对 mutex_instances 表执行 TRUNCATE TABLE

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

  • setup_instruments 表列出了检测点的名称,前缀为 wait/synch/mutex/

  • 当某些代码创建互斥锁时,会将一行添加到 mutex_instances 表中。OBJECT_INSTANCE_BEGIN 列是唯一标识互斥锁的属性。

  • 当一个线程尝试锁定互斥锁时,events_waits_current 表会显示该线程的一行,指示它正在等待互斥锁(在 EVENT_NAME 列中),并指示正在等待哪个互斥锁(在 OBJECT_INSTANCE_BEGIN 列中)。

  • 当一个线程成功锁定互斥锁时

  • 当一个线程解锁互斥锁时,mutex_instances 显示该互斥锁现在没有所有者(THREAD_ID 列为 NULL)。

  • 当互斥锁对象被销毁时,mutex_instances 中的对应行将被删除。

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