Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.3.3 锁定实例表

性能模式的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表进行。

对于代码中的每个锁定实例化,性能模式提供以下信息。

  • 性能模式的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表中移除相应的行。

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