在資料庫管理系統(DBMS)領域中,「並發性」指的是多個應用程式能夠近乎同時存取相同資料的能力。由於資料共享是 DBMS 的核心優勢之一,系統必須提供有效機制來管理並發存取,確保資料的一致性與完整性不受損害。
最直觀的做法是採用「僅串列」模式:每筆交易必須等待前一筆完成。但在現今的線上系統與高併發場景下,這種方式造成的效能瓶頸完全無法接受。
DB2 採用鎖機制來協調多應用程式對資料的存取。鎖是一種軟體控制機制,在維護資料完整性的前提下,最大化資料存取的並發度與吞吐量。DB2 UDB 與 IRLM(內部資源鎖管理器)協同管理鎖,追蹤鎖的持有者與請求者,判斷資源是否可用。
若缺乏有效的並發控制,將面臨以下風險:
DB2 主要支援兩種基本鎖模式:
為平衡並發度與系統開銷,DB2 提供多層級鎖粒度,範圍從單一列、資料頁、表格到整個表空間。應用程式若需大範圍存取可用粗粒度鎖,精細操作則用細粒度鎖,避免不必要的等待或過多鎖管理開銷。
SQL 應用程式使用交易鎖,而 DB2 實用程式(如備份、重組)則透過聲明與放棄機制配合相容性規則來協調存取。聲明宣告正在存取某對象;放寒則阻止新聲明並等待現有聲明釋放,實現實用程式與線上交易的並共存。
建議大型表採用分區表空間,依分區索引鍵值範圍劃分。每個分區為獨立資料集,可獨立管理。批次作業可拆分至不同分區並行執行,大幅縮短佔用時間;實用程式也可針對特定分區操作,不影響其他分區存取。
當單一交易在表/表空間上持有大量細粒度鎖(頁/列/LOB)時,DB2 會自動升級為表/表空間/分區級鎖,並釋放底層鎖。若啟用分區鎖定(LOCKPART YES),升級僅影響被鎖定分區,未鎖定分區保持可用。升級觸發點由 LOCKSIZE 與 LOCKMAX 參數決定。
決策建議:以效能監控數據為依據,在鎖開銷與並發收益間權衡。預設值適用大多數情境,僅在明確發現頁面鎖熱點時考慮列鎖。