DB2中的讀穩定性是每一個DBA都需要掌握的知識,它保證了不可能出現“不可重復讀”情形,值得我們仔細去研究學習。
讀穩定性(RS)只鎖定應用程序在工作單元中檢索的那些行。它確保在某個工作單元完成之前,在該工作單元運行期間的任何限定行讀取不被其他應用程序進程更改,且確保不會讀取由另一個應用程序進程所更改的任何行,直至該進程落實了這些更改。也就是說,不可能出現“不可重復讀”情形。
與可重復讀不同,使用“讀穩定性”時,如果您的應用程序多次發出相同的查詢,那麼有可能看到附加的幻像行(幻像讀現象)。重新引用掃描 10000 行的示例時,“讀穩定性”只鎖定限定的行。這樣,使用“讀穩定性”時,只檢索 10 行,且只對那十行掛起鎖定。將它與“可重復讀”對比,在本示例中,可重復讀會在所有的 10000 行上掛起鎖定。掛起的鎖定可以是共享、下次共享、更新或互斥鎖定。
注: “讀穩定性”DB2隔離級別確保在應用程序看到數據之前所有返回的數據保持不變,即使使用了臨時表或行分塊也是如此。
“讀穩定性”DB2隔離級別的其中一個目標是提供較高並行性程度以及數據的穩定視圖。為了有助於達到此目標,優化器確保在發生鎖定升級前不獲取表級鎖定。
“讀穩定性”DB2隔離級別最適用於包括下列所有特征的應用程序:
* 在並發環境下運行
* 需要限定某些行在工作單元運行期間保持穩定
* 在工作單元中不會多次發出相同的查詢,或者在同一工作單元中發出多次查詢時並不要求該查詢獲得相同的回答。