程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2隔離級別--可重復讀

DB2隔離級別--可重復讀

編輯:DB2教程

下面為您介紹的DB2隔離級別,是可重復讀級別,作為重要的DB2隔離級別之一,利用可重復讀,不可能出現丟失更新、訪問未落實的數據和幻像行的情況。

可重復讀

可重復讀(RR)會鎖定應用程序在工作單元中引用的所有行。利用“可重復讀”,在打開游標的相同工作單元內一個應用程序發出一個 SELECT 語句兩次,每次都返回相同的結果。利用“可重復讀”,不可能出現丟失更新、訪問未落實的數據和幻像行的情況。

在該工作單元完成之前,“可重復讀”應用程序可以盡可能多次地檢索和操作這些行。但是,在該工作單元完成之前其他應用程序均不能更新、刪除或插入可能會影響結果表的行。“可重復讀”應用程序不能查看其他應用程序的未落實更改。

利用“可重復讀”,將會鎖定引用的每一行,而不僅僅是檢索的那些行。執行了適當的鎖定,因此其他應用程序不能插入或更新行(該行可能要添加到查詢所引用的行的列表中,如果重新執行查詢)。這將防止出現幻像行。例如,如果您掃描 10000 行並對它們應用謂詞,盡管只有 10 行滿足條件,但仍會鎖定全部的 10000 行。 
注: “可重復讀”隔離級別確保在應用程序看到數據之前所有返回的數據都保持不變,即使使用了臨時表或行分塊也是如此。

由於“可重復讀”可能獲得和掛起大量鎖定,因此這些鎖定可能超出可作為 locklist 和 maxlocks 配置參數的有效結果的鎖定數。為了避免鎖定升級,優化器在認為很可能會發生鎖定升級的時候,可能選擇立即獲得單個表級別鎖定用於索引掃描。這就像數據庫管理器代表您發出了一個 LOCK TABLE 語句一樣。如果不想獲得表級別鎖定,確保有足夠的鎖定可用於該事務或使用“讀穩定性”隔離級別。

評估引用約束時,在一些情況下,DB2 將在內部把對外部表進行掃描所使用的DB2隔離級別升級到“可重復讀”(RR),而無論用戶設置的DB2隔離級別是什麼。這將導致其他鎖定在落實之前一直被掛起,從而增大了出現死鎖或鎖定超時的可能性。為了避免出現這種情況,建議您創建僅包含一列或多列外鍵的索引,從而允許 RI 掃描使用此索引。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved