範文齋

內存數據庫的架構設計及原理

摘 要 恢復技術是保證內存數據庫運行可靠的關鍵,傳統的基於日誌的恢復技術會對系統性能產生很大影響。本文提出內存數據庫系統快速日誌恢復技術,它控制日誌的產生數量,使得在系統崩潰並重新啓動時,能以最快的速度恢復到系統崩潰前的最近一致點上。

內存數據庫的架構設計及原理

關鍵字 內存數據庫;日誌恢復;檢查點

0 引言

內存數據庫(MMDB)把數據全部或者當前工作部分駐留在內存中,消除了傳統磁盤數據庫系統中I/O瓶頸,極大的提高了系統的性能和吞吐量,但是由於所有操作都作用於內存數據庫的主拷貝上,數據庫及易遭到操作系統和應用軟件造成的破壞,因此MMDB的恢復技術十分關鍵。日誌(Logging)恢復是傳統的MMDB恢復技術之一,它能滿足當前MMDB系統對事務響應和快速系統恢復的要求,但是在大量事務吞吐量情況下造成的日誌暴增所帶來很大問題,會對MMDB性能產生很大影響。

本文提出MMDB系統快速日誌恢復技術,它是在不阻礙系統正常運行的情況下,控制日誌的產生數量,使得在系統崩潰並重新啓動時,能以最快的速度恢復到系統崩潰前的最近一致點上。

1 系統構架設計

快速恢復模型的整體架構如圖1所示。事務處理模塊負責根據用戶請求產生事務,並由事務管理器調度。事務管理器將負責各個事務的日誌記錄,交給日誌產生規則處理。檢查點模塊根據日誌產生規則才產生的日誌數量動態調整檢查點啓動時間。當日志記錄數達到一定值時,檢查點程序啓動。它讀取所有日誌記錄,交給日誌篩選器。日誌篩選器根據篩選算法,從當前所有日誌項中篩選出實際有效的日誌記錄,並將這些有效日誌記錄交給日誌分發結點。日誌分發結點主要做兩項工作:第一是它將日誌傳送給日誌磁盤管理器,由其負責將日誌回寫到日誌磁盤上,第二是日誌分發結點將日誌傳送給備份更新發生器。備份更新發生器利用快速恢復算法,觸發各類更新操作,根據日誌更新磁盤上的數據。

圖1 快速恢復模型的整體架構

該快速恢復模型具有如下的特點:

①快速恢復模型以日誌驅動方式做檢查點,異步更新磁盤上的備份數據鏡象。

②系統只維護全局Redo日誌,以Redo日誌來驅動備份更新發生器,各個事務維護私有Redo日誌和Undo日誌在事務提交時將私有Redo日誌寫入全局Redo日誌中。

③使用日誌篩選算法,近一步減少Redo日誌的數量,提升檢查點程序的性能。

④備份數據鏡象只反應己提交事務的更新狀態,因此在系統重載時不需要回退未提交的事務。

⑤快速恢復算法爲併發重載算法。在系統恢復過程中,能繼續接受新事務的請求。

2 快速日誌驅動檢查點

快速日誌驅動檢查點的基本思想是,檢查點程序仍然由日誌來驅動,根據讀取到的日誌項來更新數據鏡象上的內容,維持數據鏡象與內存中數據庫的基本同步。但是,與以往日誌驅動檢查點算法不同的是,它通過日誌產生規則和日誌篩選算法兩個策略克服了以往日誌驅動檢查點算法中日誌數量可能過快增長的問題。

2.1 日誌產生規則

快速日誌驅動檢查點算法中設立的日誌產生規則是:系統中日誌被分爲全局日誌和私有日誌兩類。系統只維護全局Redo日誌,而不維護Undo日誌,由事務自身維護私有的Redo日誌和Undo日誌。在事務提交時,依照事務提交的先後順序,將事務的私有Redo日誌添加到全局Redo日誌中。因此,在事務運行過程中,會產生Redo日誌和Undo日誌。Redo日誌用於在系統恢復過程中,重做已提交事務。而Undo日誌用於在事務Abort時回退事務,或者在系統恢復過程中回退未提交的事務。如果恢復模型的設計能夠保證系統恢復過程中,沒有需要回退的未提交事務,那麼系統只需要讀取Redo日誌而不需要讀取Undo日誌。因而系統只需要維護全局的Redo日誌,而不需要維護Undo日誌,將Undo日誌交給事務自身維護,Undo日誌只用於事務自身Abort時回退。這樣就可以減少全局日誌的總量。

圖2具體描述了全局日誌和私有日誌的使用。在事務T1,T2, T3的內存空間內,各自維護自己的私有Redo日誌和Undo日誌。在非易失性內存(SRAM)上,MMDB系統開闢全局Redo日誌緩衝區,讓事務在提交時事務的私有Redo日誌寫入該緩衝區。檢查點程序將定期讀取日誌緩衝區中的數據,將日誌寫入磁盤,並驅動檢查點程序更新磁盤鏡象數據。

圖2 全局日誌和私有日誌

各事務將按如下階段操作日誌:

①事務啓動時,需要在事務的各自空間內建立私有Redo日誌和私有Undo日誌,並將在私有Redo日誌中寫入事務啓動記錄。

②事務運行過程中,事務的每次更新操作,需要在私有Redo日誌中添加Redo記錄,並在私有Undo日誌中添加Undo記錄。

③事務提交時,需要按如下步驟完成:

㈠向事務的私有Redo日誌內添加事體Commit記錄。

㈡將事務的私有Redo日誌寫入全局Redo日誌中。

