国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

空間實(shí)時內(nèi)存數(shù)據(jù)庫恢復(fù)機(jī)制研究與實(shí)現(xiàn)

2013-07-25 02:28:58郭麗麗
關(guān)鍵詞:管理器磁盤檢查點(diǎn)

杜 曄,郭麗麗

(1.中國科學(xué)院光電研究院,北京100094;2.中國科學(xué)院空間應(yīng)用工程與技術(shù)中心,北京100094;3.中國科學(xué)院研究生院,北京100094)

0 引言

空間應(yīng)用對數(shù)據(jù)管理的實(shí)時性和可靠性有著較高的要求。傳統(tǒng)數(shù)據(jù)庫旨在處理持久穩(wěn)定的數(shù)據(jù),無法滿足實(shí)時應(yīng)用的需要,而內(nèi)存數(shù)據(jù)庫 (Main Memory Database,MMDB)由于其工作版本常駐內(nèi)存,所有數(shù)據(jù)的存取和管理在內(nèi)存中完成,訪問速度比傳統(tǒng)數(shù)據(jù)庫高1-2個數(shù)量級,對于實(shí)時性要求較高的空間數(shù)據(jù)管理系統(tǒng)是一個較好的選擇。然而由于內(nèi)存具有易失性,內(nèi)存數(shù)據(jù)庫必須在磁盤或其他非易失性存儲器存儲器中保存?zhèn)浞?,以防止程序錯誤、系統(tǒng)掉電等系統(tǒng)故障帶來的數(shù)據(jù)損失。但備份所需要的大量磁盤I/O操作將影響系統(tǒng)效率,因此高效的恢復(fù)策略是內(nèi)存數(shù)據(jù)庫的關(guān)鍵技術(shù)之一。目前較廣泛應(yīng)用的是用基于日志和檢查點(diǎn)的方法來對內(nèi)存數(shù)據(jù)庫進(jìn)行恢復(fù)。為了減少日志的數(shù)量,常采用本地更新 (in Place Update)的方式來對數(shù)據(jù)進(jìn)行操作,記錄日志時僅需要記錄被修改數(shù)據(jù)的后像(after image),即Redo日志。同時為了減少系統(tǒng)恢復(fù)所需要的日志數(shù)量,使用檢查點(diǎn)將MMDB備份到磁盤。

Swallow是為空間應(yīng)用研發(fā)的實(shí)時內(nèi)存數(shù)據(jù)庫,本文針對Swallow內(nèi)存數(shù)據(jù)庫結(jié)構(gòu),研究并設(shè)計(jì)了一個基于日志驅(qū)動修改、影子頁面技術(shù)、模糊檢查點(diǎn)思想的內(nèi)存數(shù)據(jù)庫恢復(fù)機(jī)制,主要包括:設(shè)計(jì)了基于日志驅(qū)動修改的事務(wù)執(zhí)行算法,減少了需記錄日志的數(shù)量并提高了事務(wù)故障的恢復(fù)效率;設(shè)計(jì)了日志快速提交算法以提高事務(wù)并發(fā)度;設(shè)計(jì)了系統(tǒng)的檢查點(diǎn)策略,減少系統(tǒng)恢復(fù)需要的日志量以及檢查點(diǎn)運(yùn)行時對系統(tǒng)效率的影響。在此恢復(fù)機(jī)制下,實(shí)現(xiàn)了Swallow內(nèi)存數(shù)據(jù)庫數(shù)據(jù)和日志的快速備份以及在內(nèi)存數(shù)據(jù)庫出現(xiàn)事務(wù)故障和系統(tǒng)故障時的快速恢復(fù)策略。最后通過實(shí)驗(yàn)證明了該恢復(fù)機(jī)制的高效性。

1 Swallow恢復(fù)模型概述

