mysql如何查看慢事务_mysql慢事务查看方法

来源:这里教程网 时间:2026-02-28 20:23:51 作者:

在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 表,配合慢查询日志,就能有效识别和处理慢事务问题。

相关推荐

热文推荐