Mysql關(guān)于進(jìn)程中的死鎖和解除鎖問題
什么是死鎖
死鎖是2+個(gè)線程在執(zhí)行過程中, 因爭奪資源而造成的相互等待的現(xiàn)象,若無外力作用,它們將無法推進(jìn)下去。
死鎖產(chǎn)生的4個(gè)必要條件
互斥條件
指進(jìn)程對所分配的資源進(jìn)行排他性使用,即一段時(shí)間內(nèi)某資源只有一個(gè)進(jìn)程占用,其他的進(jìn)程請求資源只能等待,直至被占有資源的進(jìn)程得到釋放。
請求和保留條件
指進(jìn)程至少保持占用一個(gè)資源,但又提出新的資源請求,而該資源正被其他進(jìn)程占用,此時(shí)請求進(jìn)程阻塞,但對以獲得的其他資源保持不放。
不剝奪條件
指進(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資源釋放。
對應(yīng)到mysql中存在的互斥鎖,和事務(wù)對資源使用排他鎖占用,并且事務(wù)不結(jié)束不會(huì)釋放,事務(wù)之間可會(huì)出現(xiàn)資源之間的相互占用,相互等待,因此看來,mysql中是會(huì)出現(xiàn)死鎖的。
Mysql關(guān)于進(jìn)程中的死鎖和解除鎖
Mysql 經(jīng)常會(huì)遇到語句或者存儲過程長時(shí)間沒有反應(yīng),大概率就是掛掉了,或者死鎖了。
可通過如下幾種方式來查看當(dāng)前進(jìn)程狀態(tài)
1. 查詢數(shù)據(jù)庫所有的進(jìn)程狀態(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é)果可以搜索了。
最后,殺死進(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用MySQL?Explain?分析?SQL?執(zhí)行計(jì)劃
MySQL?提供的?EXPLAIN?工具能夠幫助我們深入了解查詢語句的執(zhí)行過程、索引使用情況以及潛在的性能瓶頸,本文將詳細(xì)介紹如何使用?EXPLAIN?分析?SQL?執(zhí)行計(jì)劃,并探討其中各個(gè)重要字段的含義以及優(yōu)化建議,感興趣的朋友一起看看吧2025-04-04phpMyAdmin下將Excel中的數(shù)據(jù)導(dǎo)入MySql的圖文方法
使用phpMyAdmin將Excel中的數(shù)據(jù)導(dǎo)入MySql,需要將execl導(dǎo)入到mysql數(shù)據(jù)庫的朋友可以參考下。2010-08-08mysql 5.6.14 win32 解壓縮版(免安裝)安裝配置教程
這篇文章主要介紹了mysql 5.6.14 win32 解壓縮版(免安裝)安裝配置教程,感興趣的小伙伴們可以參考一下2016-11-11