Swallow的主要模塊有事務(wù)管理器,內(nèi)存池頁面管理器,存儲管理模塊和恢復(fù)模塊。內(nèi)存中的數(shù)據(jù)以分頁的形式存在,通過內(nèi)存池頁面管理器進(jìn)行統(tǒng)一的管理和維護(hù),在此之上提供了數(shù)據(jù)庫的常用接口 (如表、關(guān)鍵字和數(shù)據(jù)的增刪查改等),同時頁面管理器維護(hù)一個臟頁表,記錄了從上次檢查點(diǎn)之后被更新過的頁面。系統(tǒng)通過多線程來支持多個事務(wù)并發(fā),并由事務(wù)管理器在系統(tǒng)中維護(hù)一個事務(wù)信息表,系統(tǒng)每接收一個新的事務(wù)線程,都在事務(wù)信息表里記錄相關(guān)信息。存儲管理模塊負(fù)責(zé)MMDB和磁盤數(shù)據(jù)庫文件的數(shù)據(jù)交換?;謴?fù)模塊包括全局日志的寫入,檢查點(diǎn)的執(zhí)行以及故障后的系統(tǒng)恢復(fù)。

圖1是Swallow的恢復(fù)模型。事務(wù)對MMDB的修改是由日志驅(qū)動的,某個事務(wù)要對MMDB中的頁面進(jìn)行更新操作時,并不直接對MMDB進(jìn)行修改,只是將其Redo日志記錄在其對應(yīng)的私有日志區(qū)里,事務(wù)進(jìn)入提交階段后,將其對應(yīng)的私有日志放入全局日志緩沖,寫日志線程定期將全局日志緩沖刷新到磁盤的日志文件里,事務(wù)提交完成后由頁面管理器根據(jù)日志對MMDB進(jìn)行相應(yīng)修改。若事務(wù)尚未進(jìn)入提交階段就夭折則直接釋放其對應(yīng)的私有日志,不對MMDB進(jìn)行操作,不需記載Undo日志。

圖1 系統(tǒng)恢復(fù)模型

根據(jù)Redo日志的先寫日志 (write ahead logging,WAL)規(guī)則,事務(wù)提交時應(yīng)將該事務(wù)的所有日志都寫入日志中,才能進(jìn)行事務(wù)對數(shù)據(jù)庫的更改,這意味著事務(wù)提交必須有I/O過程,對實(shí)時性較強(qiáng)的內(nèi)存數(shù)據(jù)庫系統(tǒng)將是很大的性能瓶頸,此處的設(shè)計(jì)參考了預(yù)提交協(xié)議和成組提交協(xié)議,在事務(wù)私有日志已放入全局日志緩沖后即對MMDB進(jìn)行更新,然后釋放鎖,以提高了內(nèi)存事務(wù)的并發(fā)度。但在將MMDB的數(shù)據(jù)刷新到外存時仍需要遵守WAL規(guī)則,即在一個檢查點(diǎn)開始前需要將已提交事務(wù)的日志刷新到磁盤日志文件。

檢查點(diǎn)操作是為了減少恢復(fù)時需要讀取的日志數(shù)量,將內(nèi)存數(shù)據(jù)庫中的臟頁刷到磁盤數(shù)據(jù)庫文件進(jìn)行持久性備份的過程。靜態(tài)檢查點(diǎn)要求檢查點(diǎn)過程中系統(tǒng)處于完全停滯狀態(tài),對實(shí)時性要求較強(qiáng)的空間實(shí)時內(nèi)存數(shù)據(jù)庫這是無法接受的。傳統(tǒng)的模糊檢查點(diǎn)不對待刷新的臟頁上鎖,檢查點(diǎn)過程中事務(wù)對MMDB的頁面可讀寫,這樣保持的磁盤備份極易違反WAL規(guī)則。Swallow的檢查點(diǎn)設(shè)計(jì)為與事務(wù)并發(fā)進(jìn)行,檢查點(diǎn)對頁面加讀鎖,保證事務(wù)的一致性;同時為了在檢查點(diǎn)過程中減少對事務(wù)的影響,在檢查點(diǎn)執(zhí)行過程中,若事務(wù)需要訪問的頁面被檢查點(diǎn)鎖住,則頁面管理器復(fù)制一個當(dāng)前頁面并記錄為該頁面的影子頁面,此后事務(wù)對該頁面的修改都在影子頁面里進(jìn)行,等到檢查點(diǎn)完成后,將對應(yīng)的影子頁面替代原頁面即可。當(dāng)系統(tǒng)中臟頁數(shù)量達(dá)到一個閾值后,頁面管理器喚醒檢查點(diǎn)線程進(jìn)行檢查點(diǎn)操作。檢查點(diǎn)完成后,在日志中記錄新的重做起點(diǎn)。由于檢查點(diǎn)是事務(wù)一致的,系統(tǒng)故障后,裝入磁盤的數(shù)據(jù)庫文件并利用讀取的磁盤日志文件從重做起點(diǎn)對MMDB進(jìn)行Redo操作即可恢復(fù)到一個最近的一致性狀態(tài)。

