通过查询information_schema.INNODB_TRX可查看活跃事务的ID、状态、开始时间及关联线程;结合SHOW PROCESSLIST和performance_schema.threads定位长事务会话;利用performance_schema.data_locks和data_lock_waits分析锁等待与阻塞关系;执行SHOW ENGINE INNODB STATUS获取事务与死锁详情,综合多表信息可有效监控MySQL事务活动。

在 MySQL 中监控事务活动是数据库性能调优和故障排查的重要环节。通过观察当前正在运行的事务,可以发现长时间未提交的事务、锁等待问题以及潜在的死锁风险。以下是几种实用的方法来有效监控事务活动。
MySQL 提供了 information_schema.INNODB_TRX 表,用于展示当前每个线程中正在执行的 InnoDB 事务信息。
执行以下查询:
SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_query, trx_operation_state, trx_isolation_level FROM information_schema.INNODB_TRX\G关键字段说明:
如果发现某个事务已运行数分钟甚至更久,应重点排查是否遗漏了 COMMIT 或 ROLLBACK。
使用 SHOW PROCESSLIST 可查看当前所有连接的状态:
SHOW FULL PROCESSLIST;关注 State 列为 "Locked" 或长时间处于非空闲状态的连接,并结合 INNODB_TRX 中的 trx_mysql_thread_id 进行比对,定位具体事务来源。
也可以从 performance_schema 中获取更详细的会话信息:
SELECT PROCESSLIST_ID, PROCESSLIST_USER, PROCESSLIST_HOST, PROCESSLIST_DB, PROCESSLIST_COMMAND, PROCESSLIST_TIME, PROCESSLIST_STATE FROM performance_schema.threads WHERE TYPE = 'FOREGROUND';长时间事务常伴随锁竞争。可通过 INFORMATION_SCHEMA.INNODB_LOCKS 和 INNODB_LOCK_WAITS 查看锁情况(注意:MySQL 8.0 已移除这些表,建议使用 performance_schema)。
在 MySQL 8.0+ 中,使用:
SELECT * FROM performance_schema.data_locks;查看阻塞情况:
SELECT waiting_trx_id, blocking_trx_id, waiting_pid, blocking_pid, wait_started FROM performance_schema.data_lock_waits;结合 INNODB_TRX 表中的 trx_id 与 data_lock_waits 中的等待关系,可快速识别哪个事务被阻塞、谁是源头。
执行以下命令可获取 InnoDB 子系统的详细运行状态,包括事务、锁、缓冲池等:
SHOW ENGINE INNODB STATUS\G输出内容中 “TRANSACTIONS” 部分会列出当前活跃事务及其锁信息,“LATEST DETECTED DEADLOCK” 可帮助分析最近一次死锁原因。
建议定期查看或在出现问题时立即执行,作为补充诊断手段。
基本上就这些。掌握这些方法后,你可以快速定位长时间运行的事务、锁等待链和阻塞源头。关键是结合多个系统表交叉验证,形成完整的事务视图。不复杂但容易忽略细节,比如线程 ID 的对应关系和时间维度的判断。
以上就是如何在mysql中监控事务活动的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号