第七章 并發(fā)控制

之前我們討論了單一的TX的恢復脸甘。一份數(shù)據(jù)多個備份怎么保證CONSISTENCY旱幼,對多個變量一系列操作放在一個TX會如何奉件?

那么有多個并行的TX會如何呢?
你寫的東西被別人看見痴鳄,但是別人用了你的寫瘟斜,你卻回滾了。這就會有問題夏跷。
如果不對CONCURRENT TX管理的話哼转,系統(tǒng)會出現(xiàn)各種問題, 和DATA RACE 在parallel program 很相似槽华。

一個問題壹蔓,你能多提取500塊


image.png

你可以讓APPLICATION 來保護,比如去拿鎖猫态。 但是這會增加APPLICATION DEVELOPER 的負擔佣蓉,造成重復開發(fā)披摄,你的APP 和別人的APP會造成相同的數(shù)據(jù)塊的,這樣只拿自己內(nèi)存里的鎖是沒法保證的沒有DATA RACE的勇凭。

如果給STORAGE來做疚膊,那么APP就很簡單,上面什么都不用太考慮虾标。

image.png

今天我們來講ISOLATION寓盗,因為其他三個上一章已經(jīng)搞定了。

image.png

SERIALIZABILITY
2個TX并行執(zhí)行璧函,執(zhí)行完的結(jié)果傀蚌,等同于這2個TX串行的執(zhí)行的結(jié)果。

image.png

上面2個TX 并行執(zhí)行 的效果 和串行是等價的蘸吓,所以他們并行執(zhí)行沒有問題善炫。

image.png

下面這種調(diào)度的方式就會有問題

image.png

下面有2種SOLUTION,一種就是在TX這完全加鎖库继,這個是可以的箩艺,但是太慢。
另外一種是用一種細粒度的鎖宪萄。在OBJECT LEVEL艺谆。但是依然不是SERILIZABLE,看下圖雨膨。

image.png

這個是讀未提交的問題擂涛。

那么我們是不是可以讓寫鎖的時間變長一直到COMMIT,才放鎖來解決這個問題聊记。這個時候讀鎖還是立即釋放的鎖。這樣會出現(xiàn)另外一種不SERIALIZABLE情況恢暖。


image.png

這個問題是不可重復讀排监,就是在一個TX里面,讀一個OBJ讀2次結(jié)果不一樣杰捂。
所以對READ來說舆床,SHORT DURATION 也不行,也要變成LONG duration嫁佳。
這個比第一種GLOBAL 好的挨队,是細粒度的鎖的實現(xiàn)。
還可以用讀寫鎖來優(yōu)化蒿往。

二階段鎖定盛垦,第一個階段是GROWING,(集合會慢慢變大)瓤漏;第二個階段腾夯,SHRINKING(發(fā)生在COMMIT的時候颊埃,只會收縮)


image.png

image.png

上面這種情況是不可能實現(xiàn)的,因為紅色的A 的READ蝶俱,讀鎖拿不到班利。

拿不到鎖的時候,可以等榨呆,可以ABORT罗标。
如果是等的話,就會出現(xiàn)DEADLOCK积蜻。避免DEADLOCK闯割,可以使用按照一定的順序去拿鎖。
如果是看到1個變量拿一把鎖浅侨,是沒法實現(xiàn)的纽谒。除非在一開始你就知道要鎖哪些變量浅萧。
我們可以去檢查DEADLOCK市框,發(fā)現(xiàn)DEADLOCK,把其中一個ABORT谎脯。
1.通過分析拿鎖過程是否有環(huán)不见。
2.我檢查TIMEOUT澳化,很長時間拿不到就ABORT自己。(你的TX比較久稳吮,就會沒法執(zhí)行完就ABORT自己缎谷;輪流拿鎖輪流ABORT自己,就會有活鎖的情況)

