一、从视图查看

查看进程
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_id\G

 

 

 posted on 2019-11-15 15:56  xibuhaohao  阅读(483)  评论(0编辑  收藏  举报