第7章 事务管理技术
以下圖片來自西安交通大學侯迪老師的ppt,僅供學習和復習使用,請勿轉載或他用
7.1 事務的概念
定義事務:
事務的ACID特性:
原子性A:要么都做,要么都不做
一致性C:只包含成功事務提交的結果,如果出現故障,那么一部分修改已經完成,而一部分未完成,處于不正確狀態
隔離性I:一個事務與其他并發事務隔離,不能互相干擾
持續性D:一個事務一旦提交,對數據庫中數據的修改時永久性的。
7.2 數據庫恢復技術
7.2.1 概述
7.2.2 故障的種類
-
事務內部故障
-
系統故障
-
介質故障
-
計算機病毒
事務內部故障
系統故障
介質故障
計算機病毒
7.2.3 恢復的實現技術
兩類:數據轉儲和日志文件
(1)數據轉儲
定期將數據庫復制到存儲介質上進行備份
分類:靜態和動態,海量和增量
靜態和動態的區別在于:
靜態轉儲時數據庫不能做更新等操作,必須等靜態轉儲完成后才能對數據庫進行操作。
而動態轉儲的時候是可以對數據庫進行操作的,但這樣保證不了一致性,因此需要配合日志記錄下轉儲過程中對數據庫的操作。
海量和增量轉儲的區別在于:
海量每次轉儲數據庫中所有的數據
增量只是轉儲上次轉出后更新過的數據
海量轉儲恢復起來方便,但數據庫大,事務處理頻繁時增量轉儲更有效
(2)日志文件
作用:
-
進行事務故障恢復
-
進行系統故障恢復
-
協助后備副本進行介質故障恢復
具體作用:
-
事務故障恢復和系統故障恢復必須使用日志文件
事務故障恢復需要undo已經修改磁盤中數據但未完成的事務
系統故障恢復需要undo已經修改磁盤中數據但未完成的事務+redo已經提交但是還未修改磁盤數據的事務
必須先寫日志文件的原因:如果先寫數據庫可能再數據庫寫的過程中發生故障,導致日志文件沒有登記上。
7.2.4 恢復策略
事務故障的恢復
恢復步驟:
系統故障的恢復
恢復步驟:
介質故障的恢復
-
重裝數據庫
-
重做已完成的事務
7.2.5 具有檢查點的恢復技術
恢復策略:
從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,藉此找到最后一個檢查點記錄,然后根據將所有在建立該檢查點記錄時正在執行的事務加入一個active-list,將所有active-list中的事務都暫時放在undolist里,從檢查點開始正向掃描日志文件,若提交了則將其從undolist中移到redolist直到日志文件結束。
最后對undolist里的undo,redolist里的redo。
7.2.6 數據庫鏡像(解決介質故障)
7.3 并發控制
7.3.1 概述
7.3.2 封鎖
什么是封鎖?
兩類鎖:
-
排他鎖 X鎖
-
共享鎖 S鎖
事務T對數據對象A加X鎖后不能再加其他鎖,只能T對A進行讀寫
加S鎖后還可以加S鎖,但不能加X鎖,S鎖只能讀
鎖的相容矩陣:
| X | N | N | Y |
| S | N | Y | Y |
| _ | Y | Y | Y |
7.3.3 封鎖協議
一級封鎖協議
修改數據之前必須加X鎖,直到事務結束釋放。
可以防止丟失修改,并保證事務是可恢復的
但是不可以防止不可重復讀和臟讀
為什么不能防止臟讀:因為雖然A事務對數據加了X鎖,但是B事務仍舊可以通過select來讀取數據,因此若A事務回滾,則B會讀到臟數據
不可重復讀類似。
二級封鎖協議
修改數據之前必須加X鎖,且讀數據前必須加S鎖,讀完后即可釋放。
可防止數據丟失以及讀臟數據
但是依舊不能防止不可重復讀,因為讀完后即可釋放。假設A事務先讀一次然后釋放,這時候如果B事務加X鎖修改數據然后釋放,A再加S鎖讀就會讀不一樣的數據。
三級封鎖協議
修改數據之前必須加X鎖,且讀數據前必須加S鎖,事務結束后才可釋放。
可防止3個問題
小結:
7.3.4 活鎖和死鎖
活鎖
活鎖,即先請求的鎖一直沒有獲得,導致永遠等待:
死鎖
| Lock R1 | ? ? ? |
| ? | Lock R2 |
| ? ? | ? ? |
| Lock R2 | ? |
| 等待 | |
| 等待 | |
| 等待 | Lock R1 |
| 等待 | 等待 |
| 等待 | 等待 |
| ? ? ? |
死鎖的預防
一次封鎖法,必須一次將所有需要的數據加鎖
但是會降低系統并發度,且一開始不知道要哪些數據
順序封鎖,對數據對象定一個封鎖順序,必須按這個順序進行封鎖
事務卷回重執,利用時間戳
兩種策略:
年老的(先開始執行的事務)等待,重新執行
年老的擊傷年輕的,使年輕的重新執行
死鎖的診斷與解除
超時法
等待時間超過了時限
等待圖法
存在回路則有死鎖
解除死鎖:
7.3.5 并發調度的串行性
可串行化:并發執行的結果與串行執行這些事務中的某種情況結果相同。
沖突可串行化調度
沖突:不同事務對一個數據的讀寫和寫寫操作,即除了兩個都讀
下標表示哪個事務,由于操作的數據對象不一樣,所以可以交換。
注意: 沖突可串行化是可串行化的充分條件,但不是必要。
不是沖突可串行化,但是可能可串行化。
7.3.6 兩段鎖協議
即釋放一個鎖之后不再請求任何鎖
是沖突可串行化的,因此是可串行化的。
注意:
兩段鎖協議保證可串行化,但是可能產生死鎖。
7.3.7 封鎖粒度
封鎖對象的大小:如頁(大)和元組(小)
封鎖對象越大,則并發度越小,但系統開銷小
封鎖對象小,則并發度高,但是開銷大
多粒度封鎖
顯式封鎖:直接對數據對象加鎖
隱式封鎖:由于數據對象的某個父節點被加鎖而存在鎖
檢查封鎖時,必須要檢查隱式封鎖,包括了所有父節點和子節點,如果有不相容鎖就不能加鎖。
由于這樣檢查的太多了,所以引入一個意向鎖:
意向鎖
對任一結點加鎖需要對它的所有上層節點加意向鎖
三種意向鎖:
SIX表示要對某個節點進行讀操作,同時可能對其下層節點進行寫操作。
意向鎖都是準備對子節點加鎖,而不是已經加了鎖。
SIX是已經對數據對象加S鎖,同時可能對子節點加X鎖,而IS是可能對子節點加S鎖,因此相容。而IX是要對子節點加X鎖,由于已經有S鎖,所以不相容。
IS和IX都是意向,因此任意兩個都是相容的。
總結
以上是生活随笔為你收集整理的第7章 事务管理技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: telnet出现端口23连接失败解决办法
- 下一篇: 科普:网格屏是什么意思?LED网格屏怎么