对于 X 插件的通用监控,请使用它公开的状态变量。请参阅 第 22.5.6.3 节,“X 插件状态变量”。关于监控消息压缩的效果的信息,请参阅 监控 X 插件的连接压缩。
本节描述了如何监控 X 插件在执行 X DevAPI 操作时生成的 SQL 语句。当您执行 CRUD 语句时,它将被翻译成 SQL 并执行到服务器上。要能够监控生成的 SQL,性能模式表必须启用。SQL 将注册在 performance_schema.events_statements_current
、performance_schema.events_statements_history
和 performance_schema.events_statements_history_long
表中。以下示例使用 world_x
架构,该架构是本节快速入门教程的一部分。我们使用 MySQL Shell 在 Python 模式下,并使用 \sql
命令,该命令允许您在不切换到 SQL 模式的情况下发出 SQL 语句。这很重要,因为如果您尝试切换到 SQL 模式,过程将显示该操作的结果,而不是 X DevAPI 操作。\sql
命令也可以在 JavaScript 模式下使用。
-
检查
events_statements_history
消费者是否启用。发出:mysql-py> \sql SELECT enabled FROM performance_schema.setup_consumers WHERE NAME = 'events_statements_history' +---------+ | enabled | +---------+ | YES | +---------+
-
检查所有仪器是否报告数据给消费者。发出:
mysql-py> \sql SELECT NAME, ENABLED, TIMED FROM performance_schema.setup_instruments WHERE NAME LIKE 'statement/%' AND NOT (ENABLED and TIMED)
如果该语句报告至少一行,您需要启用仪器。请参阅 第 29.4 节,“性能模式运行时配置”。
-
获取当前连接的线程 ID。发出:
mysql-py> \sql SELECT thread_id INTO @id FROM performance_schema.threads WHERE processlist_id=connection_id()
-
执行您想要查看生成的 SQL 的 X DevAPI CRUD 操作。例如,发出:
mysql-py> db.CountryInfo.find("Name = :country").bind("country", "Italy")
您不能发出任何其他操作,以便下一步显示正确的结果。
-
显示该线程 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 插件基于最近的语句生成的 SQL,在本例中是前一步的 X DevAPI CRUD 操作。