主要是参考其他的博客。但是很有用。确实解决了我们之前遇到的一个问题。
不过场景不太一样。当时我们系统的代码大致如下:
start transaction;
try{
if(i == 0) return;
doSomething;
commit;
}catch(Exception e){
rollback()
}
在特殊情况下,语句进入到if,出现事务running异常。
一直无法定位到问题,显示应用级别是系统运行大概两天就会高连接数挂掉。
大概解决思路如下:
1,使用如下语句查看事务
SELECT * FROM information_schema.INNODB_TRX\G;
发现一条一直在running的sql。
2,通过trx_mysql_thread_id: 1662332的去查询information_schema.processlist找到执行事务的客户端请求的SQL线程
select * from information_schema.processlist where id=1662333;
3,查看到端口和host以后,再在对应的服务器查看相关的应用和日志
netstat -nlatp |grep 23452
ps -eaf|grep 12059
查看到对应的服务器,然后查找事务相关的代码,定位到问题。