CMU 15445 14.二階段鎖定 + homework 4

DBMS包含一個(gè)鎖管理器矾削,用于決定事務(wù)是否可以鎖定碗殷。 它了解系統(tǒng)內(nèi)部的最新情況。
?共享鎖(S-LOCK):允許多個(gè)事務(wù)同時(shí)讀取同一對(duì)象的鎖祟霍。 如果一個(gè)事務(wù)持有共享鎖杏头,則另一個(gè)事務(wù)可以獲取該共享鎖。
?獨(dú)占鎖定(X-LOCK):允許事務(wù)修改對(duì)象沸呐。 此鎖與任何其他鎖不兼容醇王。 一次只能有一個(gè)事務(wù)持有獨(dú)占鎖。

使用鎖執(zhí)行:
1.事務(wù)從鎖管理器請(qǐng)求鎖(或升級(jí))崭添。
2.鎖管理器根據(jù)其他事務(wù)當(dāng)前持有的鎖來(lái)授予或阻止請(qǐng)求厦画。
3.當(dāng)不再需要時(shí),事務(wù)釋放鎖。
4.鎖管理器更新其內(nèi)部鎖表根暑,然后把鎖給其他等待的事務(wù)力试。

二階段鎖定

兩階段鎖定(2PL)是一種悲觀的并發(fā)控制協(xié)議,用于確定是否允許事務(wù)訪問(wèn)數(shù)據(jù)庫(kù)中的對(duì)象排嫌。協(xié)議不需要知道事務(wù)將提前執(zhí)行??的所有查詢畸裳。


image.png

image.png

階段#1:膨脹
?每個(gè)事務(wù)都從DBMS的鎖管理器請(qǐng)求它所需的鎖。
?鎖管理器授予/拒絕鎖定請(qǐng)求淳地。
階段#2:收縮
?事務(wù)在釋放第一個(gè)鎖后立即進(jìn)入此階段怖糊。
?允許事務(wù)僅釋放先前獲取的鎖。它無(wú)法在此階段獲得新鎖颇象。
就其本身而言伍伤,2PL足以保證conflict serializability。它生成precedence graph是無(wú)環(huán)的遣钳。
2個(gè)缺點(diǎn):
但它很容易出現(xiàn)級(jí)聯(lián)中止扰魂,即當(dāng)事務(wù)中止并且現(xiàn)在必須回滾另一個(gè)事務(wù)時(shí),這會(huì)導(dǎo)致浪費(fèi)很多資源蕴茴。


image.png

還有一些可序列化的潛在計(jì)劃劝评,但2PL不允許這種計(jì)劃(鎖會(huì)限制并發(fā))。

嚴(yán)格的2pl

事務(wù)只在完成時(shí)釋放鎖倦淀。 確實(shí)沒(méi)有像普通2PL那樣shrinking的階段蒋畜。
如果事務(wù)寫入的值在該事務(wù)完成之前未被其他事務(wù)讀取或覆蓋,則調(diào)度是嚴(yán)格的撞叽。
這種方法的優(yōu)點(diǎn)是DBMS不會(huì)導(dǎo)致級(jí)聯(lián)中止姻成。
同時(shí)只要把原來(lái)的值賦值回去就可以實(shí)現(xiàn)abort了。

為什么呢愿棋?
我們看一下s2pl的時(shí)序圖


image.png

再看下abort是怎么做的
先undo科展,隨后記log,然后unlock


image.png

下面要解決的就是2pl 的死鎖問(wèn)題

死鎖問(wèn)題的解決思路分為2種初斑,一種是死鎖預(yù)防,一種是死鎖檢測(cè)膨处。

image.png

image.png

死鎖檢測(cè)

DBMS 創(chuàng)建 wait-for圖:如果事務(wù)Ti等待事務(wù)Tj釋放鎖见秤,從Ti到Tj有一條邊。系統(tǒng)將定期檢查等待圖中的環(huán)真椿,然后決定如何打破它鹃答。
?當(dāng)DBMS檢測(cè)到死鎖時(shí),它將選擇“受害者”事務(wù)進(jìn)行回滾以中斷循環(huán)突硝。
?受害者事務(wù)將重新啟動(dòng)或中止测摔,具體取決于應(yīng)用程序如何調(diào)用它
?選擇受害者時(shí)需要考慮多個(gè)事務(wù)屬性。沒(méi)有一個(gè)選擇比其他選擇更好。 2PL DBMS都做不同的事情:
1.按年齡(最新或最舊的時(shí)間戳)锋八。
2.按進(jìn)度(執(zhí)行的最少/大多數(shù)查詢)浙于。
3.已鎖定的項(xiàng)目數(shù)量。
4.通過(guò)我們必須用它回滾的#個(gè)事務(wù)挟纱。
5.過(guò)去重啟事務(wù)的次數(shù)
?回滾長(zhǎng)度:選擇要中止的受害者事務(wù)后羞酗,DBMS還可以決定回滾事務(wù)的更改的距離∥煞可以是整個(gè)事務(wù)檀轨,也可以是足夠的操作(部分事務(wù))足以來(lái)打破僵局


image.png

死鎖預(yù)防

當(dāng)txn嘗試獲取另一個(gè)txn持有的鎖時(shí),DBMS會(huì)殺死其中一個(gè)以防止死鎖欺嗤。
該方法不需要wait-for圖或檢測(cè)算法参萄。

根據(jù)時(shí)間戳分配優(yōu)先級(jí)(例如,舊的意味著更高的優(yōu)先級(jí))煎饼。
這些方案保證沒(méi)有死鎖讹挎,因?yàn)樵诘却i時(shí)只允許一個(gè)方向。 當(dāng)事務(wù)重新啟動(dòng)時(shí)腺占,其(新)優(yōu)先級(jí)是其舊時(shí)間戳淤袜。
?Wait-Die(“Old等待Young”):如果T1具有更高的優(yōu)先級(jí),則T1等待T2衰伯。 否則T1中止
?wound-wait(“Young等待old”):如果T1具有更高的優(yōu)先級(jí)铡羡,則T2中止。 否則T1會(huì)等待意鲸。

關(guān)于死鎖檢測(cè) 和 死鎖預(yù)防烦周,把作業(yè)搞懂 應(yīng)該就沒(méi)啥問(wèn)題了。
https://15445.courses.cs.cmu.edu/fall2018/files/hw4-sols.pdf

粒度鎖

如果一個(gè)事務(wù)要更新十億個(gè)元組怎顾,它必須向DBMS的鎖管理器詢問(wèn)十億個(gè)鎖读慎。
這將是緩慢的,因?yàn)槲覀儽仨氃阪i管理器的內(nèi)部鎖表數(shù)據(jù)結(jié)構(gòu)中獲取鎖存器槐雾。

相反夭委,我們希望使用鎖層次結(jié)構(gòu),允許事務(wù)在系統(tǒng)中采用更粗粒度的鎖募强。 為此層次結(jié)構(gòu)中的某些內(nèi)容獲取鎖定會(huì)隱式獲取其所有子項(xiàng)的鎖定株灸。

意圖鎖定允許更高級(jí)別的節(jié)點(diǎn)以共享或獨(dú)占模式鎖定,而無(wú)需檢查所有后代節(jié)點(diǎn)擎值。 如果節(jié)點(diǎn)處于意圖模式慌烧,則在較低級(jí)別進(jìn)行顯式鎖定。

?Intention-Shared(IS):表示使用共享鎖在較低級(jí)別顯式鎖定鸠儿。
?Intention-Exclusive(IX):表示使用獨(dú)占鎖或共享鎖在較低級(jí)別顯式鎖定屹蚊。
?Shared + Intention-Exclusive(SIX):以該節(jié)點(diǎn)為根的子樹在共享模式下顯式鎖定厕氨,顯式鎖定在低級(jí)別使用獨(dú)占模式鎖定。


image.png
image.png
image.png

image.png

image.png

同樣把作業(yè)里的QUESTION 3理解清楚就搞清楚這個(gè)了汹粤。

總結(jié)

應(yīng)用程序通常不會(huì)手動(dòng)設(shè)置鎖命斧。 但有時(shí)它可以為DBMS提供一些提示來(lái)幫助它提高并發(fā)性:
SELECT ... FOR UPDATE:執(zhí)行選擇,然后在獲取的元組上設(shè)置獨(dú)占鎖
2PL幾乎用于所有DBMS玄括。 它自動(dòng)提供正確的交錯(cuò)事務(wù)操作冯丙。
但它必須能夠應(yīng)對(duì)死鎖的問(wèn)題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遭京,一起剝皮案震驚了整個(gè)濱河市胃惜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哪雕,老刑警劉巖船殉,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斯嚎,居然都是意外死亡利虫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門堡僻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糠惫,“玉大人,你說(shuō)我怎么就攤上這事钉疫∨鸱恚” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵牲阁,是天一觀的道長(zhǎng)固阁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)城菊,這世上最難降的妖魔是什么备燃? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮凌唬,結(jié)果婚禮上并齐,老公的妹妹穿的比我還像新娘。我一直安慰自己客税,他們只是感情好况褪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霎挟,像睡著了一般窝剖。 火紅的嫁衣襯著肌膚如雪麻掸。 梳的紋絲不亂的頭發(fā)上酥夭,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼熬北。 笑死疙描,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讶隐。 我是一名探鬼主播起胰,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼巫延!你這毒婦竟也來(lái)了效五?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤炉峰,失蹤者是張志新(化名)和其女友劉穎畏妖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疼阔,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戒劫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婆廊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迅细。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淘邻,靈堂內(nèi)的尸體忽然破棺而出茵典,到底是詐尸還是另有隱情,我是刑警寧澤列荔,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布敬尺,位于F島的核電站,受9級(jí)特大地震影響贴浙,放射性物質(zhì)發(fā)生泄漏砂吞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一崎溃、第九天 我趴在偏房一處隱蔽的房頂上張望蜻直。 院中可真熱鬧,春花似錦袁串、人聲如沸概而。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赎瑰。三九已至,卻和暖如春破镰,著一層夾襖步出監(jiān)牢的瞬間餐曼,已是汗流浹背压储。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留源譬,地道東北人集惋。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踩娘,于是被迫代替她去往敵國(guó)和親刮刑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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