# 資料庫概論系統—系統篇 ## 一、關係查詢處理和查詢優化 ### 1.1關係資料庫的查詢處理 查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化) ### 1.2關係資料庫系統的查詢優化 查詢優化的優點不僅在於用戶不必考慮如何最好地表達查詢以獲得較高 ...
資料庫概論系統—系統篇
一、關係查詢處理和查詢優化
1.1關係資料庫的查詢處理
查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化)
1.2關係資料庫系統的查詢優化
查詢優化的優點不僅在於用戶不必考慮如何最好地表達查詢以獲得較高的效率,而且在於系統可以比用戶程式“優化”做的更好
會將建立原始樹,並能夠將其轉化為優化查詢樹
二、資料庫恢復技術
2.1事務
2.1.1事務的基本概念
事務:是用戶定義的一個資料庫操作序列,要不全做,要不全不做,是一個不可分割的工作單位(是資料庫恢復和併發控制的基本單位)
- 一般來書,一個程式中包含多個事務(事務,程式兩個概念)
COMMIT:提交,即提交事務的所有操作
ROLLBACK:回滾,即撤銷該事務完成的操作,回滾到事務開始狀態
2.1.2事務的ACID準則
原子性,一致性(正確性),隔離性和持續性
2.2故障的種類(處理非預期的)
- 事務內部的故障:此處專指非預期的故障
- 系統故障:是指造成系統停止運行的任何事件,使得系統要重新啟動,不破壞數據數。故障時,正在進行的事務會撤銷,已完成的在緩存區的事務要重做
- 介質故障:又叫做硬故障,破壞最大
- 電腦病毒
2.3恢復的實現技術
資料庫恢復的原理十分簡單:建立冗餘—數據轉儲和建立日誌文件
2.3.1數據轉儲
- 靜態轉儲:系統停止事務進行轉儲。期間不能操作資料庫
- 動態轉儲:轉儲和事務併發操作。但是數據會過時,一般的情況一個完整的副本 = 轉儲 + 日誌文件
- 還有海量和增量轉儲
2.3.2日誌文件
-
登記的次序嚴格按照併發事務執行的時間次序
-
先寫日誌文件,再寫資料庫
2.4恢復策略
-
事務故障恢復:利用日誌文件撤銷。反向掃描,進行逆操作,知道讀到事務的開始標記
-
系統故障恢復:先站隊列,正向掃描日誌,有開始和提交->重做;只有開始->撤銷;有開始和回滾->什麼也不去。再對撤銷隊列中的事務進行撤銷操作(見上)
-
介質故障恢復:重裝資料庫然後重做已完成的事務(管理員接入)
2.5具有檢查點的恢復技術
再日誌文件中加入新記錄—檢查點記錄,增加一個重新開始文件。讓恢復子系統在登錄日誌文件期間動態維護日誌。
- 建立檢查點時刻所有正在執行的事務清單
- 這些事務最近一個日誌記錄的地址(正在進行中開始最早的)
2.6資料庫鏡像
處理介質故障,是提高資料庫可用性的解決方案,提高併發性的辦法
正常運行時,主盤自動複製到副盤;發生故障後副盤晉升為主盤並自動複製到新的副盤上。
三、併發控制
事務是併發控制的基本單位
3.1併發的概述
併發控制的目的是為了保證事務的隔離性和一致性
併發操作有可能會帶來丟失修改,不可重覆讀,讀"臟數據"的問題
針對上述的問題採取了各種方法
3.2封鎖
事務T對某個數據對象操作前,像系統發出申請,對其加鎖,加鎖後事務會對數據有一定的控制
- 排他鎖、寫鎖、X鎖:只允許讀取和修改,其他事務不能對其加任何鎖,直到釋放
- 共用鎖、讀鎖、S鎖:可以讀但不能修改,其他事務可以對其加S鎖
3.3封鎖協議
- 一級封鎖:事務T修改前+X鎖,直到事務結束才釋放
- 二級封鎖:在一級的基礎上,事務T讀前+S鎖,讀完釋放
- 三級封鎖:在一級的基礎上,事務T讀前+S鎖,直到事務結束才釋放
不同級別的封鎖可解決不同的問題
3.4活鎖和死鎖
3.4.1活鎖
事務有了優先順序,會插隊 =>先來先服務
3.4.2死鎖
事務之間形成閉環
- 死鎖的預防
一次封鎖法:一次將所有使用數據全部枷鎖
順序封鎖法:預先對數據對象排序
- 死鎖的診斷與解除
超時法:規定等待時間,若超過等待時間,則認為是死鎖
等待圖法:選擇代價最小的一個事務撤銷
3.5併發調度的可串列性(瞭解)
3.5.1可串列化調度
多個事務併發是正確的<=>其結果與某一次串列執行的結果相同,即為可串列化調度
3.5.2衝突可串列化調度
衝突可串列化調度是可串列化的充分條件
只有對同一個數據的讀寫和寫寫會產生
- 已知調度,判斷是否衝突
1.畫有向圖(T,E) T:為事務個數;E:若Ri/Wi/Wi(x)在Wi/Ri/Wi(X)前則TIi—Tj
2.若有迴路,則不是衝突可串列化調度;反之是
3.若為衝突可串列化調度,找一個入度為0的事務將其以及和其相連的邊刪去,再找一個入度為0的事務...重覆
4.最後按照原調度順逆順序對每個事務內部進行排序
3.6兩段鎖協議
事務分成兩個階段對數據項進行加鎖和解鎖
- 獲得封鎖(擴展階段):事務申請獲得任何數據項上任何類型的鎖
- 釋放封鎖(收縮階段):事務釋放任何數據項上任何類型的鎖
註:遵循兩段鎖是可串列的充分條件。遵循兩段鎖也可能出現死鎖
3.7封鎖的粒度
封鎖粒度,即封鎖對象的大小(邏輯單元,資料庫,元組...)
- 封鎖粒度越大,資料庫能封鎖的數據單元越少,併發度就越小,開銷小
- 封鎖粒度越小,資料庫能封鎖的數據單元越多,併發度就越高,開銷大
3.7.1多粒度封鎖
多粒度封鎖允許每個結點被獨立地i加鎖。多粒度封鎖中的鎖有向下繼承關係
檢查一個數據是否可以加鎖:先檢查自己,再看上下級的數據結點
3.7.2意向鎖
如果對一個結點加意向鎖,則說明該鎖下層正在被加鎖;對任一結點加鎖,其上層結點都要加意向鎖。可以提高檢查效率
三種意向鎖
- 意向共用鎖(IS鎖):若對結點+S鎖,則上層結點+IS鎖
- 意向排他鎖(IX鎖):若對結點+X鎖,則上層結點+IX鎖
- 意向共用排他鎖(SIX鎖):若對結點+SIX鎖,則它對同一個下結點+S和X鎖(對同一個數據又讀又修改,不排他)![1685974462931]
註意:是否排他是對不同的事務來說