快照隔離的理論學習

本節簡單介紹了快照隔離的理論框架。

形式化表示

爲了更好的抽象表示相關操作,在介紹理論框架之前,先行介紹事務處理和併發控制相關的形式化表示。
定義1:事務Ti是操作opi的有限集合,操作之間嚴格有序(順序使用標記表示),opi中的每一個操作op要麼是讀(通過ri(x)來表示),要麼是寫(通過w<sbu>i</sbu>(x)來表示),這裏的x表示廣義的抽象數據項(data item),可能是tuple、page或者relation。標記<i表示按時間排序,每執行完成一個op稱爲一個步驟(step)。

定義2:設T = {t1,...,tn}是事務集,集合中的每個元素ti = (opi,<i),其中opi表示操作集合,<i表示操作之間的順序。
T的執行歷史h是操作op(s)和順序<s對的組合,其中:
1)每個事務內的步驟順序保存在h
2)T中的每個事務要麼提交要麼回滾
3)T中併發事務的rw和ww衝突是有序的

快照隔離協議

定義6:SI在滿足以下兩個個規則的前提下產生多版本調度
Rule 1.事務t讀取x,其中x是由t啓動前已提交事務產生的最新版本
Rule 2.併發事務寫集合之間不相交
規則1表示每一個讀操作ri(x)都會讀到ti啓動時最近已提交的寫操作數據版本。規則2表示如果事務時間上面有重疊,那麼事務不能寫同樣的數據項。
實現規則2有多種方法,一是FCW(First Commit Wins),在commit時判斷,二是FUW(First Update Wins),在更新時判斷。Oracle和PostgreSQL使用了FUW,其算法如下:
1.事務T2等待T1的鎖釋放,如T1提交,則T2立即回滾
2.T1在事務T2嘗試寫x前提交,T2在嘗試寫入時回滾
3.如果T1釋放了x上的鎖,T2允許寫x

SQL標準定義的隔離級別

標準定義了四個級別,分別是可串行化、可重複讀、讀已提交、讀未提交。
可串行化
可串行化隔離級別禁止所有並發現象和異象,如同事務串行執行。

可重複讀
除幻讀外,禁止其他現象和異象。

讀已提交
不允許髒讀和髒寫外。

讀未提交
不允許髒寫。

可恢復性

定義13:調度s視爲可恢復的,需滿足以下條件,設ti,tj∈trans(s),如果ti讀取了tj寫的數據,並且ci∈op(s),那麼cj <s ri(x)

參考資料

A Theoretical Study of ‘Snapshot Isolation’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章