### 20.5.7 监控 X 插件

对于一般的 X 插件监控，使用它公开的状态变量。看[第 20.5.6.3 节，“X 插件状态变量”](x-plugin-status-variables.html).有关监控消息压缩效果的具体信息，请参阅[监控 X 插件的连接压缩](x-plugin-connection-compression.html#x-plugin-connection-compression-monitoring).

#### 监控 X 插件生成的 SQL

本节介绍如何监控 X Plugin 在运行 X DevAPI 操作时生成的 SQL 语句。当您执行 CRUD 语句时，它会被转换为 SQL 并针对服务器执行。为了能够监控生成的 SQL，必须启用性能模式表。SQL 注册在[`performance_schema.events_statements_current`](performance-schema-events-statements-current-table.html),[`performance_schema.events_statements_history`](performance-schema-events-statements-history-table.html)， 和[`performance_schema.events_statements_history_long`](performance-schema-events-statements-history-long-table.html)表。以下示例使用`世界_x`schema，作为本节快速入门教程的一部分导入。我们在 Python 模式下使用 MySQL Shell，并且`\sql`该命令使您能够发出 SQL 语句而无需更改为 SQL 模式。这很重要，因为如果您尝试切换到 SQL 模式，该过程将显示此操作的结果，而不是 X DevAPI 操作。这`\sql`如果您在 JavaScript 模式下使用 MySQL Shell，则以相同的方式使用命令。

1.  检查是否`events_statements_history`消费者已启用。问题：

    ```
    mysql-py> \sql SELECT enabled FROM performance_schema.setup_consumers WHERE NAME = 'events_statements_history'
    +---------+
    | enabled |
    +---------+
    | YES     |
    +---------+
    ```

2.  检查所有仪器是否向消费者报告数据。问题：

    ```
    mysql-py> \sql SELECT NAME, ENABLED, TIMED FROM performance_schema.setup_instruments WHERE NAME LIKE 'statement/%' AND NOT (ENABLED and TIMED)
    ```

    如果此语句至少报告一行，则需要启用仪器。看[第 27.4 节，“性能模式运行时配置”](performance-schema-runtime-configuration.html).

3.  获取当前连接的线程 ID。问题：

    ```
    mysql-py> \sql SELECT thread_id INTO @id FROM performance_schema.threads WHERE processlist_id=connection_id()
    ```

4.  执行您想要查看生成的 SQL 的 X DevAPI CRUD 操作。例如，问题：

    ```
    mysql-py> db.CountryInfo.find("Name = :country").bind("country", "Italy")
    ```

    您不得为下一步发出任何进一步的操作以显示正确的结果。

5.  显示此线程 ID 进行的最后一个 SQL 查询。问题：

    ```
    mysql-py> \sql SELECT THREAD_ID, MYSQL_ERRNO,SQL_TEXT FROM performance_schema.events_statements_history WHERE THREAD_ID=@id ORDER BY TIMER_START DESC LIMIT 1;
    +-----------+-------------+--------------------------------------------------------------------------------------+
    | THREAD_ID | MYSQL_ERRNO | SQL_TEXT                                                                             |
    +-----------+-------------+--------------------------------------------------------------------------------------+
    |        29 |           0 | SELECT doc FROM `world_x`.`CountryInfo` WHERE (JSON_EXTRACT(doc,'$.Name') = 'Italy') |
    +-----------+-------------+--------------------------------------------------------------------------------------+
    ```

    结果显示了 X Plugin 基于最近的语句生成的 SQL，在本例中是上一步中的 X DevAPI CRUD 操作。
