我已经在Google上浏览了这个,但找不到任何相关内容。基本上,我想掌握长期运行的交易。
现在,我浏览information_schema.INNODB_TRX
或查看show engine innodb status
的输出以找到trx_id
,然后启用general_logs
以查看所有查询的内容运行。
有没有办法,我可以使用transaction_id
或jdbc
在我的代码中获取此hibernate
,以便我可以在服务器日志中记录它?
答案 0 :(得分:2)
使用PostgreSQL,您只需运行此本机查询即可获取当前的事务ID:
Number transactionId = (Number) session
.createSQLQuery("select txid_current()")
.uniqueResult();
对于MySQL,you need to run 5.7 or later:
Number transactionId = (Number) session
.createSQLQuery(
"SELECT GTID " +
"FROM events_transactions_current e " +
"JOIN performance_schema.threads t ON e.THREAD_ID = t.THREAD_ID " +
"WHERE t.PROCESSLIST_ID = CONNECTION_ID()")
.uniqueResult();
或MySQL 5.5:
Number transactionId = (Number) session
.createSQLQuery(
"SELECT trx_id " +
"FROM information_schema.innodb_trx " +
"WHERE trx_mysql_thread_id = CONNECTION_ID()")
.uniqueResult();