首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 會話級鎖等待控制:SET CURRENT LOCK TIMEOUT 完整指南與實測

     編輯:DB2 教學

功能背景

DB2 8.2 前僅能透過資料庫配置參數 LOCKTIMEOUT 統一設定全系統鎖等待時間。自 V8.2 起,引入 SET CURRENT LOCK TIMEOUT 語句,支援單一會話/連線自訂鎖等待策略,提供精細化並發控制能力。

語法與選項

SET [CURRENT] LOCK TIMEOUT = 
  { WAIT | NOT WAIT | NULL |  |  }
選項行為說明
WAIT無限期等待鎖釋放(相容 LOCKTIMEOUT=-1)
NOT WAIT無法立即取得鎖時,立即返回錯誤 (SQLCODE -911)
NULL使用資料庫配置參數 LOCKTIMEOUT 值
秒數 (整數/主機變數)指定等待秒數,逾時返回錯誤

影響範圍:僅適用於列鎖、表鎖、索引鍵鎖、MDC 區塊鎖;不影響其他鎖類型。

實戰測試步驟 (使用 SAMPLE 資料庫)

  1. 開啟兩個 DB2 CLP 視窗,關閉自動提交:db2 +c
  2. 會話 1 建表並插入資料但不提交:
    connect to sample
    create table test(id int, name char(10))
    commit
    insert into test values(1,'test')
  3. 會話 2 嘗試查詢(預設 LOCKTIMEOUT=-1 將無限等待):
    connect to sample
    select * from test  -- 會卡住等待
  4. 會話 2 設定不等待 後再查詢:
    set current lock timeout not wait
    select * from test  -- 立即返回錯誤 SQL0911N

應用整合方式

  • 嵌入式 SQL / 預存程序:直接執行 SET CURRENT LOCK TIMEOUT
  • CLI/ODBC 應用:配置 db2cli.ini 關鍵字 LOCKTIMEOUT = WAIT | NOT WAIT | WAIT | ,驅動程式自動發送設定語句

設計建議

根據業務特性彈性設定:高優先級線上交易用 NOT WAIT 快速失效轉向;批次報表用 WAIT 30 容忍短暫阻塞;長時間運行作業用 WAIT 確保完成。避免全系統預設 -1 導致連鎖阻塞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved