#### 27.12.2.3 设置\_仪器表

[](<>)[](<>)

这[`setup_instruments`](performance-schema-setup-instruments-table.html)表列出了可以收集事件的检测对象的类：

```
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
   VOLATILITY: 1
DOCUMENTATION: Components can provide their own performance_schema tables.
               This lock protects the list of such tables definitions.
...
*************************** 369. row ***************************
         NAME: stage/sql/executing
      ENABLED: NO
        TIMED: NO
   PROPERTIES:
   VOLATILITY: 0
DOCUMENTATION: NULL
...
*************************** 687. row ***************************
         NAME: statement/abstract/Query
      ENABLED: YES
        TIMED: YES
   PROPERTIES: mutable
   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.
...
*************************** 696. row ***************************
         NAME: memory/performance_schema/metadata_locks
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: global_statistics
   VOLATILITY: 1
DOCUMENTATION: Memory used for table performance_schema.metadata_locks
...
```

添加到源代码中的每个仪器都为[`setup_instruments`](performance-schema-setup-instruments-table.html)表，即使未执行检测代码。启用并执行仪器时，会创建已检测的实例，这些实例在`*`xxx`*_实例`表，例如[`文件实例`](performance-schema-file-instances-table.html)要么[`rwlock_instances`](performance-schema-rwlock-instances-table.html).

对大多数的修改[`setup_instruments`](performance-schema-setup-instruments-table.html)行会立即影响监控。对于某些仪器，修改仅在服务器启动时生效；在运行时更改它们无效。这主要影响服务器中的互斥锁、条件和 rwlocks，尽管可能有其他工具适用于此。

有关该角色的更多信息[`setup_instruments`](performance-schema-setup-instruments-table.html)事件过滤中的表，请参阅[第 27.4.3 节，“事件预过滤”](performance-schema-pre-filtering.html).

这[`setup_instruments`](performance-schema-setup-instruments-table.html)表有这些列：

-   `姓名`

    仪器名称。仪器名称可能有多个部分并形成层次结构，如在[第 27.6 节，“性能模式仪器命名约定”](performance-schema-instrument-naming.html).执行工具产生的事件具有`EVENT_NAME`从仪器中获取的值`姓名`价值。（事件并没有真正的“名称”，但这提供了一种将事件与乐器相关联的方法。）

-   `已启用`

    仪器是否启用。值为`是的`要么`不`.禁用的仪器不会产生任何事件。此列可以修改，虽然设置`已启用`对已经创建的工具没有影响。

-   `定时`

    仪器是否定时。值为`是的`,`不`， 要么`空值`.此列可以修改，虽然设置`定时`对已经创建的工具没有影响。

    一种`定时`的价值`空值`表示仪器不支持计时。例如，内存操作是不定时的，所以它们的`定时`列是`空值`.

    环境`定时`到`空值`对于支持计时的乐器没有效果，设置也是如此`定时`对非`空值`对于不支持计时的仪器。

    如果启用的仪器未计时，则启用仪器代码，但不启用计时器。仪器产生的事件有`空值`为了`TIMER_START`,`TIMER_END`， 和`TIMER_WAIT`定时器值。这反过来会导致在计算汇总表中的总和、最小、最大和平均时间值时忽略这些值。

-   `特性`

    仪器属性。本专栏使用[`放`](set.html)数据类型，因此可以为每个仪器设置以下列表中的多个标志：

    -   `global_statistics`：仪器仅生成全局摘要。更精细级别的摘要不可用，例如每个线程、帐户、用户或主机。例如，大多数记忆工具只产生全局摘要。

    -   `可变的`：乐器可以“变异”成更具体的乐器。此属性仅适用于报表工具。

    -   `进步`：仪器能够报告进度数据。此属性仅适用于舞台乐器。

    -   `单身人士`：仪器有一个实例。例如，服务器中的大多数全局互斥锁都是单例的，因此相应的工具也是如此。

    -   `用户`：仪器与用户工作量直接相关（与系统工作量相反）。一种这样的工具是`等待/io/socket/sql/client_connection`.

-   `挥发性`

    该工具的波动性。波动率值范围从低到高。这些值对应于`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
    ```

    这`挥发性`列纯粹是提供信息，为用户（和性能模式代码）提供有关仪器运行时行为的一些提示。

    具有低波动率指数 (PERMANENT = 1) 的工具在服务器启动时创建一次，并且在服务器正常运行期间永远不会被销毁或重新创建。它们仅在服务器关闭期间被销毁。

    例如，`等待/同步/互斥/pfs/LOCK_pfs_share_list`互斥量定义为波动率为 1，这意味着它被创建一次。仪器本身的可能开销（即互斥体初始化）对此仪器没有影响。运行时开销仅在锁定或解锁互斥锁时发生。

    为每个用户会话创建和销毁具有较高波动率指数（例如，SESSION = 5）的工具。例如，`等待/同步/互斥/sql/THD::LOCK_query_plan`每次会话连接时都会创建互斥锁，并在会话断开连接时销毁。

    这个互斥量对性能模式开销更敏感，因为开销不仅来自锁定和解锁工具，还来自互斥量创建和销毁工具，后者执行得更频繁。

    波动性的另一个方面涉及是否以及何时更新`已启用`列实际上有一些效果：

    -   更新到`已启用`影响随后创建的仪器对象，但对已创建的仪器没有影响。

    -   更“不稳定”的仪器使用来自[`setup_instruments`](performance-schema-setup-instruments-table.html)表早。

        例如，此声明不影响`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`](performance-schema-setup-instruments-table.html)从未使用过。要启用或禁用此互斥锁，请使用[`互斥实例`](performance-schema-mutex-instances-table.html)代替表。

-   `文档`

    描述仪器用途的字符串。值为`空值`如果没有可用的描述。

    这[`setup_instruments`](performance-schema-setup-instruments-table.html)表有这些索引：

-   主键打开 (`姓名`)

[`截断表`](truncate-table.html)不允许[`setup_instruments`](performance-schema-setup-instruments-table.html)桌子。

[](<>)[](<>)

从 MySQL 8.0.27 开始，为了帮助监控和故障排除，Performance Schema 检测用于将检测线程的名称导出到操作系统。这启用了显示线程名称的实用程序，例如调试器和 Unix**ps**命令，显示不同的[**mysqld**](mysqld.html)线程名称而不是“mysqld”。此功能仅在 Linux、macOS 和 Windows 上受支持。

假设[**mysqld**](mysqld.html)在具有以下版本的系统上运行**ps**支持此调用语法：

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

如果没有将线程名称导出到操作系统，该命令会显示如下输出，其中大多数`命令`值是`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
```

同一类中的不同线程实例被编号以在可行的情况下提供不同的名称。由于对潜在大量连接的名称长度的限制，连接被简单地命名`联系`.