這個恢復(fù)模型的特點(diǎn)有:僅需要記載Redo日志,事務(wù)失敗則直接丟棄日志,無需回滾操作,因此對于事務(wù)故障的恢復(fù)是實(shí)時的,且日志驅(qū)動的修改方式保證事務(wù)在提交前不直接在MMDB中修改數(shù)據(jù),事務(wù)讀寫的并發(fā)性得到了提高;事務(wù)對MMDB的修改采取預(yù)提交方式,當(dāng)私有日志放入全局緩沖即可對MMDB進(jìn)行修改,減少了傳統(tǒng)提交方式需要等到日志寫到磁盤后才能修改MMDB的I/O需要;利用全局日志緩沖和成組提交方式減少了日志帶來的磁盤I/O;檢查點(diǎn)的設(shè)計(jì)利用了影子頁面,結(jié)合了事務(wù)一致性檢查點(diǎn)和模糊檢查點(diǎn)的優(yōu)點(diǎn),減小了檢查點(diǎn)過程對事務(wù)的正常執(zhí)行的影響。

2 主要數(shù)據(jù)結(jié)構(gòu)和算法

2.1 主要數(shù)據(jù)結(jié)構(gòu)

(1)臟頁表:MMDB中的每個頁面具有一個外頁頭,存儲了該頁的相關(guān)信息 (如頁號、是否為臟頁,影子頁面指針等),內(nèi)存池頁面管理器通過外頁頭來對頁面進(jìn)行組織。內(nèi)存池中維護(hù)了一個臟頁表,當(dāng)頁面被修改后即將該頁的臟頁位置1并加入臟頁表。在檢查點(diǎn)線程將臟頁刷入磁盤后,將臟頁位置0。臟頁表中的所有頁面將在下一次檢查點(diǎn)的時候刷入磁盤數(shù)據(jù)庫文件。

(2)事務(wù)信息表:事務(wù)管理器每一個新接收的事務(wù)將其加入事務(wù)信息表,表中記錄了事務(wù)的標(biāo)識號TransID,事務(wù)狀態(tài)標(biāo)識TransState和日志頭指針,其中事務(wù)狀態(tài)包括1開始,2提交,3夭折,4完成。日志頭指針指向事務(wù)的私有日志。

(3)事務(wù)私有日志:圖2是事務(wù)日志的格式,事務(wù)的日志共有3種類型:事務(wù)開始 (TransBeginLog),Redo節(jié)點(diǎn)(TransOperationLog)和事務(wù)提交 (TransCommit)。TransBe-ginLog中記錄了事務(wù)的ID號以及日志的長度 (LogLength);TransCommitLog中記錄了事務(wù)完成時的時間戳。事務(wù)進(jìn)行的Redo日志其實(shí)是一個數(shù)據(jù)操作鏈表,每個鏈表元素是一個TransOperationLog結(jié)構(gòu)體,記錄了這個操作的類型及相關(guān)數(shù)據(jù)。事務(wù)執(zhí)行時,為每一個事務(wù)建立一個鏈表,記錄下事務(wù)需要對數(shù)據(jù)庫進(jìn)行的所有修改,當(dāng)事務(wù)提交時,鏈表中的操作會被依次執(zhí)行,當(dāng)事務(wù)夭折時,刪除鏈表。

圖2 事務(wù)日志格式

(4)全局日志緩沖:全局日志是一個臨界區(qū)資源,提交的事務(wù)線程對其進(jìn)行同步訪問。事務(wù)將私有日志掛載到全局日志鏈時需先獲得其寫鎖,不同事務(wù)按照提交的先后順序?qū)⑺接腥罩炬湌燧d到全局日志鏈上去,這保證了數(shù)據(jù)庫狀態(tài)的一致性。當(dāng)日志緩沖達(dá)到一定數(shù)量或者檢查點(diǎn)線程通知將要開始一個檢查點(diǎn)時,寫日志線程將全局日志緩沖寫入磁盤。

