MySQL鎖機(jī)制

MySQL鎖機(jī)制

定義

數(shù)據(jù)庫(kù)鎖機(jī)制簡(jiǎn)單來說厘托,就是數(shù)據(jù)庫(kù)為了保證數(shù)據(jù)的一致性铅匹,使各種共享資源在被并發(fā)訪問時(shí)變得有序而設(shè)計(jì)一的一種規(guī)則饺藤。

表鎖與行鎖的比較

  • 表鎖:鎖定整張表記錄

    1. 開銷小涕俗、加鎖快

    2. 不會(huì)出現(xiàn)死鎖

    3. 鎖粒度大再姑,發(fā)生鎖沖突的概率高,并發(fā)度相對(duì)低

  • 行鎖:鎖定表中的一行或幾行記錄

    1. 開銷大绍填,加鎖慢

    2. 會(huì)出現(xiàn)死鎖

    3. 鎖粒度小栖疑,發(fā)生鎖沖突的概率低遇革,并發(fā)度也相對(duì)表鎖較高

InnoDB的鎖類型

InnoDB的行鎖類型主要有讀鎖(共享鎖)澳淑、寫鎖(排他鎖)、意向鎖和MDL鎖

  • 讀鎖

    定義:簡(jiǎn)稱 S 鎖量窘,一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的讀鎖蚌铜,其他事務(wù)也能獲取該行對(duì)應(yīng)的讀鎖嫩海,但不能獲取寫鎖

    讀鎖有兩種select方式的應(yīng)用:

    1. 自動(dòng)提交模式下的select叁怪,不需要加任何鎖,直接返回查詢結(jié)果

    2. 通過select……lock in share mode 在被讀取行記錄或行記錄的范圍上加一個(gè)讀鎖涣觉,讓其他事務(wù)可以讀官册,但時(shí)要想加寫鎖膝宁,那就會(huì)被阻塞

  • 寫鎖

    定義:簡(jiǎn)稱X鎖,一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的寫鎖合蔽,其他事務(wù)就不能在獲取改行的其他鎖(寫鎖與讀鎖)辈末,寫鎖優(yōu)先級(jí)最高

    寫鎖的應(yīng)用:

    1. select…… for update映皆,它會(huì)對(duì)讀取的行記錄加一個(gè)寫鎖捅彻,那么其他事務(wù)就不能對(duì)鎖定的行上加任何鎖步淹,要不然會(huì)被阻塞
  • MDL(meta data lock)鎖

    作用:用于保證表中元數(shù)據(jù)的信息

    例子:在會(huì)話A中,表開啟查詢事務(wù)后键闺,會(huì)自動(dòng)獲得一個(gè)MDL鎖辛燥,會(huì)話B就不可以執(zhí)行任何DDL語句的操作

    DDL:創(chuàng)建挎塌、刪除内边、修改漠其、庫(kù)或表結(jié)構(gòu),對(duì)數(shù)據(jù)庫(kù)或表的結(jié)構(gòu)操作

    注意:進(jìn)行DDL操作完成之前拴驮,必須等待持有表上的元數(shù)據(jù)鎖的事務(wù)提交或回滾莹汤。在DDL操作在執(zhí)行階段可能會(huì)短暫地需要表上的獨(dú)占鎖

  • 意向鎖

    意向鎖時(shí)表級(jí)鎖纲岭,有兩種意向鎖的類型止潮,分別為意向共享鎖和意向排他鎖

    1. 意向共享鎖(IS):指在一個(gè)數(shù)據(jù)行加共享鎖前必須線取得該表的IS鎖

    2. 意向排他鎖(IX):指在一個(gè)數(shù)據(jù)行加排他鎖前必須線取得該表的IX鎖

    意向鎖的作用跟MDL類似喇闸,都是防止在事務(wù)進(jìn)行過程燃乍,執(zhí)行DDL語句的操作致數(shù)據(jù)的不一致宛琅。

InnoDB行鎖種類

在RR隔離級(jí)別下嘿辟,行鎖有三種

注意:鎖是加在索引上的红伦,如果字段沒有建索引,在更新某行記錄的時(shí)候會(huì)把整張表鎖住

  • 單個(gè)行記錄的鎖(record lock)

    更新同一行數(shù)據(jù)會(huì)出現(xiàn)鎖等待的現(xiàn)象

    注意:

    1. 主鍵和唯一索引都是行記錄的鎖模式召调。

    2. 在RC隔離級(jí)別下某残,只有record lock記錄鎖模式

  • 間隙鎖(GAP lock)

    在RR這個(gè)事務(wù)隔離級(jí)別玻墅,為了避免幻讀現(xiàn)象澳厢,引入了Gap lock剩拢。但它只鎖定行記錄數(shù)據(jù)的范圍徐伐,不包含一記錄本身,即不允許在此范圍內(nèi)插入任何數(shù)據(jù)角雷。

    注意:在RC隔離級(jí)別勺三,間隙鎖會(huì)失效

  • 記錄鎖和間隙鎖的組合叫作next-key lock

    Next-key lock 是記錄鎖 (Record Lock) 與間l隙鎖(Gap lock)的組合吗坚,當(dāng)InnoDB掃描索引記錄時(shí)商源,會(huì)先對(duì)選中的索引記錄加上記錄鎖(Record Lock)炊汹,再對(duì)索引記錄兩邊的間隙上加上間隙鎖(Gap lock)讨便。

    注意:普通索引默認(rèn)的就是next-key lock模式

鎖等待死鎖

  • 鎖等待

    鎖等待是指一個(gè)事務(wù)過程中產(chǎn)生的鎖霸褒,其他事務(wù)需要等待一個(gè)事務(wù)釋放它的鎖废菱,才能棧用該資源殊轴。如果該事務(wù)一直不釋放袒炉,就需要持續(xù)等待下去我磁,直到超過鎖等待時(shí)間芋哭。

  • 死鎖

    死鎖是指兩個(gè)或兩個(gè)以的進(jìn)程在執(zhí)行過程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,就是所謂的鎖資源請(qǐng)求產(chǎn)生了回路現(xiàn)象斑鸦,即死循環(huán)

    四種避免死鎖的方法

    1. 如果不同程序會(huì)并發(fā)存取多個(gè)表,或者設(shè)計(jì)多行記錄時(shí)墩虹,盡量以相同的順序訪問表

    2. 業(yè)務(wù)中盡量采用小事務(wù)诫钓,避免使用大事務(wù)菌湃,要及時(shí)提交或者回滾事務(wù)惧所,

    3. 在同一個(gè)事務(wù)中下愈,盡可能做到一次鎖定所需要的所有資源

    4. 對(duì)于非常容易產(chǎn)生死鎖的業(yè)務(wù)部分势似,可以嘗試使用升級(jí)鎖粒度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栅迄,隨后出現(xiàn)的幾起案子世蔗,更是在濱河造成了極大的恐慌朗兵,老刑警劉巖寸爆,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異魔种,居然都是意外死亡节预,警方通過查閱死者的電腦和手機(jī)安拟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奔滑,你說我怎么就攤上這事朋其∶吩常” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵体斩,是天一觀的道長(zhǎng)絮吵。 經(jīng)常有香客問我蹬敲,道長(zhǎng),這世上最難降的妖魔是什么瘪校? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任吉嫩,我火速辦了婚禮自娩,結(jié)果婚禮上忙迁,老公的妹妹穿的比我還像新娘。我一直安慰自己恰梢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娃豹,像睡著了一般懂版。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上私股,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天黄娘,我揣著相機(jī)與錄音优床,去河邊找鬼胆敞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛观话,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼哀澈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤比然,失蹤者是張志新(化名)和其女友劉穎万俗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體库倘,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年传黄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凡伊。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡系忙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惠豺,到底是詐尸還是另有隱情银还,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布洁墙,位于F島的核電站蛹疯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扫俺。R本人自食惡果不足惜苍苞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狼纬。 院中可真熱鬧羹呵,春花似錦、人聲如沸疗琉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盈简。三九已至凑耻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柠贤,已是汗流浹背香浩。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臼勉,地道東北人邻吭。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宴霸,于是被迫代替她去往敵國(guó)和親囱晴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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

  • 前言 數(shù)據(jù)庫(kù)鎖定機(jī)制是數(shù)據(jù)庫(kù)為了保證數(shù)據(jù)的一致性而使各種共享資源在并發(fā)訪問時(shí)變的有序的一種規(guī)則瓢谢。MySQL數(shù)據(jù)庫(kù)的...
    Justlearn閱讀 1,669評(píng)論 0 4
  • 為什么要學(xué)習(xí)鎖機(jī)制 鎖是計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問某一資源的機(jī)制畸写。 因?yàn)閿?shù)據(jù)也是一種供許多用戶共享的資源,如...
    Java架構(gòu)師筆記閱讀 917評(píng)論 0 7
  • 行鎖氓扛、表鎖對(duì)比 開銷枯芬、加鎖速度、死鎖、粒度破停、并發(fā)性能 表鎖:開銷小翅楼,加鎖快;不會(huì)出現(xiàn)死鎖真慢;鎖定力度大毅臊,發(fā)生鎖沖突概...
    高廣超閱讀 6,172評(píng)論 0 25
  • 寫作難嗎?難黑界。都不知道怎么寫管嬉,不是沒有題材而是有太多的題材不知道寫哪些。 難是因?yàn)樽x的書太少 朗鸠,寫來寫去已知的詞匯...
    土狼豆閱讀 232評(píng)論 0 1
  • ReactNative蚯撩? 是Facebook開源的跨平臺(tái)移動(dòng)應(yīng)用開發(fā)框架 ReactNative的導(dǎo)入 iOS使用...
    CoderYuZ閱讀 2,626評(píng)論 0 1