閱讀屋>資料庫作業系統> 記憶體資料庫的架構設計及原理

記憶體資料庫的架構設計及原理

記憶體資料庫的架構設計及原理

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

  關鍵字 記憶體資料庫;日誌恢復;檢查點

  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

【記憶體資料庫的架構設計及原理】相關文章: