一、直接解决事务未提交问题
查询事务运行情况
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX t;
1.trx_id:InnoDB引擎内部唯一的事务ID。
2.trx_state:当前事务状态。
3.trx_started:事务的开始时间。
4.trx_mysql_thread_id:MySQL中线程id。
若想快速解决问题,不排查问题,可以直接kill掉线程。
kill 779
执行查询事务语句
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX t;
解决事务未提交问题
二、定位导致解决事务未提交的sql
开启日志监控
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
查询日志情况
SELECT * from mysql.general_log gl ORDER BY event_time DESC;
人为制造事务未提交事件(或者等待下次事务未提交再产生也行)
查询事务情况
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX t;
线程id为780
根据线程id查询刚刚开启的日志
SELECT * from mysql.general_log gl where thread_id =780 ORDER BY event_time DESC;
排查sql定位问题