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


MySQL 8.4 参考手册  /  ...  /  setup_instruments 表

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 节,“性能模式仪器命名约定” 中所述。从执行仪器产生的事件具有从仪器 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: 该仪器可以mutate成一个更具体的仪器。此属性仅适用于语句仪器。

    • 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';
    注意

    尝试对非内存仪器或全局内存仪器设置 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 列仅供参考,为用户(和 Performance Schema 代码)提供有关仪器运行时行为的一些提示。

    波动性索引较低的仪器(PERMANENT = 1)在服务器启动时创建一次,在正常服务器运行期间从不销毁或重新创建。它们仅在服务器关闭期间被销毁。

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

    波动性索引较高的仪器(例如,SESSION = 5)会为每个用户会话创建和销毁。例如,wait/synch/mutex/sql/THD::LOCK_query_plan 互斥锁在每次会话连接时创建,并在会话断开连接时销毁。

    此互斥锁对 Performance Schema 开销更敏感,因为开销不仅来自锁定和解锁仪器,还来自互斥锁创建和销毁仪器,而这些仪器执行得更加频繁。

    波动性的另一个方面是是否以及何时对 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';

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

  • DOCUMENTATION

    描述仪器用途的字符串。如果不可用,则该值为 NULL

setup_instruments 表具有以下索引

  • (NAME) 上的主键

TRUNCATE TABLE 不允许用于 setup_instruments 表。

为了帮助监控和故障排除,Performance Schema 仪器用于将仪器线程的名称导出到操作系统。这使得显示线程名称的实用程序(如调试器和 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