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

分散式 DBA 專欄:Cursor Stability 隔離級別演進(下)—— 深度理解 Currently Committed 行為

     編輯:DB2 教學

上一期專欄解釋了隔離級別在多用戶環境防止資料不一致的關鍵角色,以及 IBM DB2 9.5 實現無鎖技術前後 Cursor Stability (CS) 隔離級別的運作差異。本期將介紹 DB2 9.7 引入的 Currently Committed (CC) 語義,闡述其如何實現快速資料存取並增加 CS 隔離級別下 SQL 陳述式的資料並發數。

Currently Committed 語義核心機制

DB2 9.7 實作全新 CS 隔離級別,利用 CC 語義進一步防止寫操作阻塞讀操作。目標是實現符合 ANSI CS 標準、允許且避免鎖等待的 CS 隔離級別(類似 DB2_SKIPDELETED 與 DB2_EVALUNCOMMITTED 註冊表變數用法)。

配合完全無鎖技術(上期介紹),只要 DB2 能確定所需資料已提交,使用 CC 語義的唯讀 SQL 即不獲取鎖。若無法確定資料是否已提交,執行陳述式的交易將嘗試獲取問題記錄的鎖。獲取鎖後繼續傳統 CS 行為;若無法獲取(因其他交易持有該記錄的排他鎖),DB2 將檢查該鎖包含的資訊,僅可能包含以下三種情況之一:

  1. 無資訊:記錄被鎖但未作任何操作(無未提交修改)
  2. Uncommitted Insert 標識符:記錄為新插入但未提交
  3. 日誌資訊:記錄含未提交資料;日誌資訊標識持有鎖的交易對記錄首次修改的日誌記錄

處理邏輯:鎖無資訊 → 以獲取目標鎖方式處理;含 Uncommitted Insert 標識符 → 忽略該記錄(未提交);含日誌資訊 → 使用日誌序號(LSN)直接存取對應日誌記錄,讀取記錄的 CC 版本(即修改前的已提交映像)。圖 1 示意 CC 語義下 SELECT 陳述式查詢記錄流程。注意:CC 語義適用於 Read Stability (RS) 與 CS 隔離級別 SQL,但在 RS 上僅支援 DB2_SKIPINSERTED 行為(避免未提交插入記錄的鎖等待)。

啟用 Currently Committed 語義

相關註冊表變數(特定環境延遲/避免獲取鎖):DB2_SKIPINSERTED(CS/RS 掃描忽略未提交插入)、DB2_SKIPDELETED(忽略未提交刪除記錄與索引鍵)、DB2_EVALUNCOMMITTED(對未提交資料應用可預測性評估,實際視為 Uncommitted Read 直到發現匹配記錄需鎖定)。

啟用方式:使用 DB2 9.7 建立的新資料庫預設啟用 CC 語義。升級至 9.7 的既有資料庫,將資料庫配置參數 cur_commit 設為 ON 或 AVAILABLE 啟用。cur_commit=ON 套用至全資料庫 CS/RS 隔離;cur_commit=AVAILABLE 儲存對應資訊至鎖並執行支援 CC 所需額外日誌記錄(保證修改記錄日誌含完整未提交版本),但 CC 行為需逐一在應用啟用:嵌入式 SQL 應用使用 CONCURRENTACCESSRESOLUTION USE CURRENTLY COMMITTED 綁定選項;CLI/ODBC/Java 應用指定 SQL_ATTR_CONCURRENT_ACCESS_RESOLUTION 連接屬性。

注意:使用 CC 語義需增加日誌空間儲存定義為 DATA CAPTURE NONE 表的更新操作,用於記錄當前交易對資料記錄的首次更新,以查詢記錄列的最新提交映像。

結語:DB2 如何確定資料已提交

資料記錄與索引條目含「標記」位元組,包含「Possibly UNCommitted (PUNC)」位。PUNC 未設定 → 資料確定已提交;否則提交狀態未知。頁面含「pageLSN」,標識頁面最新修改對應日誌記錄 LSN。pageLSN 較資料庫 commitLSN 或資料表 readLSN 舊 → 列/鍵保證已提交;否則未知。

在多用戶環境同時維持資料一致性、完整性與並發存取是難題。交易、隔離級別與鎖有助於一致性,CS 隔離級別因防止髒讀同時實現最大並發而廣泛使用。DB2 9.7 前版本使用此隔離級別可能因鎖等待增加回應時間。CC 語義提供全新實作的 CS 隔離級別,符合 ANSI 標準。透過 CC 語義,讀寫交易可避免未提交插入鎖等待,唯讀交易遇到並發交易未提交更新/刪除時,無需用鎖等待日誌讀取,實質保證應用回應時間不受鎖影響。

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