程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 for Linux, UNIX, and Windows 的鎖事件,第 3 部分: 使用 DB2 9.7 中的鎖事件監控器來解決並發性問題

DB2 for Linux, UNIX, and Windows 的鎖事件,第 3 部分: 使用 DB2 9.7 中的鎖事件監控器來解決並發性問題

編輯:DB2教程

簡介

本文介紹了新的鎖事件監控器,並演示了如何使用它來分析並發性問題。本系列其他文章分別解釋了 DB2 8.2/9.1 和 DB2 9.5 的可用選項。這些選項已經作了進一步加強。DB2 9.7 提供了死鎖、鎖超時、鎖等待分析的集成監控方案:新的鎖事件監控器。這個鎖事件監控器取代了舊的機制和工具。這些機制和工具從 DB2 9.7 開始不再使用,在以後的 DB2 發行版中不再出現。本文介紹了新的鎖事件監控器,並演示了如何使用它來分析並發性問題。

創建示例數據庫

本文描述了鎖事件監控器以及兩個並發問題的例子。第一個例子中,創建了 DB2 示例數據庫,並設置 DB CFG 的 LOCKTIMEOUT 參數值為 10 秒,如清單 1 所示。

清單 1. 創建 DB2 示例數據庫,並設置 LOCKTIMEOUT 值

db2sampl 
db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT 10" 

鎖事件監控器收集的信息寫進非格式化事件表。之所以這麼稱,是因為數據以二進制形式存放在表中。非格式化事件表應放在單獨表空間中。這可防止表空間由於監控數據過多而意外填滿表格或索引數據。有了 DB2 自動存儲,很容易為非格式化事件表創建額外存儲空間,這是因為表空間不需要任何顯式表空間容器定義。清單 2 連接到 SAMPLE 數據庫並創建新的 TBSPACE_LOCKING 表空間。

清單 2. 為事件監控數據創建表空間

db2 "CONNECT TO SAMPLE" 
db2 "CREATE TABLESPACE TBSPACE_LOCKING" 

下一步,創建鎖事件監控器。選擇鎖事件監控器本身和其對應的非格式化事件表的名字。例中,鎖事件監控器叫做 EVMON_LOCKING。非格式化事件表叫做 TAB_LOCKING,模式為 EMDATA。指定 IN子句,表格放在自己的 TBSPACE_LOCKING 表空間中。

清單 3. 創建鎖事件監控器

db2 "CREATE EVENT MONITOR EVMON_LOCKING FOR LOCKING WRITE TO UNFORMATTED EVENT TABLE 
  (TABLE EMDATA.TAB_LOCKING IN TBSPACE_LOCKING)" 

默認情況下,鎖事件監控器是隨 AUTOSTART 選項生成的,因此當數據庫激活時自動開始。為了一開始就開啟鎖事件監控器而無需重新激活數據庫,通過設置其狀態值,即 active 為 1 來顯式開啟,如清單 4 所示。

清單 4. 激活鎖事件監控器

db2 "SET EVENT MONITOR EVMON_LOCKING STATE 1" 

定義生成鎖事件的范圍

盡管鎖事件監控器已激活,但還沒開始收集每個會話的並發性問題相關信息。相反您應當指定鎖事件監控器所要監控的會話。在兩級指定會話:

DB2 Workload Manager (WLM) 概念

工作負載、服務級、工作級、阈值等等都是在 DB2 9.5 中首次引入的與 DB2 WLM 相關的概念。此處,工作負載是數據庫對象,它根據會話屬性如應用程序名、認證 ID 等新會話路由到服務級中。即使沒有用戶定義的工作負載,DB2 默認工作負載 SYSDEFAULTUSERWORKLOAD 也存在,它包含不屬於任何工作負載的會話。DB2 將這些會話路由到 DB2 的默認服務級 SYSDEFAULTUSERCLASS。因此,即使沒有顯式使用 DB2 WLM,DB2 的默認 WLM 對象也一直存在。

數據庫級從 DB2 9.7 開始,DB CFG 使用三個新的參數:MON_DEADLOCK、MON_TIMEOUT 和 MON_LOCKWAIT。當激活其中任何一個參數後,鎖事件監控器開始觀察所有的數據庫會話,它獨立於應用程序名、認證 ID、以及其他參數,監控對應鎖事件發生情況:死鎖、鎖超時或鎖等待。 工作負載級或者,可以配置鎖事件監控器觀察屬於某個工作負載的會話。此時,可以通過設置特定的工作負載選項來激活鎖事件集合。

