一、从视图查看
查看进程
SHOW PROCESSLIST;
// 查看是否锁表
SHOW OPEN TABLES WHERE In_use > 0;
1、查看当前的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2、查看当前锁定的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3、查看当前等锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
二、使用show查看
1、查询是否锁表
show OPEN TABLES where In_use > 0;
2、查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
show processlist ;
3、杀死进程id(就是上面命令的id列)
kill 462540518 ;
三、查看脚本
1、脚本一
SELECT
TH.processlist_id, -- 这个就是你要的 connection_id, 你可以 kill 这个,达到终止它的操作的目的
TH.processlist_command as command, -- 这个为 sleep,则表明操作结束了,但没有提交事务,也就是事务挂起了
TIMESTAMPDIFF(second, TRX.trx_started, NOW()) as tx_duration, -- 事务已经开启多长时间了
ESC.current_schema, ESC.sql_text -- 这个不一定能查到,最后执行的 SQL(事务中有多个语句时,这个只是最后一个,江代表是产生锁的那个)
FROM performance_schema.threads TH
INNER JOIN information_schema.innodb_trx TRX
ON TRX.trx_mysql_thread_id = TH.processlist_id
LEFT JOIN performance_schema.events_statements_current ESC
ON ESC.thread_id = TH.thread_id;
2、脚本二
select r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,b.trx_query blocking_query
from information_schema.innodb_lock_waits w
inner join information_schema.innodb_trx b
on b.trx_id = w.blocking_trx_id
inner join information_schema.innodb_trx r
on r.trx_id = w.requesting_trx_idG