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

2. 查詢?cè)阪i的事務(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 里面就有對(duì)應(yīng)的結(jié)果,具體結(jié)果可以搜索了。
最后,殺死進(jìn)程
查詢到上面的進(jìn)程id,可以用如下命令結(jié)束進(jìn)程
KILL 進(jìn)程id
KILL 38233
到此這篇關(guān)于Mysql關(guān)于進(jìn)程中的死鎖和解除鎖的文章就介紹到這了,更多相關(guān)Mysql死鎖和解除鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(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
mysqli多查詢特性 實(shí)現(xiàn)多條sql語句查詢
mysqli相對(duì)于mysql有很多優(yōu)勢(shì),mysqli連接數(shù)據(jù)庫和mysqli預(yù)處理prepare使用,不僅如此,mysqli更是支持多查詢特性2012-12-12
如何解決MySQL5升級(jí)為MySQL8遇到的問題my.ini
這篇文章主要介紹了如何解決MySQL5升級(jí)為MySQL8遇到的問題my.ini,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
CentOS7環(huán)境下源碼安裝MySQL5.7的方法
這篇文章主要介紹了CentOS7環(huán)境下源碼安裝MySQL5.7的方法,結(jié)合實(shí)例形式分析了CentoS7環(huán)境下MySQL5.7的下載、編譯、安裝、設(shè)置等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03

