資料庫管理系統中非常重要的一部分。
按照一定的規則將語句變化成關係代數以後進行優化
對代數優化後的查詢樹使用比較好的方法進行查詢。
主要是對連線運算進行優化
備份(完整備份+差異備份)+日誌
事務的特性由dbms負責維護,因此對於需要使用事務來進行執行的sql語句,我們要定義在事務中。
如果沒有顯式地建立事務,那麼dbms會把每一條語句當作乙個事務。
日誌儲存在非揮發儲存器中。
提交(commit)規則:在提交事務之前修改後的資料a.i必須寫到非揮發儲存器中
先記後寫(log ahead)規則:在修改資料前必須把被修改資料的舊值b.i寫到日誌中
操作:
更新策略
a.i->db before commit
tid->active list
…b.i->log
a.i->db
…tid->commit list
delete tid from active list
如果發生故障會啟動重啟動恢復:檢查tid目前所處的狀態
commit list
active list
operation
noyes
undo,delete tid from active list
yesyes
delete tid from active list
yesno
nothing to do
a.i->db after commit
tid->active list
…a.i -> log
…tid->commit list
all:a.i -> db
delete tid from active list
重啟動恢復:
commit list
active list
operation
noyes
delete tid from active list
yesyes
redo, delete tid from active list
yesno
nothing to do
這種策略的併發度更高。可以推遲加排他鎖的時間。
a.i -> db concurrently with commit
tid -> active list
…a.i,b.i -> log
…a.i->db(partially done by 後台程序 when hard disk is free)
…tid->commit list
a.i->db(completed)
delete tid from active list
重啟動恢復:
commit list
active list
operation
noyes
undo, delete tid from active list
yesyes
redo, delete tid from active list
yesno
nothing to do
總結redo
undo
a.i->db before commit
noyes
a.i->db after commit
yesno
a.i->db concurrently commit
yesyes
異地更新(有缺點,沒有被推廣)
nono
併發:支援多個事務同時訪問資料庫
原因:
併發控制:對事務的併發執行加以管理
任意併發的後果:
可序列化:併發執行事務以後的結果如果和某種序列執行的結果相同,則說這種併發執行是可序列化的,即是正確的。
如果使用者把一些事務同時提交併發執行,則要求這些事務誰先執行後執行是無所謂的,即預設所有可序列化的結果都是正確的。
併發控制策略
通過併發控制使得併發事務的執行是可序列化的
封鎖法通過鎖對事務強行序列化
定義1:在乙個事務裡面,如果所有的加鎖請求都在鎖釋放之前,稱這個事務是乙個兩階段事務,符合兩階段加鎖協議。(增長階段-縮減階段)
定義2:先得到鎖再訪問資料物件,那麼這個事務就是well-formed(合式的)
定義:如果每個事務是合式的兩階段事務,那麼這些事務一定是可序列化的。
如果事務是合式的並且是兩階段事務,並且在事務結束的時候釋放更新鎖,那麼這個事務是可序列化的、可恢復的。不會出現恢復的時候的多公尺諾效應
如果在事務結束的時候釋放所有的鎖,那麼稱這個事務滿足嚴格的兩階段加鎖協議。nlx
nlyyx
yn資料庫效率比較低。 nl
sxnly
yysy
ynxy
nn nl
suxnl
yyyy
syyy
nuyy
nnxy
nnn系統的併發度較高。
死鎖/活鎖(飢餓)
活鎖/飢餓:優化排程策略
死鎖: 治:
檢查時機:每次出現新的等待關係的時候/週期檢查
解決方法:選擇乙個犧牲者(目前擁有鎖最小的/滾回代價最小的事務)。然後等待環路上的其他事務都執行結束以後再執行該事務。
防作業系統中的解決方案:
在資料庫系統中不現實
多粒度加鎖
等待死亡協議:
如果ta需要申請乙個鎖,這個鎖已經被tb占領了:
因此不可能重現迴圈等待,解決了死鎖和活鎖問題
受傷等待協議:
如果ta需要申請乙個鎖,這個鎖已經被tb占領了:
資料庫原理及應用 2
單一的資料結構 關係 現實世界的實體以及實體間的各種聯絡均用關係來表示 邏輯結構 二維表 從使用者角度,關係模型中資料的邏輯結構是一張二維表 建立在集合代數的基礎上一組具有相同資料型別的值的集合 笛卡爾積可表示為乙個二維表 表中的每行對應乙個元組,表中的每列對應乙個域 d1 d2 dn的子集叫作在域...
資料庫原理及應用 概述
資料 資料是是載荷資訊的 是對現實世界中客觀事物的符號表示,是資訊存在的形式 資料庫資料庫是長期儲存在計算機內,有組織的,統一管理的相關資料的集合 資料庫管理系統 dbms dbms是位於使用者和作業系統之間的一層資料管理軟體,它為使用者或應用程式提供訪問資料庫的方法,包括資料庫的建立,查詢,更新等...
資料庫 資料庫索引原理
正確的建立合適的索引 是提公升資料庫查詢效能的基礎 4.b tree 在兩大引擎中的體現 5.索引的原則 索引是為了加速對錶中資料行的檢索而建立的一種分散儲存的資料結構。索引能極大的減少儲存引擎需要掃瞄的資料量 索引可以把隨機io變成順序io 索引可以幫助我們在進行分組 排序等操作時,避免使 用臨時...