程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2死鎖和鎖等待2種基本情形正確解析版(1)

DB2死鎖和鎖等待2種基本情形正確解析版(1)

編輯:DB2教程

以下的文章講述的是全面解析DB2死鎖和鎖等待2種基本情形的介紹,如果你對DB2死鎖和鎖等待2種基本情形有興趣的話,你就可以對以下的文章點擊觀看了。鎖是數據庫為了控制並發數據的完整性引入機制。

在並發應用中出現鎖現象並不可怕,鎖現象通常分為死鎖和鎖等待兩種情形。死鎖是因為兩個並發的進程或者線程同時各自占有一個資源,又需要占有對方資源,但又都各不相讓造成的,這通常是因為程序在並發上考慮不周造成的。

鎖等待則是數據庫中最普通的情況,一各應用使用數據期間必然要加鎖,防止其他進程或應用破壞數據,其他進程或應用在此期間不得不等待前一個應用釋放鎖。鎖等待時間參數是可調的,但要視實際應用情況而定,比如在網絡環境中,復雜應用環境,或者對實時性要求不高的環境中,可以將鎖等待時間調大一些,有些情況要調小一些。鎖等待不同於死鎖,死鎖屬於程序並發不當,需要調整程序並發機制,鎖等待則屬於性能問題,可能需要調整程序的sql語句。

不管是DB2死鎖還是鎖等待,數據庫都有相應參數可調,也有相應的工具可以捕獲和分析,以下是鎖處理的通常辦法。

·查看和更改與鎖相關的主要數據庫參數

·查看當前並發應用

·查看和更改快照參數

·獲取快照

·使用事件查看器

1.查看和更改與鎖相關的主要配置參數

CLP方式:

db2 get db cfg

在參數列表中尋找DLCHKTIME和LOCKTIMEOUT兩個參數。

-DLCHKTIME 單位是毫秒,是DB2檢查死鎖的間隔時間,假設該值為10000ms,則意味著每隔10秒鐘檢查一下當前數據庫中有無死鎖存在,如有死鎖,會選擇回滾其中的某一個事務,讓另外一個事務完成交易。

-LOCKTIMEOUT單位是秒,是鎖等待最長時間,超過該時間仍未獲得鎖,則返回錯誤。

設置提示:

-缺省情況下,LOCKTIMEOUT是-1,意味著鎖等待時間無限期,這和實際應用需求一般是不太相符的,需要將其值設為大於0的一個數。

-DLCHKTIME時間通常要設得比LOCKTIMEOUT時間小一些,否則未等發現DB2死鎖,就會被以鎖等待超時而返回錯誤。

更改示例(CLP方式)

  1. db2 update db cfg using locktimeout 10 

2.查看當前並發應用

CLP方式:

db2 list applications

或db2 list applications show detail

或 db2 list applications for database dbname [ show detail]

該命令可以查看當前是否有多個應用在連接著數據庫,從而排查是否有並發的存在。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved