久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      數(shù)據(jù)庫死鎖產(chǎn)生的原因及解決方案是什么

      數(shù)據(jù)庫死鎖產(chǎn)生的原因及解決方案是什么

      死鎖(Deadlock)

      所謂死鎖:是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。

      由于資源占用是互斥的,當(dāng)某個(gè)進(jìn)程提出申請資源后,使得有關(guān)進(jìn)程在無外力協(xié)助下,永遠(yuǎn)分配不到必需的資源而無法繼續(xù)運(yùn)行,這就產(chǎn)生了一種特殊現(xiàn)象死鎖。

      一種情形,此時(shí)執(zhí)行程序中兩個(gè)或多個(gè)線程發(fā)生永久堵塞(等待),每個(gè)線程都在等待被其他線程占用并堵塞了的資源。例如,如果線程A鎖住了記錄1并等待記錄2,而線程B鎖住了記錄2并等待記錄1,這樣兩個(gè)線程就發(fā)生了死鎖現(xiàn)象。

      計(jì)算機(jī)系統(tǒng)中,如果系統(tǒng)的資源分配策略不當(dāng),更常見的可能是程序員寫的程序有錯(cuò)誤等,則會(huì)導(dǎo)致進(jìn)程因競爭資源不當(dāng)而產(chǎn)生死鎖的現(xiàn)象。

      鎖有多種實(shí)現(xiàn)方式,比如意向鎖,共享-排他鎖,鎖表,樹形協(xié)議,時(shí)間戳協(xié)議等等。鎖還有多種粒度,比如可以在表上加鎖,也可以在記錄上加鎖。

      產(chǎn)生死鎖的原因主要是:

      (1)系統(tǒng)資源不足。

      (2) 進(jìn)程運(yùn)行推進(jìn)的順序不合適。

      (3)資源分配不當(dāng)?shù)取?/p>

      如果系統(tǒng)資源充足,進(jìn)程的資源請求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會(huì)因爭奪有限的資源而陷入死鎖。其次,進(jìn)程運(yùn)行推進(jìn)順序與速度不同,也可能產(chǎn)生死鎖。

      產(chǎn)生死鎖的四個(gè)必要條件:

      (1) 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。

      (2) 請求與保持條件:一個(gè)進(jìn)程因請求資源而阻塞時(shí),對已獲得的資源保持不放。

      (3) 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。

      (4) 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。

      這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖。

      死鎖的預(yù)防和解除:

      理解了死鎖的原因,尤其是產(chǎn)生死鎖的四個(gè)必要條件,就可以最大可能地避免、預(yù)防和解除死鎖。所以,在系統(tǒng)設(shè)計(jì)、進(jìn)程調(diào)度等方面注意如何不讓這四個(gè)必要條件成立,如何確定資源的合理分配算法,避免進(jìn)程永久占據(jù)系統(tǒng)資源。

      此外,也要防止進(jìn)程在處于等待狀態(tài)的情況下占用資源,在系統(tǒng)運(yùn)行過程中,對進(jìn)程發(fā)出的每一個(gè)系統(tǒng)能夠滿足的資源申請進(jìn)行動(dòng)態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配 。因此,對資源的分配要給予合理的規(guī)劃。

      如何將死鎖減至最少

      雖然不能完全避免死鎖,但可以使死鎖的數(shù)量減至最少。將死鎖減至最少可以增加事務(wù)的吞吐量并減少系統(tǒng)開銷,因?yàn)橹挥泻苌俚氖聞?wù)回滾,而回滾會(huì)取消事務(wù)執(zhí)行的所有工作。由于死鎖時(shí)回滾而由應(yīng)用程序重新提交。

      下列方法有助于最大限度地降低死鎖:

      (1)按同一順序訪問對象。

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

      (3)保持事務(wù)簡短并在一個(gè)批處理中。

      (4)使用低隔離級別。

      (5)使用綁定連接。

      1、按同一順序訪問對象

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

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

      避免編寫包含用戶交互的事務(wù),因?yàn)檫\(yùn)行沒有用戶交互的批處理的速度要遠(yuǎn)遠(yuǎn)快于用戶手動(dòng)響應(yīng)查詢的速度,例如答復(fù)應(yīng)用程序請求參數(shù)的提示。例如,如果事務(wù)正在等待用戶輸入,而用戶去吃午餐了或者甚至回家過周末了,則用戶將此事務(wù)掛起使之不能完成。這樣將降低系統(tǒng)的吞吐量,因?yàn)槭聞?wù)持有的任何鎖只有在事務(wù)提交或回滾時(shí)才會(huì)釋放。即使不出現(xiàn)死鎖的情況,訪問同一資源的其它事務(wù)也會(huì)被阻塞,等待該事務(wù)完成。

      3、保持事務(wù)簡短并在一個(gè)批處理中

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

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

      4、使用低隔離級別

      確定事務(wù)是否能在更低的隔離級別上運(yùn)行。執(zhí)行提交讀允許事務(wù)讀取另一個(gè)事務(wù)已讀?。ㄎ葱薷模┑臄?shù)據(jù),而不必等待第一個(gè)事務(wù)完成。使用較低的隔離級別(例如提交讀)而不使用較高的隔離級別(例如可串行讀)可以縮短持有共享鎖的時(shí)間,從而降低了鎖定爭奪。

      5、使用綁定連接

      使用綁定連接使同一應(yīng)用程序所打開的兩個(gè)或多個(gè)連接可以相互合作。次級連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有,反之亦然,因此不會(huì)相互阻塞。

      6、用存儲(chǔ)過程查出引起死鎖的進(jìn)程和SQL語句

      假如發(fā)生了死鎖,我們怎么去檢測具體發(fā)生死鎖的是哪條SQL語句或存儲(chǔ)過程?此時(shí)我們可以使用以下存儲(chǔ)過程來檢測,就可以查出引起死鎖的進(jìn)程和SQL語句。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號