因為TWO PHASE LOCK 鎖在OBJECT上灶似,但會有在一個LIST 加2個新的ITEM列林,這2個OBEJCT 鎖是不沖突的。概括的說酪惭,在查2次集合的時候希痴,2次的ITEMS 數(shù)目不一樣。一個會比另一個多春感。

問題就在于把LOCK放在OBJECT上砌创,在上述情況中,應(yīng)該把這個鎖加在搜索的集合上鲫懒。


image.png

用謂詞鎖嫩实,或者間隙鎖(B樹上鎖一個子樹(RANGE))
在實際中,默認不采用SERIALZABLE窥岩,因為性能會不好甲献。一個分析的SQL,就會是一個很長的READ ONLY的TX(比如分析1個小時)那么在這個TX谦秧,其他的TX會被擋住竟纳,所以造成別的功能就掛了撵溃。

image.png

所以我們需要在一個SERIALZABLE 上的一個優(yōu)化。突破的方式在一個TRADE OFF的變化锥累。
比如要更好的性能缘挑,要犧牲一些CONSISTENCY上的保證。
這就提出了一個MVCC的CONTROL


image.png

把所有寫操作BUFFER起來(因為不知道最后是COMMIT,還是ABORT桶略,還不希望讀到未提交的寫)语淘,讀的時候要選合適的版本。在提交時际歼,系統(tǒng)會驗證是不是可以讓讀VISIBILE惶翻。(樂觀鎖,如果發(fā)生了CONFILICT鹅心,就產(chǎn)生新的版本)

image.png
image.png

如果在COMMIT的時候吕粗,看寫X的時間,如果BUFFER SET里有個新的TX提交的X寫旭愧,就會ABORT颅筋。

下面再看一個例子。


image.png
image.png

上面的方案 等價的SERIAL 的 順序如下圖


image.png

但也是有個反例的输枯。


image.png

但是幻讀的問題解決了议泵。

如果隱含的條件不在TX里可以表達,那么無論是TWO PHASE LOCK 還是MVCC都不能實現(xiàn)桃熄。

上述都是在一臺機器上的并發(fā)事務(wù)先口。

如果在2臺機器上要保持事務(wù),多臺機器要達成一致瞳收,應(yīng)該怎么做呢碉京?
1。要所有人都同意
2螟深。如何處理有的人掛了

2 phase commit - > paxos

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末收夸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子血崭,更是在濱河造成了極大的恐慌,老刑警劉巖厘灼,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夹纫,死亡現(xiàn)場離奇詭異,居然都是意外死亡设凹,警方通過查閱死者的電腦和手機舰讹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闪朱,“玉大人月匣,你說我怎么就攤上這事钻洒。” “怎么了锄开?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵素标,是天一觀的道長。 經(jīng)常有香客問我萍悴,道長头遭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任癣诱,我火速辦了婚禮计维,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撕予。我一直安慰自己鲫惶,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布实抡。 她就那樣靜靜地躺著欠母,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澜术。 梳的紋絲不亂的頭發(fā)上艺蝴,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音鸟废,去河邊找鬼猜敢。 笑死,一個胖子當著我的面吹牛盒延,可吹牛的內(nèi)容都是我干的缩擂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼添寺,長吁一口氣:“原來是場噩夢啊……” “哼胯盯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起计露,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤博脑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后票罐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叉趣,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年该押,在試婚紗的時候發(fā)現(xiàn)自己被綠了疗杉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚕礼,死狀恐怖烟具,靈堂內(nèi)的尸體忽然破棺而出梢什,到底是詐尸還是另有隱情,我是刑警寧澤朝聋,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布嗡午,位于F島的核電站,受9級特大地震影響玖翅,放射性物質(zhì)發(fā)生泄漏翼馆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一金度、第九天 我趴在偏房一處隱蔽的房頂上張望应媚。 院中可真熱鬧,春花似錦猜极、人聲如沸中姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丢胚。三九已至,卻和暖如春受扳,著一層夾襖步出監(jiān)牢的瞬間携龟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工勘高, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峡蟋,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓华望,卻偏偏與公主長得像蕊蝗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赖舟,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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