第一種:html
前提條件:找到執行很是慢的sql;mysql
如何找呢:還原客戶遇到的問題場景,從控制檯找到所執行的sql,一句句的去執行,直到找到執行很是慢的sqlsql
1.查詢是否鎖表服務器
show OPEN TABLES where In_use > 0;分佈式
2.查詢進程(若是您有SUPER權限,您能夠看到全部線程。不然,您只能看到您本身的線程)spa
show processlist線程
3.殺死進程id(就是上面命令的id列)orm
kill idhtm
第二種:blog
1.查看下在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2.殺死進程id(就是上面命令的trx_mysql_thread_id列)
kill 線程ID
第三種:
也許你沒法查看到所在的info,這個時候你須要重啓服務器,若是是分佈式的話,就一臺臺重啓吧;
原理是:殺死全部進程,釋放全部鎖。
MySQL - 鎖等待超時與information_schema的三個表:
-- 1.information_schema.innodb_trx–當前運行的全部事務
select * from information_schema.innodb_trx;
-- information_schema.innodb_locks–當前出現的鎖
select * from information_schema.innodb_locks;
-- information_schema.innodb_lock_waits–鎖等待的對應關係
select * from information_schema.innodb_lock_waits;
-------------------------------------------------------------------------------------------
//經常使用
select * from information_schema.innodb_trx where trx_state = 'LOCK WAIT';
kill trx_mysql_thread_id(對應具體的線程id);
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx ;
原文出處:https://www.cnblogs.com/tongcc/p/11807551.html