160 likes | 301 Vues
大綱. 9.1 前言 9.2 何謂異動 9.3 平行控制 9.4 利用鎖定方式進行平行控制 9.5 利用時戳方式進行平行控制. 9.1 前言. 維持資料一致性 (consistence) 是資料庫首要重點。 確保資料庫維持在一致性的狀態,資料才會具有可用性。 對資料庫異動進行管理以確保資料庫維持一致性。 資料庫異動可能分別對不同的資料或是相同的資料進行處理,便衍生出同步處理的問題。 本章我們將針對異動管理以及同步處理進行討論。. 9.2 何謂異動.
E N D
大綱 9.1 前言 9.2 何謂異動 9.3 平行控制 9.4 利用鎖定方式進行平行控制 9.5 利用時戳方式進行平行控制 挑戰資料庫管理系統
9.1 前言 • 維持資料一致性(consistence)是資料庫首要重點。 • 確保資料庫維持在一致性的狀態,資料才會具有可用性。 • 對資料庫異動進行管理以確保資料庫維持一致性。 • 資料庫異動可能分別對不同的資料或是相同的資料進行處理,便衍生出同步處理的問題。 • 本章我們將針對異動管理以及同步處理進行討論。 挑戰資料庫管理系統
9.2 何謂異動 • 資料庫的「異動(transaction)」是指一件工作的邏輯單位(logic unit of work)。 • 異動共有四種基本性質,統稱為ACID性質 • 基元性(atomicity) • 一致性(consistency) • 隔離性(isolation) • 持久性(durability) 挑戰資料庫管理系統
資料庫管理系統有異動管理程式(transaction manager) 提供兩項運算以達到異動的基元性 • 提交(commit transaction) • 異動已經圓滿完成的訊號。 • 執行提交便是告訴異動處理程式一個邏輯單位已經成功地完成,資料庫再度處於一致的狀態。 • 回復(rollback transaction) • 簡稱取消,是告訴異動處理程式,可能是有錯誤發生導致有部分資料庫運算未被執行。 • 資料庫處於不一致的狀態,因此,該邏輯工作所有的更新都必須被回復。 挑戰資料庫管理系統
異動日誌(Transaction Log) • 異動日誌上會紀錄每個異動所牽涉到的資料表格(table)、資料庫運算的類型(operation)、資料記錄(row ID)、更新前的資料值(before)與更新後的資料值(after)。 • 資料庫管理系統會為每個異動產生一個編號(trx num),一旦要進行回復處理,只要從異動日誌中讀取編號相同的異動資料,將牽涉到的欄位都比照更新前的資料值予以回復,資料庫的內容便得以回復到被更新前的狀態。 圖9.1 交易日誌的結構 註解:TRL ID= Transaction log record ID, TRX NUM=Transaction number (由資料庫管理系統自動產生) PTR=Pointer to a transaction record ID 挑戰資料庫管理系統
系統回復(System recovery) • 何謂「資料庫系統故障?」 • 軟當機(soft crash) • 例如,因電力問題導致系統當機都屬於這類故障,這類故障會導致所有主記憶體的內容不見(特別是資料緩衝區內的資料),進而影響所有正在執行的異動,但是對資料庫並不會造成實質的傷害。 • 以圖9.2為例,進行軟當機回復的處理原則說明。 • 硬當機(hard crash) • 例如,硬碟的讀寫頭損毀,或是硬碟磁軌受損,導致資料庫部份資料受到損害,同時至少目前正在使用到該部份資料的異動受到影響。 • 處理方式只需利用異動日誌將之前已提交的異動重作一次或是重新載入備份資料。 挑戰資料庫管理系統
根據圖9.2可以看到五種異動類型: • T1:在查核點之前便開始,而且在查核點之前完成異動。 • T2:在查核點之前便開始,在查核點之後完成異動,但再系統故障之前便完成異動。 • T3:在查核點之後才開始,而且在系統故障之前並未完成異動。 • T4:在查核點之後才開始,但是在系統故障之前就已經完成異動。 • T5:在查核點之前才開始,但是在系統故障之前並未完成異動。 圖9.2 利用查核點進行系統回復範例(五種異動類型) 挑戰資料庫管理系統
9.3 平行控制 • 平行管理機制(concurrency control mechanism) • 為了確保資料庫維持一致的狀態對同時進行且存取相同資料的異動進行管理。 • 不管理存取相同資料的異動,大致會發生三種問題 • 更新遺失(lost update) • 指前一個異動產生的更新結果未被後一個異動所參考。 • 未提交相依(uncommitted dependency) • 指一筆異動去讀取已被其他異動更新但尚未提交的更新資料。 • 不一致檢索(inconsistent retrievals) • 指在多個異動進行,而其中一個異動看到的資料庫是處於不一致的狀態。 挑戰資料庫管理系統
更新遺失(lost update) 圖9.3 正常的兩異動運算的執行順序 圖9.4 更新遺失範例 挑戰資料庫管理系統
未提交相依(uncommitted dependency) 圖9.5 兩個異動正確執行的結果 圖9.6 兩個異動正確執行的結果 挑戰資料庫管理系統
不一致檢索(inconsistent retrievals) 圖9.7 兩異動 正確執行的結果 圖9.8 不一致 檢索的結果 挑戰資料庫管理系統
9.4 利用鎖定方式進行平行控制 • 解決平行問題最常見的方法是利用鎖定(locking)的平行控制技術。 • 需要一個鎖管理機制(lock manager)的配合。 • 鎖有許多種類,最簡單的鎖叫做二元鎖(binary lock) 。 圖9.8 在資料庫層級下進行二元鎖定範例 挑戰資料庫管理系統
為了讓資料庫的資訊能更被有效存取,而不至於為了一致狀態而讓各個異動不斷等待,因此,有學者提出其他兩種不同的鎖。為了讓資料庫的資訊能更被有效存取,而不至於為了一致狀態而讓各個異動不斷等待,因此,有學者提出其他兩種不同的鎖。 • 互斥鎖定:又稱寫入鎖定(write lock),當異動T1對值組A提出互斥鎖定時,異動T2對相同值組鎖提出的各種請求都會被系統鎖拒絕。 • 共享鎖定:又稱讀取(read lock) ,當異動T1對值組A提出共享鎖定時,如果異動T2對相同值組鎖提出共享鎖定請求,系統會予以接受;但若異動T2對相同值組提出的互斥鎖定請求則會被系統鎖拒絕。 挑戰資料庫管理系統
死結(Deadlock) • 死結預防(deadlock prevention) • 死結偵測(deadlock detection) • 死結避免(deadlock avoidance) 圖9.9 死結範例 挑戰資料庫管理系統
9.5 利用時戳方式進行平行控制 • 為同步執行的異動個別給予一個具唯一性的時戳(time stamping) 。 • 每個異動的所有資料庫運算,包括讀取(read)或寫入(write)都會對應到同一個時戳。 • 要使用時戳(time stamping) 方式,首先系統必須要能產生具有唯一性以及遞增性的時戳。 • 缺點是資料庫的每個值都必須「增加讀取時間」和「最新寫入時間」兩個欄位。 挑戰資料庫管理系統