2.2 事務(wù)執(zhí)行算法

本系統(tǒng)采取了日志驅(qū)動修改的方式來完成內(nèi)存數(shù)據(jù)庫頁面的更新操作。對要更新的數(shù)據(jù)庫頁面,事務(wù)在提交前并不直接進(jìn)行修改,而是將所有的更新操作都記錄在私有日志里。如果事務(wù)成功提交,內(nèi)存頁面管理器根據(jù)事務(wù)的私有日志對內(nèi)存中的數(shù)據(jù)庫頁面進(jìn)行修改;如果事務(wù)失敗,則丟棄事務(wù)的私有日志,內(nèi)存數(shù)據(jù)庫不會受到任何影響。由于沒有對內(nèi)存數(shù)據(jù)庫的頁面直接進(jìn)行修改,所以不必記錄事務(wù)的Undo日志。

系統(tǒng)接收了一個新的事務(wù)后,將其加入事務(wù)信息表,由TransState標(biāo)識事務(wù)的狀態(tài),事務(wù)開始執(zhí)行階段的算法如下:

輸入:事務(wù)ID,事務(wù)私有日志指針

輸出:執(zhí)行成功返回_OK,失敗返回_Error。

步驟1 在事務(wù)日志區(qū)寫入一條TransBeginLog;

步驟2 獲得事務(wù)要修改的頁面的鎖;

步驟3 將事務(wù)對頁面的修改操作即TransOperationLog掛到事務(wù)的Redo日志鏈上,將LogLength加1;

步驟4 重復(fù)2和3,如果事務(wù)正常提交,則進(jìn)入“事務(wù)提交”處理;如果事務(wù)失敗則進(jìn)入“事務(wù)夭折”處理。

“事務(wù)提交”算法描述如下:

輸入:事務(wù)私有日志指針,待掛載全局日志緩沖,當(dāng)前時間

輸出:執(zhí)行成功返回_OK,失敗返回_Error。

步驟1 在事務(wù)私有日志鏈尾部寫入一條TransCommitLog并記錄時間戳,將TransBeginLog的Loglength修改為當(dāng)前值;

步驟2 獲得全局日志緩沖的鎖,將事務(wù)的私有日志鏈掛到全局日志緩沖上;

步驟3 內(nèi)存頁面管理器根據(jù)事務(wù)的私有日志鏈將事務(wù)的所有修改執(zhí)行,修改過的頁的臟頁位標(biāo)識置為1;

步驟4 釋放事務(wù)擁有的鎖;

步驟5 將事務(wù)狀態(tài)標(biāo)識TransState標(biāo)記為提交;根據(jù)先寫日志規(guī)則,等待該事務(wù)對應(yīng)的Redo日志全部刷新到磁盤后,事務(wù)才完全成功。

按照Redo日志的規(guī)則,修改數(shù)據(jù)庫數(shù)據(jù)前應(yīng)保證相關(guān)的日志記錄都保存到了磁盤,因此,在步驟4時事務(wù)并沒有完全結(jié)束,此時使用了預(yù)提交技術(shù),在事務(wù)日志刷新到磁盤前就釋放所有的鎖,減小了事務(wù)對資源的競爭,提高了事務(wù)的并發(fā)度。

“事務(wù)夭折”算法描述如下:

輸入:事務(wù)ID,事務(wù)私有日志指針

輸出:執(zhí)行成功返回_OK,失敗返回_Error。

步驟1 將事務(wù)狀態(tài)標(biāo)識TransState標(biāo)記為夭折;

步驟2 刪除事務(wù)在內(nèi)存中的Redo日志鏈表。

2.3 日志寫入算法

全局緩沖日志寫入磁盤的時機(jī)有兩個,一是系統(tǒng)開始一個新的檢查點(diǎn)前,通知寫日志線程將所有的日志寫入磁盤,二是當(dāng)全局日志緩沖里的日志達(dá)到一定數(shù)量后成批寫入磁盤。由于每個事務(wù)開始的日志中都記載了事務(wù)日志的長度,日志寫入磁盤線程在取日志時以事務(wù)為單位取出,也就是同一事務(wù)的日志一定是在同一批被取出并寫入硬盤。為減少日志寫入磁盤線程和事務(wù)線程掛載日志時對全局日志緩沖的競爭,全局日志采取雙緩沖隊(duì)列的方式。日志寫入磁盤線程的算法為:

