1. 程式人生 > >數據庫系統概念》18-事務

數據庫系統概念》18-事務

改變 指令 視圖 class 等待時間 開始 提交 丟失 即使



事務是一個程序執行單元,它訪問且可能更新不同的數據項。事務對於實現數據庫中的數據更新是很關鍵的,只有這樣才能保證並發執行與各種故障不會導致數據庫處於不一致狀態。

一、事務具有ACID特性:即原子性、一致性、隔離性和持久性
原子性保證事務的所有影響在數據庫中要麽全部反映出來,要麽根本不反映。發生故障後數據庫不能處於事物部分執行後的狀態。
一致性保證若數據庫一開始是一致的,則事務執行後數據庫仍處於一致狀態。
隔離性保證並發執行的事務相互隔離,使得每個事務感覺不到系統中其它事務的並發執行。
持久性保證一旦一個事務提交後,它對數據庫的改變不會丟失,即使系統可能出現故障。

二、事務的並發執行提高了事務的吞吐量和系統利用率,也減少了事務的等待時間。
但多個事務在數據庫中並發執行時,可能無法再保證數據的一致性。因此系統必須控制各並發事務之間的相互作用。
由於事務是保持一致性的單元,所以事務的串行執行能保證一致性。串行調度是可串行化的,但如果許多事務的步驟交錯執行,則很難確定一個調度是否是可串行化的。確定一個事務有哪些操作、多個事務的操作如何相互作用是比較困難的。所以,通常不會考慮一個事務對某一數據項的的所有細節操作,而只考慮兩種操作:read和write。
要求事務集的並發執行所產生的任何調度的執行效果等價於由這些事務按某種串行順序執行的效果,保證這個特性的系統稱為保證了可串行化。考慮一個調度S含有I,J兩條指令,只有I和J全為read指令時,兩條指令的執行順序才是無關緊要的,而只要有至少一條是write指令時,I和J是沖突的。
如果調度S可以經過一系列非沖突指令交換轉換成S1,則稱S1是S的沖突等價。存在幾種不同的等價概念,所以可串行化分為了沖突可串行化和視圖可串行化。

三、事務並發執行所產生的調度的可串行化可以通過多種並發控制機制中的一種來加以保證。給定一個調度,可以通過為該調度構造優先圖及搜索是否無環來判定它是否沖突可串行化。還有更好的並發控制機制可用來保證可串行化。
調度必須是可恢復的,這樣如果事務a依賴於事務b,如果b中止時,a也要中止。調度也最好是無級聯的,這樣不會由於一個事務的中止引起其它事務的級聯中止。無級聯性是通過只允許事務讀取已經提交的數據來保證的。

學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan


數據庫系統概念》18-事務