數(shù)據(jù)庫死鎖

進程A等待進程B釋放他的資源葫松,B又等待A釋放他的資源瓦糕,這樣就互相等待形成死鎖

產(chǎn)生死鎖的必要條件

  1. 互斥:指進程對所分配的資源進行排它性使用,即在一段時間內(nèi)某資源只由一個進程占用腋么,如果此時還有其他進程請求資源咕娄,則請求者只能等待,直至占有資源的進程用畢釋放珊擂。
  2. 請求和保持:指進程已經(jīng)保持至少一個資源圣勒,但又提出了新的資源請求费变,而該資源已經(jīng)被其他進程占有,此時請求進程阻塞圣贸,但又對自己已獲得的其它資源保持不釋放挚歧。
  3. 不剝奪:指進程已獲得的資源,在未使用完之前吁峻,不能被剝奪滑负,只能在使用完時由自己釋放。
  4. 環(huán)路等待:指在發(fā)生死鎖時用含,必然存在一個進程——資源的環(huán)形鏈矮慕,即進程集合{P0,P1啄骇,P2痴鳄,···,Pn}中的P0正在等待一個P1占用的資源缸夹;P1正在等待P2占用的資源夏跷,……,Pn正在等待已被P0占用的資源明未。

死鎖的原因

一般情況只發(fā)生鎖超時槽华,就是一個進程需要訪問數(shù)據(jù)庫表或者字段的時候,另外一個程序正在執(zhí)行帶鎖的訪問(比如修改數(shù)據(jù))趟妥,那么這個進程就會等待猫态,當?shù)攘撕芫面i還沒有解除的話就會鎖超時,報告一個系統(tǒng)錯誤披摄,拒絕執(zhí)行相應的SQL操作亲雪。
發(fā)生死鎖的情況比較少吵护,比如一個進程需要訪問兩個資源(數(shù)據(jù)庫表或者字段)品擎,當獲取一個資源的時候進程就對它執(zhí)行鎖定,然后等待下一個資源空閑现拒,這時候如果另外一個進程也需要兩個資源寓盗,而已經(jīng)獲得并鎖定了第二個資源灌砖,那么就會死鎖,因為當前進程鎖定第一個資源等待第二個資源傀蚌,而另外一個進程鎖定了第二個資源等待第一個資源基显,兩個進程都永遠得不到滿足。
數(shù)據(jù)庫死鎖的解決方案善炫。

死鎖的預防和解除:

理解了死鎖的原因撩幽,尤其是產(chǎn)生死鎖的四個必要條件,就可以最大可能地避免箩艺、預防和解除死鎖窜醉。所以宪萄,在系統(tǒng)設計、進程調(diào)度等方面注意如何不讓這四個必要條件成立榨惰,如何確定資源的合理分配算法拜英,避免進程永久占據(jù)系統(tǒng)資源。此外读串,也要防止進程在處于等待狀態(tài)的情況下占用資源,在系統(tǒng)運行過程中聊记,對進程發(fā)出的每一個系統(tǒng)能夠滿足的資源申請進行動態(tài)檢查撒妈,并根據(jù)檢查結(jié)果決定是否分配資源恢暖,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配狰右,否則予以分配 杰捂。因此,對資源的分配要給予合理的規(guī)劃棋蚌。
如何將死鎖減至最少
雖然不能完全避免死鎖嫁佳,但可以使死鎖的數(shù)量減至最少。將死鎖減至最少可以增加事務的吞吐量并減少系統(tǒng)開銷谷暮,因為只有很少的事務回滾蒿往,而回滾會取消事務執(zhí)行的所有工作。由于死鎖時回滾而由應用程序重新提交湿弦。
下列方法有助于最大限度地降低死鎖:
(1)按同一順序訪問對象瓤漏。
(2)避免事務中的用戶交互。
(3)保持事務簡短并在一個批處理中颊埃。
(4)使用低隔離級別蔬充。
(5)使用綁定連接。

