溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何將deadlock減至最少

發(fā)布時間:2021-12-30 15:13:50 來源:億速云 閱讀:145 作者:柒染 欄目:云計算

這篇文章給大家介紹如何將deadlock減至最少,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

盡管死鎖不能完全避免,但遵守特定的編碼慣例可以將發(fā)生死鎖的機(jī)會降至最低。將死鎖減至最少可以增加事務(wù)的吞吐量并減少系統(tǒng)開銷,因?yàn)橹挥泻苌俚氖聞?wù):

  • 回滾,撤消事務(wù)執(zhí)行的所有工作。
     

  • 由于死鎖時回滾而由應(yīng)用程序重新提交。
     

下列方法有助于將死鎖減至最少:

  • 按同一順序訪問對象。
     

  • 避免事務(wù)中的用戶交互。
     

  • 保持事務(wù)簡短并處于一個批處理中。
     

  • 使用較低的隔離級別。
     

  • 使用基于行版本控制的隔離級別。

    • 將READ_COMMITTED_SNAPSHOT 數(shù)據(jù)庫選項(xiàng)設(shè)為 ON,使得已提交讀事務(wù)使用行版本控制。
       

    • 使用快照隔離。
       

  • 使用綁定連接。

    按同一順序訪問對象


    如果所有并發(fā)事務(wù)按同一順序訪問對象,則發(fā)生死鎖的可能性會降低。例如,如果兩個并發(fā)事務(wù)先獲取 Supplier 表上的鎖,然后獲取 Part 表上的鎖,則在其中一個事務(wù)完成之前,另一個事務(wù)將在 Supplier 表上被阻塞。當(dāng)?shù)谝粋€事務(wù)提交或回滾之后,第二個事務(wù)將繼續(xù)執(zhí)行,這樣就不會發(fā)生死鎖。將存儲過程用于所有數(shù)據(jù)修改可以使對象的訪問順序標(biāo)準(zhǔn)化。

  • 如何將deadlock減至最少

避免事務(wù)中的用戶交互


避免編寫包含用戶交互的事務(wù),因?yàn)闆]有用戶干預(yù)的批處理的運(yùn)行速度遠(yuǎn)快于用戶必須手動響應(yīng)查詢時的速度(例如回復(fù)輸入應(yīng)用程序請求的參數(shù)的提示)。例如,如果事務(wù)正在等待用戶輸入,而用戶去吃午餐或甚至回家過周末了,則用戶就耽誤了事務(wù)的完成。這將降低系統(tǒng)的吞吐量,因?yàn)槭聞?wù)持有的任何鎖只有在事務(wù)提交或回滾后才會釋放。即使不出現(xiàn)死鎖的情況,在占用資源的事務(wù)完成之前,訪問同一資源的其他事務(wù)也會被阻塞。

保持事務(wù)簡短并處于一個批處理中  


在同一數(shù)據(jù)庫中并發(fā)執(zhí)行多個需要長時間運(yùn)行的事務(wù)時通常會發(fā)生死鎖。事務(wù)的運(yùn)行時間越長,它持有排他鎖或更新鎖的時間也就越長,從而會阻塞其他活動并可能導(dǎo)致死鎖。

保持事務(wù)處于一個批處理中可以最小化事務(wù)中的網(wǎng)絡(luò)通信往返量,減少完成事務(wù)和釋放鎖可能遭遇的延遲。

使用較低的隔離級別  


確定事務(wù)是否能在較低的隔離級別上運(yùn)行。實(shí)現(xiàn)已提交讀允許事務(wù)讀取另一個事務(wù)已讀?。ㄎ葱薷模┑臄?shù)據(jù),而不必等待第一個事務(wù)完成。使用較低的隔離級別(例如已提交讀)比使用較高的隔離級別(例如可序列化)持有共享鎖的時間更短。這樣就減少了鎖爭用。

使用基于行版本控制的隔離級別  


如果將 READ_COMMITTED_SNAPSHOT 數(shù)據(jù)庫選項(xiàng)設(shè)置為 ON,則在已提交讀隔離級別下運(yùn)行的事務(wù)在讀操作期間將使用行版本控制而不是共享鎖。

注意:
某些應(yīng)用程序依賴于已提交讀隔離的鎖定和阻塞行為。對于這些應(yīng)用程序,要啟用此選項(xiàng)必須進(jìn)行一些更改。

 

快照隔離也使用行版本控制,該級別在讀操作期間不使用共享鎖。必須將 ALLOW_SNAPSHOT_ISOLATION 數(shù)據(jù)庫選項(xiàng)設(shè)置為 ON,事務(wù)才能在快照隔離下運(yùn)行。

實(shí)現(xiàn)這些隔離級別可使得在讀寫操作之間發(fā)生死鎖的可能性降至最低。

使用綁定連接  


使用綁定連接,同一應(yīng)用程序打開的兩個或多個連接可以相互合作。可以像主連接獲取的鎖那樣持有次級連接獲取的任何鎖,反之亦然。這樣它們就不會互相阻塞。

關(guān)于如何將deadlock減至最少就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI