mysql如何解除死鎖狀態

第一種: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

相關文章
相關標籤/搜索