Mysql關(guān)于進程中的死鎖和解除鎖問題
什么是死鎖
死鎖是2+個線程在執(zhí)行過程中, 因爭奪資源而造成的相互等待的現(xiàn)象,若無外力作用,它們將無法推進下去。
死鎖產(chǎn)生的4個必要條件
互斥條件
指進程對所分配的資源進行排他性使用,即一段時間內(nèi)某資源只有一個進程占用,其他的進程請求資源只能等待,直至被占有資源的進程得到釋放。
請求和保留條件
指進程至少保持占用一個資源,但又提出新的資源請求,而該資源正被其他進程占用,此時請求進程阻塞,但對以獲得的其他資源保持不放。
不剝奪條件
指進程已獲得的資源,在未使用完之前,不能剝奪,只能使用完時由自己釋放。
環(huán)路等待條件
值發(fā)生死鎖時,必然存在一個進程占用資源的環(huán)形鏈,即進程集合(P0,P1,P2, … Pn),P0等待P1資源釋放,P1等待P2資源釋放,P3等待 … Pn等待P0資源釋放。
對應(yīng)到mysql中存在的互斥鎖,和事務(wù)對資源使用排他鎖占用,并且事務(wù)不結(jié)束不會釋放,事務(wù)之間可會出現(xiàn)資源之間的相互占用,相互等待,因此看來,mysql中是會出現(xiàn)死鎖的。
Mysql關(guān)于進程中的死鎖和解除鎖
Mysql 經(jīng)常會遇到語句或者存儲過程長時間沒有反應(yīng),大概率就是掛掉了,或者死鎖了。
可通過如下幾種方式來查看當前進程狀態(tài)
1. 查詢數(shù)據(jù)庫所有的進程狀態(tài)
SHOW PROCESSLIST
SELECT * FROM information_schema.PROCESSLIST;

2. 查詢在鎖的事務(wù)
SELECT * FROM information_schema.INNODB_TRX;
3. 查看是否鎖表
show OPEN TABLES where In_use > 0;
4. 觀察事務(wù)內(nèi)鎖狀態(tài)
show engine innodb status

status 里面就有對應(yīng)的結(jié)果,具體結(jié)果可以搜索了。
最后,殺死進程
查詢到上面的進程id,可以用如下命令結(jié)束進程
KILL 進程id
KILL 38233
到此這篇關(guān)于Mysql關(guān)于進程中的死鎖和解除鎖的文章就介紹到這了,更多相關(guān)Mysql死鎖和解除鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決mysql的賦權(quán)操作之GRANT ALL PRIVILEGES ON *.*
這篇文章主要介紹了解決mysql的賦權(quán)操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION問題,本文給大家分享兩種情況分析分享解決方案,感興趣的朋友一起看看吧2022-11-11
如何解決MySQL5升級為MySQL8遇到的問題my.ini
這篇文章主要介紹了如何解決MySQL5升級為MySQL8遇到的問題my.ini,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
CentOS7環(huán)境下源碼安裝MySQL5.7的方法
這篇文章主要介紹了CentOS7環(huán)境下源碼安裝MySQL5.7的方法,結(jié)合實例形式分析了CentoS7環(huán)境下MySQL5.7的下載、編譯、安裝、設(shè)置等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03