一般來說,死鎖或鎖超時事件相關的數據集合應當在數據庫級激活,因為這些事件通常是應用程序異常。因此,提前限制某種工作負載通常不可能,或根本不需要。另一方面,鎖等待事件總會在一定程度上出現。因此將鎖等待事件限制到某一工作負載就會有意義。這裡給出一般指導原則,就是在為特定的並發性問題決定最佳監控策略前檢查這兩個選項。

收集某一工作負載的鎖超時事件數據

本例中,使用鎖事件監控器只收集某一工作負載的鎖超時信息。簡單起見,不要創建用戶定義工作負載。相反使用 DB2 WLM 默認工作負載 SYSDEFAULTUSERWORKLOAD,它包含不屬於用戶定義工作負載的所有會話。對於 SYSDEFAULTUSERWORKLOAD,鎖事件監控器捕獲所有鎖超時事件。由於已經創建並激活鎖事件監控器 EVMON_LOCKING,只要啟動所需工作負載的鎖事件數據集合,如清單 5 所示。

清單 5. 啟動默認用戶工作負載的鎖超時集合

db2 "ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT LOCK TIMEOUT DATA WITH HISTORY" 

如選中 WITH HISTORY 選項,鎖事件監控器收集:

鎖超時事件的出錯 SQL 語句

在鎖超時事件中涉及的事務內部執行的所有其他 SQL 語句

現在,通過試圖使用兩個不同會話更改 EMPLOYEE 表來故意引起鎖超時。第一個會話中,執行讓每個員工提高 2% 薪水的事務,然後查詢所有員工姓名和新的薪水。由於該事務未執行(自動執行已通過 DB2 CLP 選項 +c 被停用),它對 EMPLOYEE 表中的每行都持有 X-lock(獨占鎖),如清單 6 所示。

清單 6. 第一個事務 - 讓所有員工薪水提高 2%

db2 "CONNECT TO SAMPLE" 
db2 +c "UPDATE EMPLOYEE SET SALARY = SALARY * 1.02" 
db2 +c "SELECT LASTNAME, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY LASTNAME ASC" 

在另一個會話中,執行另一個事務,根據現有薪水給每個經理 10% 的獎金,如清單 7 所示。

清單 7. 第二個事務:給所有經理 10% 的獎金

db2 "CONNECT TO SAMPLE" 
db2 +c "UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'" 

由於第一個事務鎖住所有經理和其他員工行,鎖超時 10 秒後發生(記住 LOCKTIMEOUT 參數設置),第二個事務的 UPDATE 語句失敗。

清單 8. DB2 返回的鎖超時錯誤

SQL0911N The current transaction has been rolled back because of a deadlock or timeout 
  Reason code "68". SQLSTATE=40001 

鎖超時事件的信息被寫入非格式化表 EMDATA.TAB_LOCKING 中:執行 CREATE EVENT MONITOR 語句時所指定的。為了讀取並格式化鎖監控器收集的信息,使用名為 db2evmonfmt 的工具,它是用 Java 編寫的。在第一次使用前,必須先編譯。可以在 DB2 安裝目錄的 samples 子目錄找到該工具的源代碼(包括相應 XML 表單的樣式表)。在編譯 Java 源代碼之前,將兩個文件(源代碼 + 樣式表)復制到當前工作目錄,如清單 9 所示。

清單 9. 復制 db2evmonfmt 工具的源文件

copy "C:\Program Files\IBM\SQLLIB\samples\java\jdbc\db2evmonfmt.Java" . 
copy "C:\Program Files\IBM\SQLLIB\samples\Java\jdbc\DB2EvmonLocking.xsl" . 

需要 JDK (Java Development Kit) 來編譯 db2evmonfmt 工具。由於 JDK 是隨每個 DB2 服務器產品安裝的,可以使用 DB2 安裝程序的 Java 編譯器(javac)。為了讓操作系統找到 Java 編譯器,Javac 二進制文件必須在調用前包含在 PATH 變量中,如清單 10 所示。

清單 10. 編譯 db2evmonfmt 工具

set PATH=C:\Program Files\IBM\SQLLIB\Java\jdk\bin;%PATH% 
javac db2evmonfmt.Java 

為了讀取和格式化鎖超時事件的信息,根據選項調用 db2evmonfmt 工具,如清單 11 所示。默認情況下,工具輸出寫到標准輸出,所以將其輸出重新指向文本文件。

清單 11. 調用 db2evmonfmt 工具來格式化為鎖超時事件收集的數據

Java db2evmonfmt -d sample -ue emdata.tab_locking -ftext -u username -p passWord 
  >locktimeout.txt 

其中的代碼選項如下:

-d數據庫名-ue非格式化事件表的完全許可路徑(包括模式)-ftext純文本格式(或者,通過指定 -fxml 選項設置 XML 格式)的鎖事件信息輸出-u數據庫訪問的用戶 ID-p數據庫訪問的密碼

對於鎖超時事件,db2evmonfmt 生成如清單 12 所示的輸出。

清單 12. 鎖超時事件的 db2evmonfmt 輸出

------------------------------------------------------- 
Event ID        : 1 
Event Type       : LOCKTIMEOUT 
Event Timestamp    : 2010-02-16-18.27.38.102302 
Partition of detection : 0 
------------------------------------------------------- 
 
Participant No 1 requesting lock 
---------------------------------- 
Lock Name      : 0x02000600040000000000000052 
Lock wait start time : 2010-02-16-18.27.28.086228 
Lock wait end time  : 2010-02-16-18.27.38.102302 
Lock Type      : ROW 
Lock Specifics    : ROWID=4,DATA_PARTITION_ID=0,PAGEID=0 
Lock Attributes   : 00000000 
Lock mode requested : Update 
Lock mode held    : Exclusive 
Lock Count      : 1 
Lock Hold Count   : 0 
Lock rrIID      : 0 
Lock Status     : Waiting 
Lock release flags  : 40000000 
Tablespace TID    : 2 
Tablespace Name   : USERSPACE1 
Table FID      : 6 
Table Schema     : FECHNER 
Table Name      : EMPLOYEE 
 
 
Attributes      Requester            Owner              
--------------------- ------------------------------ ------------------------------  
Participant No    1                2                
Application Handle  0342              0333               
Application ID    *LOCAL.DB2.100216172719     *LOCAL.DB2.100216172702     
Application Name   db2bp.exe            db2bp.exe            
Authentication ID   FECHNER             FECHNER             
Requesting AgentID  2172              6320               
Coordinating AgentID 2172              6320               
Agent Status     UOW Executing          UOW Waiting           
Application Action  No action            No action            
Lock timeout value  10               0                
Lock wait value    0                0                
Workload ID      1                1                
Workload Name     SYSDEFAULTUSERWORKLOAD     SYSDEFAULTUSERWORKLOAD      
Service subclass ID  13               13                
Service subclass   SYSDEFAULTSUBCLASS       SYSDEFAULTSUBCLASS        
Current Request    Execute Immediate        Close Cursor           
TEntry state     1                2                
TEntry flags1     00000000            00000000             
TEntry flags2     00000200            00000200             
Lock escalation    no               no                
ClIEnt userid                                     
ClIEnt wrkstnname                                   
ClIEnt applname                                    
ClIEnt acctng                                     
 
 
Current ActivitIEs of Participant No 1 
---------------------------------------- 
Activity ID    : 1 
Uow ID       : 1 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 203 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : 10 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 3783866187777 
Stmt type     : Dynamic 
Stmt Operation   : DML, Insert/Update/Delete 
Stmt text     : UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER' 
 
 
 
Past ActivitIEs of Participant No 1 
------------------------------------- 
ActivitIEs not available 
 
 
Current ActivitIEs of Participant No 2 
---------------------------------------- 
ActivitIEs not available 
 
 
Past ActivitIEs of Participant No 2 
------------------------------------- 
Past ActivitIEs wrapped: no 
 
Activity ID    : 2 
Uow ID       : 2 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 201 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : 10 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 721554505729 
Stmt type     : Dynamic 
Stmt Operation   : DML, Select (blockable) 
Stmt text     : SELECT LASTNAME, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY LASTNAME ASC 
 
Activity ID    : 1 
Uow ID       : 2 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 203 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : 10 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 3835405795329 
Stmt type     : Dynamic 
Stmt Operation   : DML, Insert/Update/Delete 
Stmt text     : UPDATE EMPLOYEE SET SALARY = SALARY * 1.02 

輸出包含所有用來確定鎖超時事件原因的信息,包括:

參與鎖超時事件的應用程序通用信息,如應用程序名、認證 ID 等等。

等待應用程序請求的鎖信息,如行或表鎖、共享或獨占鎖、表名等等。

阻塞的 SQL 語句信息。

在參與事務中的鎖超時事件前執行的所有 SQL 語句信息,如語句文本、使用的隔離級、執行順序等等。

事件監控器不止收集參與事務中最後執行的 SQL 語句。這有助於鎖分析,因為這些語句可能不是並發問題的原因。例如,不是 SELECT 語句造成產生問題的鎖,但 UPDATE 語句恰好在同一事務中在 SELECT 語句前執行。只有在指定 ALTER WORKLOAD...COLLECT LOCK TIMEOUT DATA 語句的 WITH HISTORY 選項後才收集之前 SQL 語句的信息。

確定引起鎖超時事件的原因後,停止收集默認工作負載的鎖超時信息,如清單 13 所示。

清單 13. 停止默認用戶工作負載的鎖超時數據收集

db2 "ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT LOCK TIMEOUT DATA NONE" 

為了准備下一個示例場景,將 DB CFG 參數 LOCKTIMEOUT 重新設置為 -1,這意味著鎖超時不再發生,因為一個事務可以無限等待另一個事務釋放所需的鎖。由於 LOCKTIMEOUT 參數不可在線調整,需要停用並重新激活數據庫,以使更改起作用,如清單 14 所示。

清單 14. 重置數據庫 LOCKTIMEOUT 設置

db2 "TERMINATE" 
db2 "DEACTIVATE DB SAMPLE" 
db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT -1" 
db2 "ACTIVATE DB SAMPLE" 

收集整個數據庫的死鎖事件數據

可以設置鎖事件監控器來收集某個工作負載或整個數據庫的鎖事件信息。前一個例子演示了如何收集單個工作負載的鎖超時事件信息。本例中,將看一看如何配置鎖事件監控器以讓其收集整個數據庫的死鎖事件。無論收集的鎖事件數據是何種級別(工作負載或數據庫),只有當鎖事件監控器激活時才收集鎖事件數據。

通過 DB CFG 參數 MON_DEADLOCK 來激活收集整個數據庫的死鎖事件信息(鎖超時和鎖等待分別對應的是 MON_TIMEOUT 和 MON_LOCKWAIT)。默認情況下,MON_DEADLOCK 值設置為 WITHOUT_HIST,這意味著鎖事件監控器已經收集死鎖事件的信息,但不包括歷史數據。如果想要收集歷史數據,將參數值更新為 HISTORY。與 LOCKTIMEOUT 參數相比,MON_DEADLOCK 可以在線配置,這意味著沒必要停用或激活數據庫。盡管如此,要在線改變 DB CFG 參數,對數據庫的連接是強制性的,而且 UPDATE DB CFG 命令必須包含 IMMEDIATE 選項,如清單 15 所示。

清單 15. 在數據庫級配置死鎖信息收集

db2 "CONNECT TO SAMPLE" 
db2 "UPDATE DB CFG USING MON_DEADLOCK HISTORY IMMEDIATE" 

下一步,在最終將導致死鎖的各會話中執行一系列 SQL 語句。在會話中,試著同時更新 DEPARTMENT 表中的位置數據和部門名稱。在第一個會話中,執行清單 16 中的 UPDATE 語句,它對部門號為 B01 的部門行設置獨占鎖。

清單 16. 第一個事務:更新某個部門的位置數據

db2 "CONNECT TO SAMPLE" 
db2 +c "UPDATE DEPARTMENT SET LOCATION = 'New York' WHERE DEPTNO = 'B01'" 

在第二個會話中,更新部門號為 E11 的行,然後試著更新部門號為 B01 的行,如清單 17 所示。

清單 17. 第二個事務:更新某個部門的名稱

db2 "CONNECT TO SAMPLE" 
db2 +c "UPDATE DEPARTMENT SET DEPTNAME = 'OperaTIONS 1' WHERE DEPTNO = 'E11'" 
db2 +c "UPDATE DEPARTMENT SET DEPTNAME = 'PLANNING 1' WHERE DEPTNO = 'B01'" 

第二個會話中的 UPDATE 語句被第一個會話中的事務所持有的獨占鎖阻塞,因此它必須等待。現在在第一個會話中執行一個試圖改變被第二個會話事務阻塞的行(E11 部門的行)的 UPDATE 語句。數據庫識別出死鎖事件。

清單 18. 第一個事務:更新另一個部門的位置信息

db2 +c "UPDATE DEPARTMENT SET LOCATION = 'Los Angeles' WHERE DEPTNO = 'E11'" 

數據庫管理器自動回滾其中一個事務,第一個會話中的或第二個會話中的。出錯的事務的 UPDATE 語句返回相應錯誤信息,如清單 19 所示。

清單 19. DB2 返回的死鎖錯誤

SQL0911N The current transaction has been rolled back because of a deadlock or timeout. 
  Reason code "2". SQLSTATE=40001 

為了格式化鎖事件監控器收集的死鎖事件數據,並將其寫到普通文本文件中,再次調用 db2evmonfmt 工具。由於第一個例子已編譯過源代碼,db2evmonfmt Java 類文件已存在。這一次,為限制工具輸出死鎖事件,將附加選項 -type 的值設置為 deadlock,如清單 20 所示。

清單 20. 調用 db2evmonfmt 工具來格式化為死鎖事件收集的數據

Java db2evmonfmt -d sample -ue emdata.tab_locking -type deadlock -ftext 
  -u username -p passWord >deadlock.txt 

db2evmonfmt 的輸出格式幾乎與第一個例子中所描述的格式一致。根據應用程序、鎖和 SQL 語句有關信息,可以輕松確定死鎖事件的原因,如清單 21 所示。

清單 21. 死鎖事件的 db2evmonfmt 輸出

------------------------------------------------------- 
Event ID        : 1 
Event Type       : DEADLOCK 
Event Timestamp    : 2010-02-21-19.25.32.723805 
Partition of detection : 0 
------------------------------------------------------- 
 
Deadlock Graph 
-------------- 
Total number of deadlock participants : 2 
Participant that was rolled back   : 2 
Type of deadlock           : local 
 
Participant   Participant   Deadlock Member Application Handle 
Requesting Lock Holding Lock                  
--------------- --------------- --------------- ------------------ 
1        2        0        044       
2        1        0        024       
 
 
Participant No 1 requesting lock 
---------------------------------- 
Lock Name      : 0x020005000B0000000000000052 
Lock wait start time : 2010-02-21-19.25.26.208252 
Lock wait end time  : 2010-02-21-19.25.32.723805 
Lock Type      : ROW 
Lock Specifics    : ROWID=11,DATA_PARTITION_ID=0,PAGEID=0 
Lock Attributes   : 00000000 
Lock mode requested : Exclusive 
Lock mode held    : Exclusive 
Lock Count      : 1 
Lock Hold Count   : 0 
Lock rrIID      : 0 
Lock Status     : Waiting 
Lock release flags  : 40000000 
Tablespace TID    : 2 
Tablespace Name   : USERSPACE1 
Table FID      : 5 
Table Schema     : FECHNER 
Table Name      : DEPARTMENT 
 
