1. 程式人生 > 資料庫 >資料庫系統-學習記錄15【課程完結】

資料庫系統-學習記錄15【課程完結】

ch7.併發控制(續)

使用時間戳的併發控制

  事務T的時間戳:TS(T)。事務T將自己開始的訊息發給排程器的時刻

  使用系統clock或維護一個計數器,都可以對時間戳的生成進行實現

  對於每一個數據庫元素X,都有兩條相關的時間戳以及一個額外的位:
  1、RT(X):最近一次有事務對X進行讀取的時間戳
  2、WT(X):最近一次有事務對X進行寫入的時間戳
  3、C(X):X的提交位。當且僅當最近對X進行寫入的事務進行了commit之後,此位為真

  排程器假定,事務時間戳的順序和它們執行的順序是一致的

  兩種不允許出現的情況——過晚的讀取和過晚的寫入:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-IafYNFXO-1609050218943)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201227135314535.png)]

  髒資料問題:在U寫入資料並被T讀取後,U撤銷了寫入。此時T讀取的就是髒資料

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-FQzE0BKN-1609050218949)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20201227135405508.png)]

  Thomas寫入規則:當寫入時間較遲的寫入已經就緒時,可以跳過寫入。此寫入規則會在事務abort時存在一個潛在的風險,但可以通過C(X)這個位來避免這個風險

基於時間戳的排程規則

  對於讀的請求,應該檢視是否是過晚的讀取
  對於寫的請求,應該檢視是否是過晚的寫入
  對於commit請求,應該檢視commit位
  對於abort或回滾請求,恢復(繼續)其他的事務

  假定排程器接收到一個請求 r T ( X ) r_T(X) rT​(X)

  1、如果TS(T) ≥ \ge ≥WT(X),則說明這個讀操作在物理上是可以實現的。此時再看C(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)

  1、如果TS(T) ≥ \ge ≥RT(X)並且TS(T) ≥ \ge ≥WT(X),則說明這個寫操作在物理上是可以實現的。隨即對X寫入新值,將WT(X)的值設定為TS(T),並且將C(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的事務取消了寫入後,這些操作是否合法

時間戳與鎖的對比

  在低衝突的情況下,時間戳表現更好;而在高衝突的情況下,鎖的表現更好