DB2中是否有可能檢測表是否被鎖定。實際上,當我們使用Select語句並且該表被鎖定時[可能是因爲正在執行插入或刪除操作],那麼我們必須等待表被解鎖。在DB2或任何數據庫中是否可以檢測表是否被鎖定?
在我們的應用程序有時甚至2-3分鐘。我的想法是,如果我可以通過某種機制來檢測鎖定的表格,那麼我甚至不會嘗試獲取記錄,而是會發出一些消息。
不僅在DB2中,而且可以在任何數據庫中檢測到這一點。
DB2中是否有可能檢測表是否被鎖定。實際上,當我們使用Select語句並且該表被鎖定時[可能是因爲正在執行插入或刪除操作],那麼我們必須等待表被解鎖。在DB2或任何數據庫中是否可以檢測表是否被鎖定?
在我們的應用程序有時甚至2-3分鐘。我的想法是,如果我可以通過某種機制來檢測鎖定的表格,那麼我甚至不會嘗試獲取記錄,而是會發出一些消息。
不僅在DB2中,而且可以在任何數據庫中檢測到這一點。
我從來沒有使用DB2,但根據documentation看來你可以使用以下進行查詢不等待鎖:
SET CURRENT LOCK TIMEOUT NOT WAIT
或者,你可以設置鎖定超時值爲0
SET CURRENT LOCK TIMEOUT 0
這兩種說法都有相同的效果。
一旦你有了這個,你可以嘗試從表中選擇並捕獲錯誤。
我會建議不要等待,而是指定一個低鎖定超時(10-30s)。如果目標表只是暫時鎖定(小的更新,比如說1秒),您的第二個應用程序將立即超時。如果您有10秒的超時時間,第二個應用程序會簡單地等待第一個應用程序進行COMMIT或ROLLBACK(1秒),然後繼續前進。
另外,當涉及到發放鎖時,還有一些「先到先得」策略 - 如果第二個應用「放棄」,第三個應用可以進入並獲取第二個應用所需的鎖。第二個應用可能會因爲不斷放棄而遭遇鎖定飢餓。
如果您遇到正在發生的併發問題,請考慮鎖定監視以瞭解數據庫如何被訪問。有很多有用的統計信息(如平均鎖定等待時間等)可以幫助您調整參數和應用程序行爲。
哇..我想給你+5這個:D。 – 2009-10-06 12:10:10