資料庫系統-學習記錄15【課程完結】
ch7.併發控制(續)
使用時間戳的併發控制
事務T的時間戳:TS(T)。事務T將自己開始的訊息發給排程器的時刻
使用系統clock或維護一個計數器,都可以對時間戳的生成進行實現
對於每一個數據庫元素X,都有兩條相關的時間戳以及一個額外的位:
1、RT(X):最近一次有事務對X進行讀取的時間戳
2、WT(X):最近一次有事務對X進行寫入的時間戳
3、C(X):X的提交位。當且僅當最近對X進行寫入的事務進行了commit之後,此位為真
排程器假定,事務時間戳的順序和它們執行的順序是一致的
兩種不允許出現的情況——過晚的讀取和過晚的寫入:
髒資料問題:在U寫入資料並被T讀取後,U撤銷了寫入。此時T讀取的就是髒資料
Thomas寫入規則:當寫入時間較遲的寫入已經就緒時,可以跳過寫入。此寫入規則會在事務abort時存在一個潛在的風險,但可以通過C(X)這個位來避免這個風險
基於時間戳的排程規則
對於讀的請求,應該檢視是否是過晚的讀取
對於寫的請求,應該檢視是否是過晚的寫入
對於commit請求,應該檢視commit位
對於abort或回滾請求,恢復(繼續)其他的事務
假定排程器接收到一個請求
r
T
(
X
)
r_T(X)
rT(X)
如果C(X)為真,則批准請求,如果TS(T)>RT(X),將RT(X)設為TS(T),否則不改變RT(X)的值
如果C(X)為假,則對事務T進行推遲,直到C(X)變為真或事務取消對X的寫入
2、如果TS(T)<WT(X),則說明發生了過晚的讀取,回滾事務T
假定排程器接收到一個請求
w
T
(
X
)
w_T(X)
wT(X)
2、如果TS(T) ≥ \ge ≥RT(X)但TS(T)<WT(X),按照Thomas寫入準則進行寫入
3、如果TS(T)<RT(X),則說明發生了過晚的寫入
假定排程器接收到一個對事務T進行commit的請求,則對所有被事務T寫入的資料庫元素X,置C(X)為真,隨後恢復所有正在等待事務T進行commit的事務
假定排程器接收到一個abort事務T或回滾事務T的請求,則所有正在等待/被事務T寫入的資料庫元素X/的事務必須要重新嘗試讀取或寫入,隨後觀察在被abort的事務取消了寫入後,這些操作是否合法
時間戳與鎖的對比
在低衝突的情況下,時間戳表現更好;而在高衝突的情況下,鎖的表現更好