溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中常見鎖

發(fā)布時(shí)間:2020-05-25 16:23:15 來源:億速云 閱讀:218 作者:鴿子 欄目:MySQL數(shù)據(jù)庫

1.MySQL服務(wù)器邏輯架構(gòu)

      圖片來源:MySQL官網(wǎng)
      MySQL中常見鎖
      每個(gè)連接都會(huì)在MySQL服務(wù)端產(chǎn)生一個(gè)線程(內(nèi)部通過線程池管理線程)。比如:一個(gè)select語句進(jìn)入,MySQL首先會(huì)在查詢緩存中查找是否緩存了這個(gè)select結(jié)果集,如果沒有則繼續(xù)執(zhí)行解析→優(yōu)化→執(zhí)行得過程;否則會(huì)直接從緩存中獲取結(jié)果集。

2.MySQL鎖

共享鎖與排他鎖(Shared and Exclusive Locks)

      共享鎖和排他鎖都是標(biāo)準(zhǔn)的行級(jí)鎖。
      1)共享鎖S:標(biāo)準(zhǔn)的讀鎖,讀鎖允許多個(gè)連接可以同一時(shí)刻并發(fā)讀取同一資源,互不干擾。
      2)排他鎖X:又稱寫鎖,一個(gè)寫鎖會(huì)阻塞其他的寫鎖或讀鎖,保證同一個(gè)時(shí)刻只有一個(gè)連接可以寫入數(shù)據(jù),同時(shí)防止其他用戶對這個(gè)數(shù)據(jù)的讀寫。

鎖類型英文名又稱同一時(shí)刻共同點(diǎn)
共享鎖SShared Locks讀鎖同一時(shí)刻,允許多個(gè)連接并發(fā)的讀取同一資源,互不干擾。兩者都是鎖機(jī)制本身的策略,通過這兩種策略對鎖進(jìn)行了區(qū)分
排他鎖XExclusive Locks 寫鎖同一時(shí)刻只有一個(gè)連接可以寫入數(shù)據(jù),同時(shí)防止其他用戶對這個(gè)數(shù)據(jù)的讀寫。同上
2.2意向鎖(Intention Locks)

      背景:多粒度鎖的并存場景。
      InnoDB支持多粒度鎖(鎖粒度:可分為行鎖表鎖),允許行鎖和表鎖共存。為了實(shí)現(xiàn)多粒度級(jí)別的鎖定,InnoDB使用了意圖鎖。
      意向鎖表級(jí)別的鎖。先提前聲明的一個(gè)意向,并獲取表級(jí)別的意向鎖(共享意向鎖IS或排他意向鎖IX),如果獲取成功,則稍后將要或正在(才被允許),對該表的某些行加鎖(S或X)了。
      注意:除了LOCK TABLES...WRITE,會(huì)鎖住表中的所有行,其他場景意向鎖實(shí)際鎖不住任何行。
      意向協(xié)議鎖:在事務(wù)能夠獲取表中的行上的共享鎖之前,他必須首先獲取表上的IS鎖或更強(qiáng)的鎖。在事務(wù)能夠獲取表中的行上的獨(dú)占鎖之前,它必須首先獲取表上的IX鎖。
      意向鎖實(shí)現(xiàn)的背景是多粒度鎖的并存場景,兼容性如下:

XIXSIS
XConflictConflictConflictConflict
IXConflictCompatibleConflictCompatible
SConflictConflictCompatibleCompatible
ISConflictCompatibleCompatibleCompatible

      Conflict:互斥
      Compatible:兼容
      意向鎖僅表示意向,是一種較弱的鎖,意向鎖之間兼容并行(IS,IX之間兼容并行)。X與IS,IX互斥,S與IX互斥。意向鎖是比X/S更弱的鎖,存在一種預(yù)判的意義。先獲取更弱的IS,IX鎖,如果獲取失敗就不必再獲取更強(qiáng)S,X鎖。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI