DB2 死鎖的根本原因和負責資源調查


問題:一個 COBOL-DB2 程式由於死鎖而失敗。您將如何找到導致程式失敗的資源?

解決方案

當兩個或多個應用程式發生死鎖時,它們會互相等待對方釋放其所需的資源上的鎖。在 DB2 系統作業 DSNZMSTR 作業中可以找到詳細的資訊和日誌。DSNZ 是已安裝的 DB2 子系統的名稱,它因安裝而異。此作業的 SYSOUT 繼續顯示 DB2 級別的系統日誌。與死鎖相關的日誌也存在於此作業中。

首先,我們需要找出我們的 COBOL-DB2 程式因死鎖而失敗的時間。接下來,我們將檢查該特定時間段內 MSTR 作業的 SYSOUT。

我們將獲得死鎖資訊,例如:參與死鎖的 COBOL-DB2 程式/事務/程序、發生死鎖的 DB2 資源等。

讓我們看一個死鎖條件的例子。

考慮以下 ORDERS 和 TRANSACTIONS DB2 表。

訂單 ID
訂單日期
交易 ID
Z22345
22-10-2020
IRN11236
Z62998
14-09-2020
IRN77812
Z56990
01-09-2020
IRN89023
Z56902
21-09-2020
IRN09663
Z99781
12-08-2020
IRN88112
Z56112
30-10-2020
IRN67091

 

交易 ID
交易金額
IRN11236
6754
IRN77812
451
IRN89023
9087
IRN09663
1156
IRN88112
5908
IRN67091
152


如果有兩個程式當前處於執行階段——PROG A 和 PROG B。PROG A 正在讀取 TRANSACTIONS 和 ORDERS DB2 表,並持有這兩個表上的共享鎖。PROG B 也正在讀取 TRANSACTIONS 和 ORDERS DB2 表,並且也持有這兩個表上的共享鎖。

PROG A 需要更新 ORDERS 表,因此它將把其共享鎖提升到更新鎖,然後它將等待 PROG B 從 ORDERS 表釋放其共享鎖,以便更新鎖可以提升到獨佔鎖。

同時,PROG B 需要更新 TRANSACTIONS 表,因此它將把其共享鎖提升到更新鎖,並將等待 PROG A 從 TRANSACTIONS 表釋放其共享鎖,以便將其鎖從更新提升到獨佔。

在上述場景中,PROG A 和 PROG B 正在等待對方釋放鎖,但實際上它們被卡住了並進入了一個稱為死鎖的狀態。

更新於: 2020-11-30

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告