You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否查询MySQL(InnoDB)当前事务的启动时间?

MySQL InnoDB 查询当前事务启动时刻的方法

MySQL InnoDB 没有提供直接返回当前事务启动时刻的内置函数,但可以通过查询系统表来获取该信息,无需在事务开始时手动执行额外的时间记录查询。

方法一:查询 information_schema.INNODB_TRX 表

这个表存储了当前所有活跃的InnoDB事务信息,其中trx_started字段就是事务的启动时间。你可以通过当前会话ID过滤出自己的事务:

SELECT trx_started 
FROM information_schema.INNODB_TRX 
WHERE trx_mysql_thread_id = CONNECTION_ID();

注意:该表仅保留活跃状态的事务数据,如果事务已提交或回滚,就无法查询到对应的记录了。

方法二:查询 performance_schema.events_transactions_current 表

性能模式的这个表也能获取事务启动时间,其中TIMER_START字段是以皮秒为单位的时间戳,可转换为可读的时间格式:

SELECT 
  TIMESTAMPADD(MICROSECOND, 
               TIMER_START / 1000, 
               '1970-01-01 00:00:00') AS transaction_start_time
FROM performance_schema.events_transactions_current
WHERE THREAD_ID = (SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID());

注意:需要确保性能模式已启用(MySQL 5.6及以上版本默认开启),且events_transactions_current的采集功能处于激活状态。

这两种方法都是在需要查询时才执行,不需要在事务启动阶段预先执行时间记录查询,完全符合你的需求。

内容的提问来源于stack exchange,提问作者at54321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:33:11