Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

29.12.3.3 互斥器实例表

mutex_instances 表列出了 Performance Schema 在服务器执行期间看到的所有互斥器。互斥器是代码中用于强制只有一个线程在给定时间可以访问某个公共资源的同步机制。该资源被称为由互斥器保护

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

在持有互斥器期间执行的工作被称为在 临界区 中执行,多个查询将以串行方式执行该临界区(一次一个),这可能是一个瓶颈。

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)

TRUNCATE TABLE 不允许用于 mutex_instances 表。

对于代码中的每个仪器化互斥器,Performance Schema 提供以下信息。

  • 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 可以检测到涉及互斥的线程之间的瓶颈或死锁: