能否查询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
相关产品推荐
相关产品推荐

