首先开启performance_schema监控,检查并启用相关事务事件采集和instrumentation设置;接着通过information_schema.INNODB_TRX和performance_schema.events_transactions_current查询长时间运行的事务;同时配置慢查询日志,设置long_query_time阈值,记录并分析事务中的慢SQL;最后建立定期监控机制,结合脚本或Prometheus+Grafana告警,及时发现并处理超过阈值的长事务,确保系统稳定。

在MySQL中,查看慢事务的关键是开启事务相关的监控功能,并结合性能 Schema(performance_schema)和慢查询日志进行分析。下面介绍几种常用的查看慢事务的方法。
启用 performance_schema 监控事务
MySQL 的 performance_schema 提供了对事务的详细监控能力,需确保其已开启:
- 检查是否启用:执行 SHOW VARIABLES LIKE 'performance_schema';,确认值为 ON。
- 启用事务事件采集:进入 performance_schema 的 setup_consumers 表,确保 'events_transactions_current' 和 'events_transactions_history' 已启用。
- 设置采集级别:修改 setup_instruments 表,启用事务 instrumentation:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'transaction';
查询当前长时间运行的事务
通过 information_schema 和 performance_schema 可以查找正在运行且耗时较长的事务:
- 查看长时间未提交的事务:
SELECT * FROM information_schema.INNODB_TRX ORDER BY trx_started;
关注 trx_started 字段,时间过早的事务可能是“慢事务”或“长事务”。
- 结合 performance_schema 获取更详细的事务信息:
SELECT p.thread_id, p.event_id, p.state, p.timer_wait/1000000000 AS duration_sec, p.source FROM performance_schema.events_transactions_current p INNER JOIN information_schema.innodb_trx t ON p.thread_id = t.trx_mysql_thread_id WHERE p.state = 'COMMITTED' OR p.state IS NULL ORDER BY duration_sec DESC;
配置并分析慢查询日志
虽然慢查询日志主要记录 SQL,但长时间运行的事务中的语句也会被记录:
- 确保慢查询日志开启:
SHOW VARIABLES LIKE 'slow_query_log';
若未开启,可通过配置文件或命令启动。
- 设置慢查询阈值(例如5秒以上):
SET GLOBAL long_query_time = 5;
- 启用记录未使用索引的查询(可选增强排查):
SET GLOBAL log_queries_not_using_indexes = ON;
- 事务中执行的慢SQL会被记录到日志中,使用 mysqldumpslow 或 pt-query-digest 分析日志内容。
定期监控与告警建议
为防止长事务影响系统稳定性,建议建立定期检查机制:
- 编写脚本定时查询 information_schema.innodb_trx,发现运行超过阈值(如300秒)的事务及时告警。
- 结合监控工具如 Prometheus + Grafana,采集 performance_schema 中的事务指标。
- 应用层避免大事务,尽量拆分事务,及时提交或回滚。
基本上就这些。关键是开启 performance_schema 并定期检查 INNODB_TRX 表,配合慢查询日志,就能有效识别和处理慢事务问题。
以上就是mysql如何查看慢事务_mysql慢事务查看方法的详细内容,更多请关注php中文网其它相关文章!