樂觀並發控制
在關係數據庫管理系統里,樂觀並發控制(又名「樂觀鎖」,Optimistic Concurrency Control,縮寫「OCC」)是一種並發控制的方法。它假設多用戶並發的事務在處理時不會彼此互相影響,各事務能夠在不產生鎖的情況下處理各自影響的那部分數據。在提交數據更新之前,每個事務會先檢查在該事務讀取數據後,有沒有其他事務又修改了該數據。如果其他事務有更新的話,正在提交的事務會進行回滾。樂觀事務控制最早是由孔祥重(H.T.Kung)教授提出[1]。
樂觀並發控制多數用於數據競爭(data race)不大、衝突較少的環境中,這種環境中,偶爾回滾事務的成本會低於讀取數據時鎖定數據的成本,因此可以獲得比其他並發控制方法更高的吞吐量。
樂觀並發控制的階段
樂觀並發控制的事務包括以下階段:[來源請求]
- 讀取:事務將數據讀入,這時系統會給事務分派一個時間戳。
- 校驗:事務執行完畢後,進行提交。這時同步校驗所有事務,如果事務所讀取的數據在讀取之後又被其他事務修改,則產生衝突,事務被中斷(回滾)。
- 寫入:通過校驗階段後,將更新的數據寫入數據庫。
優點與不足
樂觀並發控制相信事務之間的數據競爭(data race)的概率是比較小的,因此儘可能直接做下去,直到提交的時候才去鎖定,所以不會產生任何鎖和死鎖。但如果直接簡單這麽做,還是有可能會遇到不可預期的結果,例如兩個事務都讀取了數據庫的某一行,經過修改以後寫回數據庫,這時就遇到了問題。
相關條目
參考文獻
- ^ H.T.Kung and J. Robinson (1981). "On Optimistic Methods for Concurrency Control". ACM Transactions on Database Systems.