04.03 oracle如何避免死鎖的產生

死鎖發生的條件:

    1、資源不能共享,需要只能由一個進程或者線程使用

    2、請求且保持,已經鎖定的資源自已保持著不釋放

    3、不剝奪,自給申請到的資源不能被別人剝奪

    4、循環等待

  想預防死鎖,把上面四個條件破壞一個就可以了。

防止死鎖的途徑就是避免滿足死鎖條件的情況發生,為此用戶需要遵循以下原則。

    (1)儘量避免併發地執行涉及到修改數據的語句。

    (2)要求每個事務一次就將所有要使用的數據全部加鎖,否則就不予執行。

    (3)預先規定一個封鎖順序,所有的事務都必須按這個順序對數據執行封鎖。如不同的過程在事務內部對對象的更新執行順序應儘量保持一致。

    (4)每個事務的執行時間不可太長,在業務允許的情況下可以考慮將事務分割成為幾個小事務來執行。【比如說把複雜的多表查詢分散成多次單表查詢】

    (5)數據存儲空間離散法。數據存儲空間離散法是指採取各種手段,將邏輯上在一個表中的數據分散到若干離散的空間上去,以便改善對錶的訪問性能。主要通過將大表按行或列分解為若干小表,或者按不同的用戶群分解兩種方法實現。這種方法類似分散“數據熱點”,但是確實,如果數據不是太經常被訪問,那麼死鎖就不會太經常發生。

    (6)還是類似(1)的,比如有一個修改上百條記錄的update語句,我們可以修改成每10條一個update語句,或者乾脆就每條記錄一個update語句。

    (7)將經常更新的數據庫和查詢數據庫分開


分享到:


相關文章: