105 DBID/OBID for database and tablespace translation
107 Data set open/close information
172 Deadlock
在 Trace Qualification 面板中,填入 DB 用戶名(在本例中為 TUSER03)和 DB 模式(在本例中為 TGUSER03),然后按 Enter。 圖 2. Trace qualification 面板 16 Start of the first insert
20 Lock summary
53 Describe, SQL commit/rollback or error before SQL analyzed
58 End of SQL statement execution
59 Start of FETCH
60 start of SELECT
61 Start of INSERT, UPDATE or DELETE
63 SQL statement to be parsed
64 start of PREPARE
65 start of OPEN CURSOR for static or dynamic SQL
66 Start of CLOSE CURSOR for static or dynamic SQL
68 Start of ROLLBACK
69 End of ROLLBACK
70 Start of COMMIT phase 2
71 End of COMMIT phase 2
88 start of synchronous request (commit phase 1)
89 End of synchronous request (commit phase 1)
105 DBID/OBID for database and tablespace translation
在 Trace Qualification 面板中,填入 DB 用戶名(例如,TUSER03)和 DB 模式(例如,TGUSER03),然后按 Enter。 在 Trigger Immediately 面板中,填入 DB2 跟蹤數據的輸出數據集(例如,TGUSER03.DB2PM.TRACE02)。設置 Disposition 為 Overwrite。 注重:可以使用其他方法來配置 DB2 跟蹤停止觸發器(例如,經過一段時間后)。 按 Enter 完成 SQL Activity 配置。 在 Web 應用程序運行期間,激活 Collect Task B 來收集 SQL 語句。 分析跟蹤報告以確定不良 SQL 語句 Web 應用程序中 DB2 鎖的原理 通常 Web 應用程序有頁鎖和行鎖。根據創建數據庫所使用的數據定義語言 (DDL) 模式文件,可以確定正在使用的鎖類型。行鎖有三種模式:S(Share)、U(Update) 和 X(Exclusive)。要盡量避免的鎖影響是掛起、超時和死鎖。 當兩個或兩個以上應用程序進程均持有對資源(該資源是其他進程所需,且沒有該資源時進程無法繼續進行)的鎖時,會發生死鎖。下面是關于發生死鎖情況的具體解釋: JobOne 和 JobTwo 是兩個事務。JobOne 訪問表 M,并持有頁 B 的 X (exclusive) 鎖,包含記錄 000300。 JobTwo 訪問表 N,并持有頁 A 的 X (exclusive) 鎖,包含記錄 000010。 JobOne 請求表 N 頁 A 的鎖,同時仍持有表 M 頁 B 的鎖。因為 JobTwo 持有頁 A 的 X 鎖,所以作業被掛起。 JobTwo 請求表 M 頁 B 的鎖,同時仍持有表 N 頁 A 的鎖。因為 JobOne 持有頁 B 的 X 鎖,所以作業被掛起。這種情況就是死鎖。 為了改善應用程序的并發性,您需要找到引起死鎖的 SQL 語句。然后,優化 SQL 語句以消除死鎖。 根據死鎖報告來分析鎖信息 作為例子,我們假定當多個顧客同時登錄并注冊一個商店時發生死鎖。您已經得到死鎖跟蹤報告和 SQL 語句報告。 首先,您應檢查死鎖跟蹤報告(在本文中為 TGUSER03.DB2PM.LOCKS)。 下面是跟蹤報告中一些要害參數的說明,有助于理解該進程: 圖 4. 跟蹤參數 LUW 實例 | 持有的資源(X 鎖) | 請求的資源(S 鎖) | 死鎖時間表 |
0CC544053119 | SW03DB1.USERS.X'00004E'.X'2B' | SW03DB1.USERS.X'00004C'.X'2B' | 06:30:09.41044991 |
0E26A4053107 | SW03DB1.USERS.X'00004C'.X'2B' | SW03DB1.USERS.X'00004E'.X'2B' | 06:30:09.41044991 |
COMMIT processing in SQL ACTIVITY trace for INSTANCE 0CC544053119
COMMIT RECEIVED 06:28:50.72
COMMIT RECEIVED 06:28:50.85
COMMIT RECEIVED 06:28:50.97
COMMIT RECEIVED 06:28:51.04 the latest commit before the deadlock occurred.
COMMIT RECEIVED 06:30:09.61
COMMIT RECEIVED 06:30:09.64
COMMIT RECEIVED 06:30:09.73
COMMIT RECEIVED 06:30:09.77
COMMIT RECEIVED 06:30:09.80
因此,應該研究那些訪問過 SW03DB1.USERS 且在 06:28:51.04 到 06:30:09.41044991 之間執行的 SQL 語句。如圖 7 所示。 圖 7. SQL 報告 COMMIT processing in SQL ACTIVITY trace for INSTANCE 0E26A4053107
COMMIT RECEIVED 06:28:50.65 the latest commit before the deadlock occurred.
COMMIT RECEIVED 06:30:49.67
然后,研究那些訪問過 SW03DB1.USERS 且在 06:28:50.65 到 06:30:09.41044991 之間執行的 SQL 語句。如圖 8 所示。 圖 8. SQL 報告 新聞熱點
疑難解答