mysql鎖(四)myisam下鎖的介紹和實踐三

****MYISAM存儲引擎下讀鎖和寫鎖是互斥的****
MYISAM存儲引擎下讀鎖和寫鎖是互斥的,即當(dāng)兩個請求同時到達的情況下,一個申請寫鎖,一個申請讀鎖,MYISAM存儲引擎只能設(shè)置寫鎖或者讀鎖,不能既設(shè)置寫鎖又設(shè)置讀鎖。


****MYISAM存儲引擎下寫鎖的優(yōu)先級比較高****
缺省的情況下,同一時間點上,同時到達兩個進程,分別申請讀鎖和寫鎖的情況,MYSQL會優(yōu)先給寫鎖。
而且,如果讀請求先到鎖等待隊列里面排隊,寫請求后到鎖等待隊列的話,也是優(yōu)先給寫鎖,寫鎖處理完畢才給讀鎖。這是缺省情況下,mysql認(rèn)為寫比讀更重要,所以做出的這種分配機制。


接下來我們嘗試自己去觀察下,事實是不是這樣的吧?

A窗口先運行一個時間比較長的update操作,然后立即去執(zhí)行B窗口的select操作,然后立即再去C窗口執(zhí)行update操作。(A窗口運行的時候,B窗口的select先進入鎖等待隊列,C窗口的update后進入鎖等待隊列,觀察在鎖等待隊列中select 先到,update后到的情況下,誰先執(zhí)行?)


由圖中我們可以看到,在進入鎖等待隊列時,select先到隊列等待的但卻是最后執(zhí)行的,update后到隊列但卻是先執(zhí)行的,因此,可以說明,myisam 下默認(rèn)對寫的優(yōu)先級比較高。


****適用的場景****
Myisam引擎這種缺省情況下的機制,會有一個比較嚴(yán)重的問題,那就是對于大量的更新和查詢操作的應(yīng)用,因為寫操作的優(yōu)先級大于讀操作,那就可能造成讀鎖很難獲得讀鎖,一直阻塞在那邊,直到寫操作執(zhí)行完畢,因此,myisam表只適合讀多寫少的情況下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容