間隙鎖 gap lock

鎖們





什么是間隙鎖奏窑?


間隙鎖(Gap Lock):鎖加在不存在的空閑空間校哎,可以是兩個(gè)索引記錄之間膨报,也可能是第一個(gè)索引記錄之前或最后一個(gè)索引之后的空間。





當(dāng)我們用范圍條件而不是相等條件索引數(shù)據(jù)即横,并請(qǐng)求共享或排他鎖時(shí),InnoDB會(huì)給符合條件的已有數(shù)據(jù)記錄的索引項(xiàng)枷鎖裆赵;對(duì)于鍵值在條件范圍內(nèi)但并不存在的記錄东囚,叫做“間隙(GAP)”。

InnoDB也會(huì)對(duì)這個(gè)“間隙”枷鎖顾瞪,這種鎖機(jī)制就是所謂的間隙鎖(Next-Key鎖)舔庶。


間隙鎖的危害


因?yàn)镼uery執(zhí)行過程中通過范圍查找的話,他會(huì)鎖定整個(gè)范圍內(nèi)所有的索引鍵值陈醒,即使這個(gè)鍵值并不存在惕橙。間隙鎖有一個(gè)比較致命的弱點(diǎn),就是當(dāng)鎖定一個(gè)范圍鍵值之后钉跷,即使某些不存在的鍵值也會(huì)被無辜的鎖定弥鹦,也造成在鎖定的時(shí)候無法插入鎖定鍵值范圍內(nèi)的任何數(shù)據(jù)。在某些場景下這可能會(huì)對(duì)性能造成很大的危害爷辙。

間隙鎖與死鎖

最近用戶反饋說系統(tǒng)老是出現(xiàn)insert時(shí)彬坏,等待超時(shí)了,最后發(fā)現(xiàn)是insert間隙鎖膝晾!間隙鎖是innodb中行鎖的一種栓始, 但是這種鎖鎖住的卻不止一行數(shù)據(jù),他鎖住的是多行血当,是一個(gè)數(shù)據(jù)范圍幻赚。間隙鎖的主要作用是為了防止出現(xiàn)幻讀,但是它會(huì)把鎖定范圍擴(kuò)大臊旭,

有時(shí)候也會(huì)給我們帶來麻煩落恼,我們就遇到了。 在數(shù)據(jù)庫參數(shù)中离熏, 控制間隙鎖的參數(shù)是:

innodb_locks_unsafe_for_binlog佳谦,

這個(gè)參數(shù)默認(rèn)值是OFF, 也就是啟用間隙鎖滋戳, 他是一個(gè)bool值钻蔑, 當(dāng)值為true時(shí)表示disable間隙鎖啥刻。

那為了防止間隙鎖是不是直接將innodb_locaks_unsafe_for_binlog設(shè)置為true就可以了呢? 不一定矢棚!

而且這個(gè)參數(shù)會(huì)影響到主從復(fù)制及災(zāi)難恢復(fù)郑什, 這個(gè)方法還尚待商量。

間隙鎖的出現(xiàn)主要集中在同一個(gè)事務(wù)中先delete后 insert的情況下蒲肋, 當(dāng)我們通過一個(gè)參數(shù)去刪除一條記錄的時(shí)候蘑拯,

如果參數(shù)在數(shù)據(jù)庫中存在,那么這個(gè)時(shí)候產(chǎn)生的是普通行鎖兜粘,鎖住這個(gè)記錄申窘, 然后刪除, 然后釋放鎖孔轴。如果這條記錄不存在剃法,

問題就來了, 數(shù)據(jù)庫會(huì)掃描索引路鹰,發(fā)現(xiàn)這個(gè)記錄不存在贷洲, 這個(gè)時(shí)候的delete語句獲取到的就是一個(gè)間隙鎖,然后數(shù)據(jù)庫會(huì)向左掃描掃到第一個(gè)比給定參數(shù)小的值晋柱,向右掃描掃描到第一個(gè)比給定參數(shù)大的值优构, 然后以此為界,構(gòu)建一個(gè)區(qū)間雁竞, 鎖住整個(gè)區(qū)間內(nèi)的數(shù)據(jù)钦椭, 一個(gè)特別容易出現(xiàn)死鎖的間隙鎖誕生了。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碑诉,一起剝皮案震驚了整個(gè)濱河市彪腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌进栽,老刑警劉巖德挣,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異快毛,居然都是意外死亡盲厌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門祸泪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人建芙,你說我怎么就攤上這事没隘。” “怎么了禁荸?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵右蒲,是天一觀的道長阀湿。 經(jīng)常有香客問我,道長瑰妄,這世上最難降的妖魔是什么陷嘴? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮间坐,結(jié)果婚禮上灾挨,老公的妹妹穿的比我還像新娘。我一直安慰自己竹宋,他們只是感情好劳澄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜈七,像睡著了一般秒拔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上飒硅,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天砂缩,我揣著相機(jī)與錄音,去河邊找鬼三娩。 笑死庵芭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尽棕。 我是一名探鬼主播喳挑,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼滔悉!你這毒婦竟也來了伊诵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤回官,失蹤者是張志新(化名)和其女友劉穎曹宴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歉提,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笛坦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苔巨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片版扩。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侄泽,靈堂內(nèi)的尸體忽然破棺而出礁芦,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布柿扣,位于F島的核電站肖方,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏未状。R本人自食惡果不足惜俯画,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望司草。 院中可真熱鬧艰垂,春花似錦、人聲如沸翻伺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吨岭。三九已至拉宗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辣辫,已是汗流浹背旦事。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留急灭,地道東北人姐浮。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像葬馋,于是被迫代替她去往敵國和親卖鲤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容