㈢釋放事務的私有Redo日誌和私有Undo日誌,釋放事務所佔用的其他資源,完成提交。

④事務Abort時,需要按照如下步驟完成:

㈠事務反向掃描私有Undo日誌,回退事務的更新操作。

㈡釋放事務的私有Redo日誌和私有Undo日誌,釋放事務所佔用的其他資源,結束事務。

由此可見,事務只在提交時纔將私有Redo日誌寫入全局日誌緩衝區。從而也保證了,檢查點程序運行時,只看到己提交事務的Redo日誌,磁盤上的數據鏡象也只反映已提交事務的更新操作。

2.2日誌篩選算法

用日誌產生規則能明顯減少日誌產生的數量,但是在更新事務吞吐量較大的情況下,檢查點程序從全局日誌緩衝區讀取Redo日誌時,仍然可能會面對Redo日誌量過大的問題。產生的原因是這樣的:如果對一份數據做兩次更新操作,那麼兩個事務各自產生一條對同一物理地址上值更新的物理日誌,但只有第2次更新事務產生的日誌爲有效的。本文利用日誌篩選算法來避免日誌量過大問題。該算法認爲,當LOG1(T1,addr,valuel)和LOG2(T2, addr, value2)按照事務的提交順序通過日誌篩選器時,當T1的提交時間在T2提交時間前,那麼只有LOG2(T2, addr, value2)被認爲是有效,而LOGI(T1,addr,valuel)被忽略。日誌篩選器需要關注物理日誌中被修改值的地址的相關性。對相同修改地址的物理日誌依據日誌的提交順序進行篩選。爲加快日誌的篩選速度,將全日誌緩衝區劃分爲多個區域,這將日誌記錄中操作地址具有空間相關性的日誌按照所屬事務的提交順序聚合在一個區域內,能加速日誌篩選算法的篩選速度。使得在篩選過程中,只需在小範圍內(也就是一個區域)搜索可以被篩選的日誌。當全局Redo日誌緩衝區中的某一個區域滿時,就喚醒檢查點程序,將這一區域中的Redo日誌寫入日誌磁盤,並驅動備份更新發生器更新磁盤上的數據鏡象

3 快速恢復算法

在系統崩潰後,MMDB系統需要通過恢復過程,將數據庫恢復到崩潰前的.最近一致點上。在系統恢復過程中,重載程序將數據從磁盤鏡象上加載到MMDB系統中,同時根據日誌,重做(Redo)或者取消(Undo)部分事務,來恢復數據庫的一致性。

快速恢復算法如下算法步驟:

①當系統崩潰重啓時,先啓動日誌檢查和分配程序,檢查非易失性內存(SM)中提供給事務提交時用於寫入私有Redo日誌的緩衝區中是否有完整寫入的Redo日誌。如果有完整的Redo日誌,則日誌檢查和分配程序將這些完整的日誌分配到全局Redo日誌緩衝區的不同區域中。

②統計全局Redo日誌緩衝區中的日誌數量,並標記這些日誌。當前Redo日誌緩衝區中的日誌將被用於恢復內存中MMDB系統的一致性,同時也要用於維護磁盤上數據鏡象的一致性。

③恢復程序從磁盤數據鏡象上加載一些重要的系統表以後,MMDB系統可以啓動,並可以接受新事務的請求。系統的正常事務處理和系統恢復過程同時進行。

④觸發檢查點程序從全局Redo日誌緩衝區中讀取日誌,驅動備份更新發生器更新磁盤上的數據鏡象。在這過程中,驅動備份更新發生器向緩衝區管理區詢問將被更新的記錄所在的鏡象數據頁面是否已經被加載到內存中。如果己經被加載,則不但需要更新磁盤上的鏡象數據頁,還需要更新內存中的數據頁面。如果全局Redo日誌緩衝區中所有被標記的日誌都已經被用於驅動備份更新發生器,那麼此時備份更新發生器可以告訴重載程序恢復工作已經完成,沒有其他鏡象頁面需要更新。

⑤MMDB在接受新事務的請求時,對於事務的所訪問到的數據,如果數據還沒有被加載內存中時,則系統向重載程序要求將所需數據從磁盤鏡象上加載到內存中。此時,重載程序先要檢查要求加載的數據頁面是否會被備份更新發生器修改。如果是,則需要等待備份更新發生器更新鏡象頁面後再加載到內存中,否則就直接將鏡象頁面加載到內存中。

⑥當所有鏡象都加載完成後,MMDB系統恢復過程結束。

4 結束語

恢復技術是保證內存數據庫運行可靠的關鍵技術。傳統日誌恢復技術由於存在產生過多不必要的日誌的缺點,本文研究了一種新的日誌恢復技術來儘可能的減少日誌數量,並在此基礎上提出了快速日誌恢復算法。本文提出的恢復技術算法簡單可以大大的節約系統的資源。然而,內存數據庫恢復是一個十分複雜而龐大的技術,所以該方法還有待完善。

參考文獻

[1]劉雲生,潘琳. 實時數據庫系統的內存數據庫組織與故障恢復[J]. 小型微型計算機系統.2005 22(5):611-613

[2]劉雲生,廖國瓊,付蔚. 一個支持實時內存數據庫的恢復系統[J]. 小型微型計算機系統.2003 24(3):460-464

[3] 龍玉國 耿協堅. 嵌入式實時內存數據庫恢復子系統的設計[J]. 計算機工程與應用.2004 17:179-180

[4] 宋廣華,楊長生. 基於混合日誌的內存數據庫恢復子系統[J]. 浙江大學學報(理學版).2001 28(3):164-168