什麼是事務
事務是構成一個完成的邏輯單元的數據庫操作的集合。
事務具備以下幾個性質:
1、原子性(A)。一個事務中的所有操作都是一個完整的工作單元,這些操作要麼都發生,要不都不發生。
2、一致性(C)。一個事務單獨執行時的結果,應該保持數據庫的正確和完整,即數據不會因爲事務的執行而被破壞。
3、隔離性(I)。在多個事務併發執行時,系統應保證執行結果與這些事務按先後次序串行執行的結果一樣。
4、持久性(D)。一個事務一旦完成後,它對數據庫的改變就是永久的,即使發生故障也一樣。
事務執行的狀態
活躍狀態。初始狀態,事務在正常執行後都處於這個狀態。
部分提交狀態。在事務最後一條語句被執行之後進入這個狀態。
提交狀態。事務成功完成了,所做的更新是持久的。
失敗狀態。當出現故障無法正常執行的狀態。
中止狀態。當失敗的事務執行回滾以保證原子性,數據的內容已經恢復到開始執行前狀態的時候。
事務的併發執行
事務併發執行的好處:第一提高吞吐量,第二減少平均響應時間。
併發執行潛在的問題:更新丟失問題,讀髒數據,非一致讀和不可重複讀。
什麼是事務的調度。
是對事務的操作指令在數據庫系統中執行時間順序的一個安排,要滿足兩個條件:
一組事務的一個調度必須要包含這一組事務所有的操作。
調度必須要保持操作在各個事務中出現的次序。
可串行化調度
併發調度的可串行化。併發是爲了提高吞吐量,提高平均響應時間,串行化是爲了保持數據的一致。
衝突的定義
分別屬於不同事務的兩個操作Oi 和Oj,如果他們訪問相同的數據項而且其中至少有一個是write操作,責成Oi和Oj是衝突的,否則是不衝突的,不衝突的情況只有兩個都是讀操作。
衝突等價
如果調度S可以通過一系列不衝突操作的交互而轉換爲調度S‘,則稱S和S'是衝突等價的。
如果一個調度S與一個串行調度是衝突等價的,則成S是衝突可串行化的。
基本鎖類型
共享鎖,也稱S鎖,如果事務T獲得了一個數據項的共享鎖,則T可是讀但不能寫該數據項。
排他鎖,也稱X鎖,如果事務T獲得了一個數據項的排他鎖,則T即可讀也可以寫該數據項。
共享鎖與共享鎖是相容的。
兩段鎖協議
增長階段即事務開始執行處於增長階段,可以對數據項提出加鎖申請,但不能解鎖。
縮減階段,一旦事務釋放了鎖,就進入縮減階段,該階段事務可以解鎖,但是不能在加鎖。
事務的隔離級別
爲提交讀,已提交讀,可重複讀,可串行化。
死鎖
死鎖預防的方法:一次性封鎖法,順序封鎖法,基於時間戳的單向等待法,超時方法。
死鎖恢復工作的三個方面
選擇犧牲者,選擇犧牲者應該是回滾代價最小的一個。
回滾,最簡單的辦法就是對犧牲者採取全部回滾然後重啓。
避免餓死,要防止一個事務總被選爲犧牲者,可以通過在選擇犧牲者的條件上加個已經回滾的次數。
介質的分類
揮發性介質:比如cache,比如內存。
持久性介質:比如磁盤,光盤,磁帶等。
故障的分類
事務故障,邏輯錯誤,系統錯誤。
系統故障,掉電,硬件故障,軟件錯誤等造成的在揮發性介質存儲的數據都沒有了。
介質故障,由於磁頭損壞,病毒破壞等原因造成的物理數據丟失。
基於日誌的恢復
每條記錄產生後立即寫入穩定存儲服務器的日誌的尾部,這樣日誌就包含了所有數據庫活動的完整信息,可以利用日誌進行數據的恢復。
重做事務集
是在日誌中既有<T, start>又有<T,commit>的記錄的所有事務T,叫做重做事務集。
撤銷事務集
是在日誌中有<T, start> 沒有<T,commit>的記錄的所有事務T,叫做撤銷事務集。
undo(T) 和redo(T)
對撤銷的事務做undo(T),對重做事務集做redo(T),操作redo和undo必須是等冪的,即無論操作多少次redo和undo與執行一次的效果是一樣的。
數據庫備份
備份的過程:
1、將所有當前的位於內存的日誌記錄輸出到穩定存儲器當中。
2、將所有區塊輸出到磁盤上。
3、將數據庫的內容複製到穩定存儲器中。
4、將備份日誌記錄輸入到穩定存儲器的日誌文件中。