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.2.3 setup_instruments 表

setup_instruments 表列出了可以收集事件的仪器对象类:

mysql> SELECT * FROM performance_schema.setup_instruments\G
*************************** 1. row ***************************
         NAME: wait/synch/mutex/pfs/LOCK_pfs_share_list
      ENABLED: NO
        TIMED: NO
   PROPERTIES: singleton
        FLAGS: NULL
   VOLATILITY: 1
DOCUMENTATION: Components can provide their own performance_schema tables. 
This lock protects the list of such tables definitions.
...
*************************** 410. row ***************************
         NAME: stage/sql/executing
      ENABLED: NO
        TIMED: NO
   PROPERTIES:
        FLAGS: NULL
   VOLATILITY: 0
DOCUMENTATION: NULL
...
*************************** 733. row ***************************
         NAME: statement/abstract/Query
      ENABLED: YES
        TIMED: YES
   PROPERTIES: mutable
        FLAGS: NULL
   VOLATILITY: 0
DOCUMENTATION: SQL query just received from the network. 
At this point, the real statement type is unknown, the type 
will be refined after SQL parsing.
...
*************************** 737. row ***************************
         NAME: memory/performance_schema/mutex_instances
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: global_statistics
        FLAGS:
   VOLATILITY: 1
DOCUMENTATION: Memory used for table performance_schema.mutex_instances
...
*************************** 823. row ***************************
         NAME: memory/sql/Prepared_statement::infrastructure
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: controlled_by_default
        FLAGS: controlled
   VOLATILITY: 0
DOCUMENTATION: Map infrastructure for prepared statements per session.
...

每个添加到源代码中的仪器都将在 setup_instruments 表中添加一行,即使仪器代码未执行。当仪器启用并执行时,仪器实例将被创建,显示在 xxx_instances 表中,如 file_instancesrwlock_instances

对大多数 setup_instruments 行的修改将立即影响监控。对于一些仪器,修改只有在服务器启动时生效,在运行时修改无效。这主要影响服务器中的互斥锁、条件变量和读写锁,尽管可能还有其他仪器也如此。

有关 setup_instruments 表在事件过滤中的角色,请参阅 第 29.4.3 节,“事件预过滤”

setup_instruments 表具有以下列:

  • NAME

    仪器名称。仪器名称可能具有多个部分,并形成一个层次结构,如 第 29.6 节,“性能模式仪器命名约定” 所述。来自仪器执行的事件具有 EVENT_NAME 值,该值来自仪器 NAME 值。(事件实际上没有名称,但这提供了一种将事件与仪器关联的方式。)

  • ENABLED

    该仪器是否启用。该值为 YESNO。禁用仪器不产生事件。该列可以修改,尽管设置 ENABLED 对已经创建的仪器无效。

  • TIMED

    该仪器是否计时。该值为 YESNONULL。该列可以修改,尽管设置 TIMED 对已经创建的仪器无效。

    TIMED 值为 NULL 表示该仪器不支持计时。例如,内存操作不计时,因此其 TIMED 列为 NULL

    TIMED 设置为 NULL 对于支持计时的仪器无效,同样,将 TIMED 设置为非 NULL 对于不支持计时的仪器也无效。

    如果启用的仪器不计时,则仪器代码启用,但计时器不启用。由该仪器产生的事件具有 NULLTIMER_STARTTIMER_ENDTIMER_WAIT 计时值。这反过来使这些值在汇总表中被忽略时计算总和、最小、最大和平均时间值。

  • PROPERTIES

    该仪器的属性。该列使用 SET 数据类型,因此可以对每个仪器设置多个标志:

    • controlled_by_default: 该仪器默认情况下收集内存。

    • global_statistics: 该仪器仅产生全局汇总。无法获得更细粒度的汇总,如每个线程、账户、用户或主机。例如,大多数内存仪器仅产生全局汇总。

    • mutable: 该仪器可以“变异”为更具体的仪器。这仅适用于语句仪器。

    • 进度: 该仪器能够报告进度数据。该属性仅适用于阶段仪器。

    • 单例: 该仪器只有一个实例。例如,大多数全局互斥锁在服务器中都是单例的,因此相应的仪器也是如此。

    • 用户: 该仪器直接与用户工作负载(相对于系统工作负载)相关。例如,wait/io/socket/sql/client_connection 就是一个这样的仪器。

  • FLAGS

    该仪器的内存是否受控。

    该标志仅适用于非全局内存仪器,可以设置或取消设置。例如:

                  SQL> UPDATE PERFORMANCE_SCHEMA.SETUP_INTRUMENTS SET FLAGS="controlled" WHERE NAME='memory/sql/NET::buff';
    Note

    尝试在非内存仪器或全局内存仪器上设置 FLAGS = controlled 将被默默忽略。

  • VOLATILITY

    该仪器的不稳定性。 不稳定性值从低到高。这些值对应于 PSI_VOLATILITY_xxx 常量定义在 mysql/psi/psi_base.h 头文件中:

    #define PSI_VOLATILITY_UNKNOWN 0
    #define PSI_VOLATILITY_PERMANENT 1
    #define PSI_VOLATILITY_PROVISIONING 2
    #define PSI_VOLATILITY_DDL 3
    #define PSI_VOLATILITY_CACHE 4
    #define PSI_VOLATILITY_SESSION 5
    #define PSI_VOLATILITY_TRANSACTION 6
    #define PSI_VOLATILITY_QUERY 7
    #define PSI_VOLATILITY_INTRA_QUERY 8

    VOLATILITY 列纯粹是信息性的,为用户(和性能架构代码)提供一些关于仪器运行时行为的提示。

    具有低不稳定性指数(PERMANENT = 1)的仪器是在服务器启动时创建的,从不在正常服务器操作期间销毁或重新创建。它们仅在服务器关闭时销毁。

    例如,wait/synch/mutex/pfs/LOCK_pfs_share_list 互斥锁定义了不稳定性为 1,这意味着它是在创建一次的。来自仪器自身的可能开销(即互斥锁初始化)对该仪器没有影响。运行时开销仅在锁定或解锁互斥锁时发生。

    具有较高不稳定性指数(例如 SESSION = 5)的仪器是在每个用户会话中创建和销毁的。例如,wait/synch/mutex/sql/THD::LOCK_query_plan 互斥锁是在每个会话连接时创建的,并在会话断开时销毁。

    该互斥锁对性能架构开销更加敏感,因为开销不仅来自锁定和解锁仪器,还来自互斥锁创建和销毁仪器,这些操作执行得更频繁。

    不稳定性还关心的是何时更新 ENABLED 列实际生效:

    • 更新 ENABLED 影响后续创建的仪器对象,但对已经创建的仪器没有影响。

    • 具有更高不稳定性的仪器使用 setup_instruments 表中的新设置更快。

    例如,该语句不影响现有会话的 LOCK_query_plan 互斥锁,但对后续创建的会话有效:

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';

    该语句实际上没有任何效果:

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';

    该互斥锁是永久的,已经在更新执行之前创建了。该互斥锁从不再创建,因此 ENABLED 值在 setup_instruments 表中从不使用。要启用或禁用该互斥锁,请使用 mutex_instances 表。

  • DOCUMENTATION

    一个字符串,描述仪器的目的。该值为 NULL 如果没有可用的描述。

