mysql如何解除死鎖狀態


第一種:

前提條件:找到執行非常慢的sql;

如何找呢:還原客戶遇到的問題場景,從控制台找到所執行的sql,一句句的去執行,直到找到執行非常慢的sql

1.查詢是否鎖表

show OPEN TABLES where In_use > 0;

2.查詢進程(如果您有SUPER權限,您可以看到所有線程。否則,您只能看到您自己的線程)

show processlist

3.殺死進程id(就是上面命令的id列)

kill id

 

第二種:

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;
-------------------------------------------------------------------------------------------
//常用

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';

SELECT a.* FROM information_schema.processlist a where command <> 'sleep' ORDER BY time desc

select * from information_schema.processlist where time> 60 and user='srapp_stsj';

SELECT
concat('kill',' ', id,';')
FROM
information_schema. PROCESSLIST a
WHERE
command <> 'sleep'
AND info LIKE 'select%'
AND time > 60
and user = 'srapp_stsj'
ORDER BY
time DESC

EXPLAIN
select * from sr_main where sys_scbj = '0' and mdjlx = 'ls_jz' and sys_spzt = 2
and mhzsfz = '330219193210200010'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM