天天看點

資料庫系統概念》18-事務

事務是一個程式執行單元,它通路且可能更新不同的資料項。事務對于實作資料庫中的資料更新是很關鍵的,隻有這樣才能保證并發執行與各種故障不會導緻資料庫處于不一緻狀态。

一、事務具有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

繼續閱讀