setup_instruments 表具有以下索引:

  • 主键在 (NAME)

TRUNCATE TABLE 不允许用于 setup_instruments 表。

为了帮助监控和故障排除,性能架构仪器用于将仪器线程名称导出到操作系统中。这使得实用程序能够显示线程名称,例如调试器和 Unix ps 命令,能够显示不同的 mysqld 线程名称,而不是 mysqld。该功能仅在 Linux、macOS 和 Windows 上支持。

假设 mysqld 在一个系统上运行,该系统具有一个版本的 ps 命令,支持以下调用语法:

ps -C mysqld H -o "pid tid cmd comm"

如果不将线程名称导出到操作系统中,命令将显示类似于此的输出,其中大多数 COMMAND 值都是 mysqld

  PID   TID CMD                         COMMAND
 1377  1377 /usr/sbin/mysqld            mysqld
 1377  1528 /usr/sbin/mysqld            mysqld
 1377  1529 /usr/sbin/mysqld            mysqld
 1377  1530 /usr/sbin/mysqld            mysqld
 1377  1531 /usr/sbin/mysqld            mysqld
 1377  1534 /usr/sbin/mysqld            mysqld
 1377  1535 /usr/sbin/mysqld            mysqld
 1377  1588 /usr/sbin/mysqld            xpl_worker1
 1377  1589 /usr/sbin/mysqld            xpl_worker0
 1377  1590 /usr/sbin/mysqld            mysqld
 1377  1594 /usr/sbin/mysqld            mysqld
 1377  1595 /usr/sbin/mysqld            mysqld

如果将线程名称导出到操作系统中,输出将看起来像这样,每个线程都有一个类似于其仪器名称的名称:

  PID   TID CMD                         COMMAND
27668 27668 /usr/sbin/mysqld            mysqld
27668 27671 /usr/sbin/mysqld            ib_io_ibuf
27668 27672 /usr/sbin/mysqld            ib_io_log
27668 27673 /usr/sbin/mysqld            ib_io_rd-1
27668 27674 /usr/sbin/mysqld            ib_io_rd-2
27668 27677 /usr/sbin/mysqld            ib_io_wr-1
27668 27678 /usr/sbin/mysqld            ib_io_wr-2
27668 27699 /usr/sbin/mysqld            xpl_worker-2
27668 27700 /usr/sbin/mysqld            xpl_accept-1
27668 27710 /usr/sbin/mysqld            evt_sched
27668 27711 /usr/sbin/mysqld            sig_handler
27668 27933 /usr/sbin/mysqld            connection

同一类中的不同线程实例将被编号以提供明确的名称,尽可能地提供明确的名称。由于连接数量可能很大,连接名称将简单地命名为 connection