按同一順序訪問對象

如果所有并發(fā)事務按同一順序訪問對象班利,則發(fā)生死鎖的可能性會降低饥漫。例如,如果兩個并發(fā)事務獲得 Supplier 表上的鎖罗标,然后獲得 Part 表上的鎖庸队,則在其中一個事務完成之前,另一個事務被阻塞在 Supplier 表上闯割。第一個事務提交或回滾后皿哨,第二個事務繼續(xù)進行。不發(fā)生死鎖纽谒。將存儲過程用于所有的數(shù)據(jù)修改可以標準化訪問對象的順序证膨。

避免事務中的用戶交互

避免編寫包含用戶交互的事務,因為運行沒有用戶交互的批處理的速度要遠遠快于用戶手動響應查詢的速度鼓黔,例如答復應用程序請求參數(shù)的提示央勒。例如不见,如果事務正在等待用戶輸入,而用戶去吃午餐了或者甚至回家過周末了崔步,則用戶將此事務掛起使之不能完成稳吮。這樣將降低系統(tǒng)的吞吐量,因為事務持有的任何鎖只有在事務提交或回滾時才會釋放井濒。即使不出現(xiàn)死鎖的情況灶似,訪問同一資源的其它事務也會被阻塞,等待該事務完成瑞你。

保持事務簡短并在一個批處理中

在同一數(shù)據(jù)庫中并發(fā)執(zhí)行多個需要長時間運行的事務時通常發(fā)生死鎖酪惭。事務運行時間越長,其持有排它鎖或更新鎖的時間也就越長者甲,從而堵塞了其它活動并可能導致死鎖春感。
保持事務在一個批處理中,可以最小化事務的網(wǎng)絡通信往返量虏缸,減少完成事務可能的延遲并釋放鎖鲫懒。

使用低隔離級別

確定事務是否能在更低的隔離級別上運行。執(zhí)行提交讀允許事務讀取另一個事務已讀裙粽蕖(未修改)的數(shù)據(jù)窥岩,而不必等待第一個事務完成。使用較低的隔離級別(例如提交讀)而不使用較高的隔離級別(例如可串行讀)可以縮短持有共享鎖的時間宰缤,從而降低了鎖定爭奪颂翼。

使用綁定連接

使用綁定連接使同一應用程序所打開的兩個或多個連接可以相互合作。次級連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有撵溃,反之亦然疚鲤,因此不會相互阻塞。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缘挑,一起剝皮案震驚了整個濱河市集歇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌语淘,老刑警劉巖诲宇,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惶翻,居然都是意外死亡姑蓝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門吕粗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纺荧,“玉大人,你說我怎么就攤上這事≈嫦荆” “怎么了输枯?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長占贫。 經(jīng)常有香客問我桃熄,道長,這世上最難降的妖魔是什么型奥? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任瞳收,我火速辦了婚禮,結(jié)果婚禮上厢汹,老公的妹妹穿的比我還像新娘螟深。我一直安慰自己,他們只是感情好坑匠,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布血崭。 她就那樣靜靜地躺著卧惜,像睡著了一般厘灼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咽瓷,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天设凹,我揣著相機與錄音,去河邊找鬼茅姜。 笑死闪朱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钻洒。 我是一名探鬼主播奋姿,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼素标!你這毒婦竟也來了称诗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤头遭,失蹤者是張志新(化名)和其女友劉穎寓免,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體计维,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡袜香,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲫惶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜈首。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欢策,到底是詐尸還是另有隱情澜术,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布猬腰,位于F島的核電站鸟废,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏姑荷。R本人自食惡果不足惜盒延,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鼠冕。 院中可真熱鬧添寺,春花似錦、人聲如沸懈费。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憎乙。三九已至票罐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泞边,已是汗流浹背该押。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阵谚,地道東北人蚕礼。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像梢什,于是被迫代替她去往敵國和親奠蹬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

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