輸入:待寫日志緩沖隊(duì)列,待掛載日志緩沖隊(duì)列

步驟1 檢查當(dāng)前待寫日志緩沖隊(duì)列是否為空,若不空則從當(dāng)前日志緩沖隊(duì)列中取出一組日志緩沖,若為空則轉(zhuǎn)1.1;

步驟1.1檢查待掛載日志緩沖隊(duì)列是否為空,若不為空則獲得其寫鎖,將其置為待寫日志緩沖隊(duì)列,將原來的待寫日志緩沖隊(duì)列置為待掛載日志緩沖隊(duì)列,若為空則掛起;

步驟2 將取出的日志緩沖寫入外存的日志文件中;

步驟3 釋放取出的日志緩沖

步驟4 根據(jù)事務(wù)開始日志中TransID的值將事務(wù)信息表中對應(yīng)的事務(wù)狀態(tài)從提交改為完成;

步驟5 轉(zhuǎn)步驟1。

2.4 檢查點(diǎn)算法

由于檢查點(diǎn)過程涉及到大量磁盤I/O操作,檢查點(diǎn)的模式和執(zhí)行頻率對系統(tǒng)性能較大。本系統(tǒng)中,檢查點(diǎn)是非連續(xù)的,啟動的頻率由系統(tǒng)中臟頁比例決定,當(dāng)臟頁鏈中的節(jié)點(diǎn)數(shù)量與總頁面數(shù)量之比達(dá)到一個閾值后,頁面管理器喚醒檢查點(diǎn)線程進(jìn)行檢查點(diǎn)操作。

Swallow的檢查點(diǎn)方法借鑒了事務(wù)一致檢查點(diǎn)的思想和影子頁面的技術(shù),在檢查點(diǎn)進(jìn)行過程中對MMDB加讀鎖,確保事務(wù)的一致性,同時利用影子頁面來使檢查點(diǎn)進(jìn)行過程中事務(wù)對MMDB的讀寫不受影響,達(dá)到模糊檢查點(diǎn)的效果。由于事務(wù)對MMDB的更改使用日志驅(qū)動的方法,因此當(dāng)檢查點(diǎn)線程成功獲得臟頁的讀鎖時,MMDB一定處于事務(wù)一致性的狀態(tài)。檢查點(diǎn)過程中,若有事務(wù)提交的頁面仍被檢查點(diǎn)鎖住,內(nèi)存頁面管理器就復(fù)制一個被鎖住臟頁的影子頁,事務(wù)提交的修改在影子頁面上進(jìn)行,修改完后將臟頁鏈表中該臟頁的影子指針指向影子頁面,此后若還有別的事務(wù)對該頁面進(jìn)行操作,都從影子頁面進(jìn)行讀取或操作。直到檢查點(diǎn)釋放了該頁的鎖后,用相應(yīng)的影子頁替代原來的頁面,仍然置臟頁位,這樣在下一次檢查點(diǎn)時會被刷到磁盤。

檢查點(diǎn)算法如下:

輸入:全局日志緩沖,臟頁表,磁盤數(shù)據(jù)庫映像

步驟1 檢查點(diǎn)線程啟動,獲取全局日志緩沖的鎖,并記錄一條檢查點(diǎn)開始的日志BClog,以區(qū)分檢查點(diǎn)啟動前后的日志;

步驟2 釋放全局日志緩沖的鎖;

步驟3 根據(jù)WAL規(guī)則 (磁盤數(shù)據(jù)庫被更改前必須先記錄Redo日志),將BClog之前的事務(wù)日志都刷新到磁盤日志中;

步驟4 獲取臟頁表中所有臟頁的讀鎖,依次將臟頁復(fù)制到臨時緩沖區(qū),釋放讀鎖,臟頁位置0,然后將臨時緩沖區(qū)的數(shù)據(jù)刷新到磁盤數(shù)據(jù)庫的對應(yīng)頁面上;

步驟5 獲取全局日志緩沖的鎖,寫入一條檢查點(diǎn)結(jié)束的日志EClog;

