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.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表格提供一行,即使计量代码未执行时也如此。当一个计量器被启用并执行时,创建了计量实例,这些实例在file_instancesrwlock_instances等表格中可见。

对大多数setup_instruments行的修改会立即影响监控。对于一些计量器,修改在服务器启动时有效,在运行时更改无效。这主要影响服务器中的互斥锁、条件变量和读写锁定,尽管可能还有其他计量器受到这种限制。

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

表格setup_instruments有这些列:

  • NAME

    计量器的名称。计量器名称可能具有多个部分,并形成层次结构,如第29.6节,“性能架构计量器命名约定”中讨论的那样。由执行计量器产生的事件在其NAME值中有一个EVENT_NAME属性。 (事件实际上并没有“名称”,但这为事件与计量器之间的关联提供了方式。)

  • ENABLED

    是否启用计量器。值是YESNO。禁用的计量器不会产生事件。这一列可以被修改,但设置ENABLED对已创建的计量器无效。

  • TIMED

    是否启用计量器的定时。值是YESNONULL。这一列可以被修改,但设置TIMED对已创建的计量器无效。

    如果TIMED值为NULL,则表示计量器不支持定时。例如,内存操作不被定时,因此它们的TIMED列为NULL

    TIMED设置为NULL对支持定时的计量器无效,同样地,将TIMED设置为非NULL值对不支持定时的计量器无效。

    如果启用了但未定时的计量器,则计量器代码被启用,但定时器没有。由计量器产生的事件在TIMER_STARTTIMER_ENDTIMER_WAIT定时值中有NULL。这导致这些值在摘要表格中计算总和、最小值、最大值和平均值时被忽略。

  • PROPERTIES

    计量器属性。这一列使用SET数据类型,因此可以为每个计量器设置多个标志,从以下列表中选择:

    • controlled_by_default: 对于此计量器,内存收集默认启用。

    • global_statistics: 计量器仅产生全局摘要。更细致的级别的摘要(如按线程、账户、用户或主机)不可用。例如,大多数内存计量器只产生全局摘要。

    • mutable: 计量器可以“变异”为更具体的一个。这一属性仅适用于语句计量器。

    • progress: 计量器能够报告进度数据。这一属性仅适用于阶段计量器。

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

    • user: 仪器直接与用户工作负载相关(而不是系统工作负载)。一个这样的仪器是 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

    仪器的稳定性。稳定性值从低到高变化。这些值对应于 mysql/psi/psi_base.h 头文件中定义的 PSI_VOLATILITY_<xxx> 常量:

    #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 列仅供信息性用途,为用户(以及性能方案代码)提供一些关于仪器运行时行为的线索。

    稳定性指数较低(例如,永久 = 1)的仪器在服务器启动时创建一次,并且不会在正常服务器操作期间被销毁或重新创建。它们只有在服务器关闭时才会被销毁。

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

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

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

    稳定性在另一个方面也很重要,即当更新 ENABLED 列时是否会有实际效果:

    • ENABLED 的更新只影响随后创建的仪器对象,但不会影响已经创建的仪器。

    • 更“volatile”的仪器会更快地使用来自 setup_instruments 表的新设置。

    例如,这个语句不会影响 LOCK_query_plan 互斥锁对于现有会话的效果,但它对新会话(在更新之后创建的)有影响:

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

    这个互斥锁是永久性的,已经在更新执行之前被创建了。互斥锁永远不会再次被创建,所以 ENABLED 值在 setup_instruments 中永远不会被使用。要启用或禁用这个互斥锁,请使用 mutex_instances 表。

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

    This mutex is permanent, and was created already before the update is executed. The mutex is never created again, so the ENABLED value in setup_instruments is never used. To enable or disable this mutex, use the mutex_instances table instead.

  • 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