概述
一個事務是對資料庫進行讀和寫的一個序列。傳統資料庫(RDB)中事務有兩個明顯的特性:原子性和可串列性。原子性意指事務中的讀和寫操作可看作是對資料庫的單個原子操作。可串列性意指多個事務並發執行的效果與一次執行這些事務中的一個的效果相同。因而事務管理的任務就是保證事務的原子性和可串列性,它由兩部分組成:並發控制和恢復。並發控制涉及到多個事務對資料庫的某個公共部分進行同時存取的自動控制。恢復則涉及到將資料庫恢復到事務故障之前業已存在的狀態。
事務管理的構成
事務處理系統由事務管理器、恢復管理器、鎖管理器、死鎖管理器、快取管理器構成。
事務管理器
事務管理器負責產生事務並為其分配事務標識,那么它應該可以根據需要產生足夠多的子事務並分配足夠多的事務標識。當子事務提交時,事務管理器需要知道其父事務標識並執行一系列操作,那么,如果能從子事務標識中直接得到其父事務標識,將大大提高事務處理的效率。
恢復管理器
在嵌套事務模型中,子事務相對於父事務及兄弟事務來說,能獨立地提交,子事務的卷回也不會導致父事務及兄弟事務的卷回。如果任何一級上的(子)事務回退,則它的所有子事務均回退,不管它們是否實施了局部的提交。因此,子事務提交時,恢復管理器需要將它的日誌連結到父事務的日誌上,這就要求恢復管理器知道父事務標識。那么,如果能從子事務標識中直接得到其父事務標識,將大大提高恢復管理器的工作效率。
鎖管理器
在嵌套事務模型中,子事務一旦提交,父事務就可觀察到它作出的所有改變。父事務在子事務開始前作出的改變對子事務是可見的。子事務並發運行時,變化不向兄弟事務顯示;否則,子事務一旦提交,其變化向兄弟事務顯示。因此,子事務提交時,它將擁有的鎖轉交給父事務。當事務申請鎖時,鎖管理器負責判斷鎖的相容性:如果相容,則分配給事務相應的鎖;否則,判斷申請鎖的事務是否是擁有鎖的事務的後代,若是則可以為其分配相應的鎖,否則不能滿足它的申請要求。那么,如果能從兩個事務的標識上直接判斷出它們之間是否具有祖先一後代關係,將大大提高鎖管理器的工作效率。
死鎖管理器
新型套用要求允許事務結構中最大程度的並行性,包括兄弟事務之間的並行和父子事務之間的並行。這些導致了事務之間等待關係的多樣化,並進一步引起死鎖類型的多樣化,這無疑增加了死鎖檢測的難度。為了提高死鎖檢測的效率,儘早發現“隱藏”的死鎖,首先必須有效地表示各種等待關係。在嵌套事務模型下,死鎖管理器主要處理三種等待關係 :
(1)申請鎖的事務等待擁有鎖的事務;
(2)父事務等待所有子事務的提交;
(3)申請鎖的事務等待擁有鎖的事務的滿足下列條件的最高層的祖先:它不是申請鎖的事務的祖先。
第三種等待關係的有效表示能夠避免大量無意義的工作,但這需要找出兩個事務的最高層的非共同祖先。為了達到目的,需要對事務層次結構進行不斷的向上搜尋和比較,這是一項開銷很大的工作。那么,如果能從兩個事務的標識上直接找出它們的最高層的非共同祖先,將避免一項開銷很大的工作,從而大大提高死鎖管理器的工作效率。
快取管理器
基於對快取有效使用的考慮,快取管理器要求事務標識的存儲結構能夠對短標識和長標識提供靈活有效的支持,顯而易見,靜態結構是不合適的,需要使用靈活的動態結構。
總而言之,事務處理對事務標識的需求是:
(1)可以直接從子事務的標識得到其父事務的標識;
(2)事務標識對事務層次結構的寬度和廣度提供良好的支持(即:對寬度和廣度沒有限制);
(3)事務標識存儲結構能夠提供足夠多的事務標識(即:對事務標識的數目沒有限制);
(4)根據事務標識可以判斷兩個事務是否具有祖先一後代關係;
(5)根據事務標識可以找出兩個事務的最高層的非共同祖先;
(6)事務標識存儲結構應該靈活、長度可變,能夠充分利用存儲空間有效地存儲長標識和短標識。