步驟6 釋放全局日志緩沖的鎖;

步驟7 在日志文件的頭結(jié)構(gòu)中記錄下本次BCLog在日志文件中的位置,即LastBC;

步驟8 通知頁面管理器將所有的影子頁面替代原頁面(影子頁面的臟頁位已由事務(wù)在修改時置為1)。

至此,一個檢查點(diǎn)過程已經(jīng)完全完成。以下分析證明這個檢查點(diǎn)是事務(wù)一致的 (見圖3):

圖3 檢查點(diǎn)與系統(tǒng)故障

(1)在BCi之前已經(jīng)提交的事務(wù)T1,它的日志在檢查點(diǎn)啟動時已強(qiáng)制刷入硬盤,T1對MMDB的修改也已在BCi之前完成,檢查點(diǎn)將其產(chǎn)生的臟頁刷新到了磁盤;

(2)在BCi之前已經(jīng)啟動但是尚未提交的事務(wù)T2,在BC前并未修改MMDB,BCi后它對MMDB的修改反映在MMDB的影子頁中,因此這一次檢查點(diǎn)中不會記錄T2對MMDB的影響;

(3)在BCi之后才啟動的事務(wù)T3,與T2同理,它對MMDB的影響不會被檢查點(diǎn)所記錄。

由上可知,在檢查點(diǎn)完成之前提交的事務(wù)信息已全部由檢查點(diǎn)刷入磁盤,磁盤備份目前的狀態(tài)是BC時MMDB的一個事務(wù)一致性映像。因此在BC之前的磁盤日志文件已經(jīng)沒用了,為節(jié)省空間可將其刪除。

2.5 檢查點(diǎn)算法

對于事務(wù)故障,由于事務(wù)在提交前并未將其對數(shù)據(jù)庫的修改反應(yīng)到MMDB中而只是記錄在私有Redo日志里,因而事務(wù)故障時只要丟棄事務(wù)在內(nèi)存中的Redo日志鏈即可,并不涉及磁盤I/O或MMDB讀寫,因此恢復(fù)過程非常迅速。

對于系統(tǒng)故障,恢復(fù)包括重裝和重做兩個階段。即將磁盤中的數(shù)據(jù)庫映像加載到內(nèi)存,再根據(jù)Redo日志對數(shù)據(jù)庫做Redo操作。系統(tǒng)故障發(fā)生的時間可能在檢查點(diǎn)過程中和非檢查點(diǎn)過程中,如圖3所示。

(1)若系統(tǒng)故障發(fā)生時不在檢查點(diǎn)過程中,如圖中故障1,由檢查點(diǎn)算法可知,此時磁盤數(shù)據(jù)庫備份的狀態(tài)是ECi時的狀態(tài),也就是BCi之前提交的事務(wù)對MMDB的修改已刷新到磁盤,之后提交的事務(wù)尚未反映到磁盤中,因此將BCi作為重做的起始點(diǎn),從磁盤日志文件中讀取BCi之后的Redo日志對MMDB進(jìn)行Redo操作。

(2)如果系統(tǒng)故障發(fā)生在檢查點(diǎn)過程中,如圖中故障2,此時磁盤數(shù)據(jù)庫備份已刷入了部分在BCi后提交事務(wù)產(chǎn)生的臟頁,但并不完整,因此仍需要從BCi開始重做。

綜上,系統(tǒng)故障后恢復(fù)的重做起點(diǎn)是最近一次完整的檢查點(diǎn)的開始位置處,也就是上文我們在磁盤日志文件里記錄的LastBC。因此恢復(fù)的算法為:

步驟1 將磁盤的數(shù)據(jù)庫映像導(dǎo)入內(nèi)存;

步驟2 從LastBC處開始讀取Redo日志,根據(jù)Redo日志鏈對數(shù)據(jù)庫做Redo操作。

3 性能測試及分析

Swallow的恢復(fù)機(jī)制通過在事務(wù)提交、日志和檢查點(diǎn)上的研究與設(shè)計(jì),使得內(nèi)存數(shù)據(jù)庫在遇到事務(wù)故障和系統(tǒng)故障時能夠快速得到恢復(fù),并且該機(jī)制不會對系統(tǒng)的性能造成太大的影響,通過實(shí)驗(yàn)測試,對比了Swallow和開源內(nèi)存數(shù)據(jù)庫 FastDB、SQLite的恢復(fù)機(jī)制及系統(tǒng)性能。其中,F(xiàn)astDB有兩種運(yùn)行模式,磁盤模式和無盤模式,前者會產(chǎn)生磁盤文件,后者則不產(chǎn)生磁盤文件,僅在內(nèi)存中操作;類似地,SQLite同樣有內(nèi)存模式和磁盤模式。Swallow分別測試在恢復(fù)機(jī)制正常運(yùn)行以及關(guān)閉恢復(fù)機(jī)制,在內(nèi)存索引結(jié)構(gòu)中進(jìn)行操作時的性能情況。

測試環(huán)境:PC機(jī),Intel雙核處理器,主頻2.40GHz,內(nèi)存1G

軟件環(huán)境:

(1)自主開發(fā)的空間實(shí)時內(nèi)存數(shù)據(jù)庫系統(tǒng)Swallow、用于對比的內(nèi)存數(shù)據(jù)庫FastDB、SQLite。(2)編寫隨機(jī)數(shù)據(jù)生成程序用于產(chǎn)生實(shí)驗(yàn)數(shù)據(jù),數(shù)據(jù)內(nèi)容為Key-data記錄,單條記錄長度不大于10字節(jié) (3)編寫測試程序分別調(diào)用以上數(shù)據(jù)庫的接口進(jìn)行實(shí)驗(yàn)

實(shí)驗(yàn)方法:

(1)通過隨機(jī)數(shù)據(jù)生成器生成10000條和100000記錄分別插入數(shù)據(jù)庫,每次插入作為一個單獨(dú)的事務(wù),計(jì)算出數(shù)據(jù)庫的平均事務(wù)處理能力TPS;

(2)通過非正常退出程序來模擬系統(tǒng)崩潰,記錄恢復(fù)需要的時間。

測試結(jié)果如表1所示。

表1 內(nèi)存數(shù)據(jù)庫性能測試結(jié)果

實(shí)驗(yàn)結(jié)果可以看出,在不加入恢復(fù)機(jī)制的情況下三款數(shù)據(jù)庫的TPS在一個數(shù)量級上,但FastDB和SQLite在使用磁盤數(shù)據(jù)后性能下降非常巨大,這是頻繁的磁盤I/O帶來的。Swallow在自動進(jìn)行檢查點(diǎn)和日志記錄的情況下性能也有所下降,但相比其它兩個數(shù)據(jù)庫高出了一個數(shù)量級。在這個機(jī)制下,Swallow的系統(tǒng)故障恢復(fù)時間與FastDB和SQLite相比相差并不大,數(shù)據(jù)損失率則由事務(wù)級增加到日志成組提交的每組大小。考慮到系統(tǒng)故障的發(fā)生概率較小,而犧牲的少量數(shù)據(jù)保證了系統(tǒng)性能的大幅度改善,這個恢復(fù)機(jī)制是有著良好的表現(xiàn)的。

4 結(jié)束語

本文設(shè)計(jì)了一個空間實(shí)時內(nèi)存數(shù)據(jù)庫Swallow的恢復(fù)機(jī)制,綜合了日志驅(qū)動修改、影子頁面、預(yù)提交和模糊檢查點(diǎn)的思想,達(dá)到了日志、檢查點(diǎn)過程不影響事務(wù)并發(fā)執(zhí)行,減輕磁盤I/O對系統(tǒng)效率的影響。日志驅(qū)動修改使得系統(tǒng)無須記載Undo日志,事務(wù)故障不需要回滾即可直接恢復(fù),系統(tǒng)故障后也能迅速確定恢復(fù)起點(diǎn),在保證數(shù)據(jù)庫可靠性的同時也降低了對系統(tǒng)實(shí)時性的影響。

[1]Hector Garcia-Molina,Jeffey D Ullman,Jennifer Widom.Database systems:The complete book[M].Upper Saddle River,New Jersey:Prentice Hall,2008.