Participant No 2 requesting lock 
---------------------------------- 
Lock Name      : 0x02000500050000000000000052 
Lock wait start time : 2010-02-21-19.25.13.381517 
Lock wait end time  : 2010-02-21-19.25.32.723805 
Lock Type      : ROW 
Lock Specifics    : ROWID=5,DATA_PARTITION_ID=0,PAGEID=0 
Lock Attributes   : 00000000 
Lock mode requested : Exclusive 
Lock mode held    : Exclusive 
Lock Count      : 1 
Lock Hold Count   : 0 
Lock rrIID      : 0 
Lock Status     : Waiting 
Lock release flags  : 40000000 
Tablespace TID    : 2 
Tablespace Name   : USERSPACE1 
Table FID      : 5 
Table Schema     : FECHNER 
Table Name      : DEPARTMENT 
 
 
Attributes      Requester            Requester            
--------------------- ------------------------------ ------------------------------  
Participant No    1                2                
Application Handle  024               044               
Application ID    *LOCAL.DB2.100221182012     *LOCAL.DB2.100221182513     
Application Name   db2bp.exe            db2bp.exe            
Authentication ID   FECHNER             FECHNER             
Requesting AgentID  4148              1016               
Coordinating AgentID 4148              1016               
Agent Status     UOW Executing          UOW Executing          
Application Action  No action            No action            
Lock timeout value  0                0                
Lock wait value    0                0                
Workload ID      1                1                
Workload Name     SYSDEFAULTUSERWORKLOAD     SYSDEFAULTUSERWORKLOAD      
Service subclass ID  13               13                
Service subclass   SYSDEFAULTSUBCLASS       SYSDEFAULTSUBCLASS        
Current Request    Execute Immediate        Execute Immediate        
TEntry state     2                2                
TEntry flags1     00000000            00000000             
TEntry flags2     00000200            00000200             
Lock escalation    no               no                
ClIEnt userid                                     
ClIEnt wrkstnname                                   
ClIEnt applname                                    
ClIEnt acctng                                     
 
 
Current ActivitIEs of Participant No 1 
---------------------------------------- 
Activity ID    : 2 
Uow ID       : 4 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 203 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : -1 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 631360192513 
Stmt type     : Dynamic 
Stmt Operation   : DML, Insert/Update/Delete 
Stmt text     : UPDATE DEPARTMENT SET LOCATION = 'Los Angeles' WHERE DEPTNO = 'E11' 
 
 
 
Past ActivitIEs of Participant No 1 
------------------------------------- 
Past ActivitIEs wrapped: no 
 
Activity ID    : 1 
Uow ID       : 4 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 203 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : -1 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 2791728742402 
Stmt type     : Dynamic 
Stmt Operation   : DML, Insert/Update/Delete 
Stmt text     : UPDATE DEPARTMENT SET LOCATION = 'New York' WHERE DEPTNO = 'B01' 
 
 
 
Current ActivitIEs of Participant No 2 
---------------------------------------- 
Activity ID    : 2 
Uow ID       : 1 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 203 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : -1 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 4380866641921 
Stmt type     : Dynamic 
Stmt Operation   : DML, Insert/Update/Delete 
Stmt text     : UPDATE DEPARTMENT SET DEPTNAME = 'PLANNING 1' WHERE DEPTNO = 'B01' 
 
 
 
Past ActivitIEs of Participant No 2 
------------------------------------- 
Past ActivitIEs wrapped: no 
 
Activity ID    : 1 
Uow ID       : 1 
Package Name    : SQLC2H20 
Package Schema   : NULLID  
Package Version  : 
Package Token   : AAAAAZBZ 
Package Sectno   : 203 
Reopt value    : none 
Incremental Bind  : no 
Eff isolation   : CS 
Eff degree     : 0 
Eff locktimeout  : -1 
Stmt unicode    : no 
Stmt query ID   : 0 
Stmt nesting level : 0 
Stmt invocation ID : 0 
Stmt source ID   : 0 
Stmt pkgcache ID  : 3173980831746 
Stmt type     : Dynamic 
Stmt Operation   : DML, Insert/Update/Delete 
Stmt text     : UPDATE DEPARTMENT SET DEPTNAME = 'OperaTIONS 1' WHERE DEPTNO = 'E11' 

刪除鎖事件監控器

不再需要鎖事件監控器時,可以將其停用並刪除。如果需要鎖事件監控器來分析可能的並發性問題,就只需將其停用。刪除鎖事件監控器不會隱式刪除對應的非格式化事件表。如果不需要保留所收集的鎖事件數據用作將來的分析,必須使用 DROP TABLE 語句手動刪除非格式化事件表,如清單 22 所示。

清單 22. 刪除鎖事件監控器

db2 "SET EVENT MONITOR EVMON_LOCKING STATE 0" 
db2 "DROP EVENT MONITOR EVMON_LOCKING" 
db2 "DROP TABLE EMDATA.TAB_LOCKING" 

結束語

本文介紹了如何使用 DB2 LUW 9.7 中引入的新的鎖事件監控器。本文通過實例演示了如何使用鎖事件監控器來收集所有種類的並發性問題:死鎖、鎖超時及鎖等待。使用新的格式化工具 db2evmonfmt,收集的鎖事件信息可以通過這種方式格式化,讓確認某種鎖問題的原因變得更簡單。DB2 LUW 9.7 提供了一種集成方式來分析所有種類的並發性問題,它也取代了以前 DB2 LUW 發行版中使用的鎖分析的方法。

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