22.5.7 监控 X 插件
对于一般的 X 插件监控,请使用它暴露的状态变量。见第22.5.6.3节,“X 插件状态变量”。对于消息压缩的监控效果信息,请见监控 X 插件连接压缩。
监控 X 插件生成的 SQL
本节描述了如何监控 X 插件在执行 X DevAPI 操作时生成的 SQL 语句。当您执行 CRUD 语句时,它将被翻译为 SQL 并对服务器执行。为了能够监控生成的 SQL,必须启用 Performance Schema 表。SQL 将被注册到performance_schema.events_statements_current
、performance_schema.events_statements_history
和performance_schema.events_statements_history_long
表中。以下示例使用了world_x
架构,作为本节快速入门 tutorials 的一部分。我们使用 MySQL Shell 在 Python 模式下,并使用\sql
命令,可以在不更改到 SQL 模式的情况下执行 SQL 语句。这很重要,因为如果您尝试切换到 SQL 模式,结果将显示该操作的结果,而不是 X DevAPI 操作的结果。\sql
命令在使用 MySQL Shell 在 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节,“Performance Schema Runtime Configuration”。
-
获取当前连接的线程 ID。问题:
mysql-py> \sql SELECT thread_id INTO @id FROM performance_schema.threads WHERE processlist_id=connection_id()
-
执行 X DevAPI CRUD 操作以获取生成的 SQL。例如,问题:
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 操作的结果。