[2]WANG Shan,XIAO Yanqin,LIU Dawei,et al.Research of main memory database [J].Computer Applications,2007,27(10):2353-2357(in Chinese).[王珊,肖艷芹,劉大為,等.內(nèi)存數(shù)據(jù)庫關(guān)鍵技術(shù)研究 [J].計(jì)算機(jī)應(yīng)用,2007,27(10):2353-2357.]

[3]GAN Shan,GUO Lili.Research on access mechanism of real-time memory database systems for space:MCacheTree[J].Computer Engineering and Design,2010,31(17):3827-3830(in Chinese).[甘杉,郭麗麗.航天實(shí)時內(nèi)存數(shù)據(jù)庫存取機(jī)制MCacheTree的研究 [J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(17):3827-3830.]

[4]HUANG Lin,LU Jing,LIN Zhong.Recovery method for main memory database systems based on shadow paging[J].Computer Engineering and Design,2008(5):2470-2473(in Chinese).[黃琳,路京,林中.基于影子頁面的MMDB的數(shù)據(jù)恢復(fù)方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2008(5):2470-2473.]

[5]FENG Yuao.Fault recovery strategy research on the real-time embedded memory database ARTs-EDB[D].Wuhan:Huazhong U-niversity of Science and Technology,2008(in Chinese).[馮宇傲.嵌入式實(shí)時內(nèi)存數(shù)據(jù)庫ARTs_EDB的故障恢復(fù)策略研究[D].武漢:華中科技大學(xué),2008.]

[6]XIAO Y Y,LIU Y S,LIAO G Q,et al.Real-time commitment in one-phase for distributed real-timetransactions[J].Journal of Huazhong University of Science and Technology(Nature Science Edition),2006,34(3):1-4.

[7]CHEN Anlong.Research and implement of recovery in main memory database[D].Ningbo:Zhejiang University,2006(in Chinese).[陳安龍.內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)恢復(fù)技術(shù)的研究與實(shí)現(xiàn)[D].寧波:浙江大學(xué),2006.]

[8]QIN Xiongpai,XIAO Yanqin,CAO Wei,et al.A parallel recovery scheme for update intensive main memory database[C]//Otago:PDCAT,2008:509-516.

[9]XIAO Yingyuan,LIU Yunsheng,LIAO Guoqiong,et al.A realtime dynamic database crash recovery strategy[J].Journal of Software,2007(10):2516-2527(in Chinese).[肖迎元,劉云生,廖國瓊,等.一種實(shí)時動態(tài)數(shù)據(jù)庫故障恢復(fù)策略[J].軟件學(xué)報(bào),2007(10):2516-2527.]

[10]LI Zhengyu,CHEN Lei.Research on the testing method and performance evaluating and testing for database[J].Electronic Design Engineering,2011(2):4-6(in Chinese).[李征宇,陳磊.數(shù)據(jù)庫性能評測指標(biāo)及其測試方法研究[J].電子設(shè)計(jì)工程,2011(2):4-6.]

猜你喜歡
管理器磁盤檢查點(diǎn)
Spark效用感知的檢查點(diǎn)緩存并行清理策略①
免疫檢查點(diǎn)抑制劑相關(guān)內(nèi)分泌代謝疾病
應(yīng)急狀態(tài)啟動磁盤管理器
解決Windows磁盤簽名沖突
電腦愛好者(2019年2期)2019-10-30 03:45:31
免疫檢查點(diǎn)抑制劑在腫瘤治療中的不良反應(yīng)及毒性管理
Windows文件緩沖處理技術(shù)概述
修改磁盤屬性
磁盤組群組及iSCSI Target設(shè)置
創(chuàng)建VSAN群集
分布式任務(wù)管理系統(tǒng)中檢查點(diǎn)的設(shè)計(jì)
普安县| 东台市| 邵东县| 柳江县| 象山县| 黑水县| 亳州市| 绥德县| 庆安县| 壤塘县| 佳木斯市| 嘉黎县| 平顺县| 洪湖市| 江北区| 勃利县| 聊城市| 百色市| 舞钢市| 泗阳县| 芜湖县| 睢宁县| 鄂托克前旗| 上杭县| 永年县| 泽库县| 新兴县| 金华市| 临汾市| 盐源县| 万安县| 凉山| 崇阳县| 雷山县| 建德市| 宾阳县| 金塔县| 江阴市| 克什克腾旗| 寿宁县| 阿鲁科尔沁旗|