注意Application Name 和Application Id兩欄,Application Name欄列出了應用的名字,db2bp通常意味著目前有CLP在連接數據庫,java則意味著可能有db2cc或用戶自己的Java應用在連接數據庫,在application Id欄中可以看到這些應用來自於哪些機器,本機的就顯示為 LOCAL + 用戶名 + 開始連接上的時間,遠程的就會顯示為16進制的IP地址+用戶名+開始連接上的時間。通過排查並發應用從而消除測試中不必要的鎖現象。
3.查看和更改快照參數
如果在合理設置了DLCHKTIME和LOCKTIMEOUT參數仍然出現鎖現象,可以查看快照或者創建事件監控器來分析原因。要采用快照,首先要打開快照開關
- db2 get monitor switches
輸出中將包含以下參數:
監控開關 數據庫管理器參數 注釋
BUFFERPOOL DFT_MON_BUFPOOL 緩沖區的讀寫情況和發生時間
LOCK DFT_MON_LOCK 鎖持有,鎖等待,以及DB2死鎖的發生情況
SORT DFT_MON_SORT Heap的使用情況,排序性能
STATEMENT DFT_MON_STMT 語句起始時間,語句內容
- TABLE DFT_MON_TABLE Measure of activity (rows read/written)
- UOW DFT_MON_UOW Start/end times, completion status
- TIMESTAMP DFT_MON_TIMESTAMP Timestamps
為了觀察快照中的鎖和執行語句情況,一般把LOCK和STATEMENT選項設為ON,也可以酌情把其他開關打開,示例如下: db2 update monitor switches using lock on statement on
4.查看快照信息
-查看數據庫管理器級別快照信息
- db2 get snapshot for dbm
-查看數據庫級別快照信息
- db2 get snapshot for database on dbname
-查看應用級別快照信息
- db2 get snapshot for application agentid appl-handler
注:appl-handler可以從list applicaitions的輸出中得到
-查看表級別快照信息
- db2 get snapshot for tables on dbname
注:需要把tables快照開關設為ON才會有作用
-查看鎖快照信息
- db2 get snapshot for locks on dbname
或
- db2 get snapshot for locks on for application agentid appl-handler
-查看動態sql語句快照信息
- db2 get snapshot for dynamic sql on dbname
5.使用事件查看器
可以使用時間查看器收集鎖事件,SQL語句事件,從而根據事件分析鎖原因。
事件類型
使用事件監控器,首先要選定所關注的事件類型,DB2中有很多事件類型,可以用於鎖分析的通常會用到以下三種:
- DEADLOCKS
- DEADLOCKS WITH DETAILS
- STATEMENTS
步驟:
-創建事件監控器
- create event monitor evmname for eventtype write to file ‘directory’
例:create event monitor mymonitor for deadlocks, statements
- write to file ‘c:\temp’
-把事件監控器打開
接上例:
- set event monitor mymonitor state 1
注:1為打開,0為關閉
事件監控器開始工作,當所有應用斷掉連接後,將事件記錄下來
-查看事件細節
- db2evmon –path ‘c:\temp’
上述的相關內容就是對DB2死鎖和鎖等待兩種情形的描述,希望會給你帶來一些幫助在此方面。