專利名稱:一種支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)領(lǐng)域。當(dāng)站點(diǎn)故障發(fā)生,借助于系統(tǒng)正常運(yùn)行時(shí)記錄的日志信息將分布式實(shí)時(shí)數(shù)據(jù)庫(kù)恢復(fù)到最近的一致性狀態(tài)。
背景技術(shù):
一類應(yīng)用,如工業(yè)過(guò)程控制、電網(wǎng)調(diào)度、軍事作戰(zhàn)指揮系統(tǒng)等,需要分布式實(shí)時(shí)數(shù)據(jù)庫(kù)的支持。分布式實(shí)時(shí)數(shù)據(jù)庫(kù)是分布式數(shù)據(jù)庫(kù)和實(shí)時(shí)數(shù)據(jù)庫(kù)相結(jié)合的產(chǎn)物,是事務(wù)和數(shù)據(jù)都可以具有定時(shí)限制的分布式數(shù)據(jù)庫(kù)。在分布式實(shí)時(shí)數(shù)據(jù)庫(kù)中,事務(wù)的定時(shí)限制典型地表現(xiàn)為事務(wù)有截止期。一個(gè)實(shí)時(shí)事務(wù)若在規(guī)定的截止期后(超截止期)完成,結(jié)果將變得毫無(wú)價(jià)值(對(duì)固實(shí)時(shí)事務(wù)),甚至還可能帶來(lái)災(zāi)難性的后果(對(duì)硬實(shí)時(shí)事務(wù))。分布式實(shí)時(shí)數(shù)據(jù)庫(kù)中數(shù)據(jù)的定時(shí)限制表現(xiàn)為實(shí)時(shí)數(shù)據(jù)的有效期,實(shí)時(shí)數(shù)據(jù)僅在其有效期內(nèi)有效,過(guò)期的實(shí)時(shí)數(shù)據(jù)將變得毫無(wú)意義。為了更好地滿足事務(wù)和數(shù)據(jù)的定時(shí)限制,分布式實(shí)時(shí)數(shù)據(jù)庫(kù)通常需要內(nèi)存數(shù)據(jù)庫(kù)技術(shù)提供支持。內(nèi)存數(shù)據(jù)庫(kù)(MMDB)要求數(shù)據(jù)庫(kù)工作版本(MDB)常駐內(nèi)存,外存版本(SDB)作為內(nèi)存版本的備份。MMDB確保事務(wù)執(zhí)行過(guò)程中的所有讀、寫操作都是針對(duì)內(nèi)存版本,即事務(wù)執(zhí)行過(guò)程中無(wú)數(shù)據(jù)I/O。
分布式環(huán)境本身的復(fù)雜性加上內(nèi)存的易失性和脆弱性,使得相對(duì)于基于磁盤的集中式數(shù)據(jù)庫(kù)而言,分布式實(shí)時(shí)數(shù)據(jù)庫(kù)發(fā)生故障的可能性更大。當(dāng)系統(tǒng)故障發(fā)生,在恢復(fù)正常服務(wù)前,許多實(shí)時(shí)事務(wù)可能錯(cuò)過(guò)它們的截止期,大量實(shí)時(shí)數(shù)據(jù)將變得無(wú)效。因此故障發(fā)生后,能迅速而有效的恢復(fù)對(duì)分布式實(shí)時(shí)數(shù)據(jù)庫(kù)而言有至關(guān)重要的意義,是其具有實(shí)用價(jià)值、能夠可靠地工作的基礎(chǔ)和必備條件,也是其能真正進(jìn)入市場(chǎng)、推廣應(yīng)用的關(guān)鍵。
現(xiàn)有的數(shù)據(jù)庫(kù)故障恢復(fù)方法通?;趥鹘y(tǒng)的“靜態(tài)”恢復(fù)的思想,它要求在整個(gè)故障恢復(fù)處理過(guò)程中停止系統(tǒng)服務(wù),這顯然不能滿足分布式實(shí)時(shí)數(shù)據(jù)庫(kù)中事務(wù)和數(shù)據(jù)有定時(shí)限制的需求。此外,傳統(tǒng)的數(shù)據(jù)庫(kù)故障恢復(fù)方法采用的是順序持久日志模式,順序持久日志模式將日志記錄存儲(chǔ)在單一的日志文件中,單一的日志文件會(huì)因?yàn)閲?yán)重的訪問(wèn)競(jìng)爭(zhēng)而成為系統(tǒng)性能的瓶頸,同時(shí),日志持久存放也導(dǎo)致存儲(chǔ)空間的浪費(fèi)與日志處理時(shí)間的增加。因此,現(xiàn)有的數(shù)據(jù)庫(kù)故障恢復(fù)方法已經(jīng)不能滿足分布式實(shí)時(shí)數(shù)據(jù)庫(kù)高性能的需求。
發(fā)明內(nèi)容本發(fā)明的目的是解決現(xiàn)有數(shù)據(jù)庫(kù)故障恢復(fù)方法的低效問(wèn)題,提供一種適合分布式實(shí)時(shí)數(shù)據(jù)庫(kù)的、支持邊服務(wù)邊恢復(fù)的動(dòng)態(tài)恢復(fù)方法。
本發(fā)明提供的支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法,方法包括1)采用集成分區(qū)日志和短暫日志特性的實(shí)時(shí)日志模式即根據(jù)事務(wù)類的劃分策略,將日志存儲(chǔ)區(qū)分成對(duì)應(yīng)的不同分區(qū),屬于不同類別的事務(wù)的日志記錄被分別存儲(chǔ)在不同的日志分區(qū)。同時(shí)日志記錄并不持久保存,在本地模糊檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中,一些無(wú)用的日志記錄被刪除。
2)存儲(chǔ)介質(zhì)的組織每個(gè)站點(diǎn)的存儲(chǔ)介質(zhì)分為三層磁盤存儲(chǔ)器、非易失RAM、易失RAM(主存);本地外存數(shù)據(jù)庫(kù)(LSDB)被存儲(chǔ)在磁盤存儲(chǔ)器中;非易失RAM作為日志存儲(chǔ)區(qū),對(duì)應(yīng)于規(guī)范化分劃σ(σ定義在后文中具體給出),整個(gè)日志存儲(chǔ)區(qū)被劃分成四個(gè)獨(dú)立的子日志區(qū);本地內(nèi)存數(shù)據(jù)庫(kù)(LMDB)被存儲(chǔ)在易失性主存中,并且被分成兩個(gè)獨(dú)立的分區(qū)關(guān)鍵數(shù)據(jù)分區(qū)和一般數(shù)據(jù)分區(qū),用來(lái)分別存儲(chǔ)關(guān)鍵數(shù)據(jù)類和一般數(shù)據(jù)類;3)執(zhí)行頻率動(dòng)態(tài)可調(diào)的模糊檢驗(yàn)點(diǎn)模式采用模糊檢驗(yàn)點(diǎn)模式,在檢驗(yàn)點(diǎn)觸發(fā)時(shí)機(jī)上,不是采用固定時(shí)間間隔的周期性觸發(fā)策略,而是根據(jù)日志存儲(chǔ)區(qū)空間使用率(簡(jiǎn)記為RLU)是否到達(dá)設(shè)定的閾值α來(lái)決定是否觸發(fā)檢驗(yàn)點(diǎn)。當(dāng)RLU大于α,檢驗(yàn)點(diǎn)被觸發(fā)執(zhí)行。α的初始值可根據(jù)應(yīng)用的要求預(yù)先設(shè)定,在系統(tǒng)運(yùn)行過(guò)程中可通過(guò)修改α的值來(lái)動(dòng)態(tài)調(diào)整檢驗(yàn)點(diǎn)執(zhí)行的頻率。
4)動(dòng)態(tài)恢復(fù)策略在站點(diǎn)發(fā)生故障后的恢復(fù)處理過(guò)程中,采用了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)處理策略,其關(guān)鍵特征是關(guān)鍵數(shù)據(jù)類被首先恢復(fù),在恢復(fù)一般數(shù)據(jù)類前恢復(fù)站點(diǎn)服務(wù),然后邊服務(wù)邊恢復(fù)一般數(shù)據(jù)類,以最大限度地降低故障站點(diǎn)停止服務(wù)的時(shí)間。動(dòng)態(tài)恢復(fù)策略的具體包括如下步驟①?gòu)谋镜赝獯鏀?shù)據(jù)庫(kù)(LSDB)中將關(guān)鍵數(shù)據(jù)類裝入主存相應(yīng)數(shù)據(jù)分區(qū),本地內(nèi)存數(shù)據(jù)庫(kù)(LMDB);②消除屬于關(guān)鍵事務(wù)類的夭折的控制事務(wù)導(dǎo)致的對(duì)外部世界改變,并將關(guān)鍵數(shù)據(jù)類恢復(fù)到最近一致性狀態(tài);③恢復(fù)故障站點(diǎn)的服務(wù);④從本地外存數(shù)據(jù)庫(kù)(LSDB)中將一般數(shù)據(jù)類裝入主存相應(yīng)數(shù)據(jù)分區(qū);⑤消除屬于一般事務(wù)類的夭折的控制事務(wù)導(dǎo)致的對(duì)外部世界改變,并將一般數(shù)據(jù)類恢復(fù)到最近一致性狀態(tài)。
——上述方法1)中的日志存儲(chǔ)區(qū)的分劃方法如下1)首先將事務(wù)集合ST按事務(wù)優(yōu)先級(jí)劃分成兩個(gè)子集ST>p={Ti|Pr(Ti)>p,Ti∈ST}和ST<=p={Ti|Pr(Ti)≤p,Ti∈ST},這里,Pr(Ti)表示事務(wù)Ti的優(yōu)先級(jí);顯然,{ST>p,ST<=p}為ST的一分劃;2)通過(guò)適當(dāng)?shù)恼{(diào)整p值,使得DS(ST>p)∩DS(ST<=p)=,即{ST>p,ST<=p}為ST的一正交分劃;其中,DS(ST>p)為屬于ST>p中的高優(yōu)先級(jí)事務(wù)所存取的數(shù)據(jù)對(duì)象的集合,稱DS(ST>p)為關(guān)鍵數(shù)據(jù)類,稱ST>p為關(guān)鍵事務(wù)類;DS(ST<=p)為屬于ST<=p中的低優(yōu)先級(jí)事務(wù)所存取的數(shù)據(jù)對(duì)象的集合,稱其為一般數(shù)據(jù)類,稱ST<=p為一般事務(wù)類;3)進(jìn)一步,將ST>p劃分成兩個(gè)或兩個(gè)以上子集ST>p,>f={Ti|Fr(Ti)>f,Ti∈ST>p}和ST>p,<=f={Ti|Fr(Ti)≤f,Ti∈ST>p},這里,F(xiàn)r(Ti)代表Ti的估計(jì)執(zhí)行頻率,f為一設(shè)定的頻率值,顯然,{ST>p,>f,ST>p,<=f}是ST>p的一個(gè)分劃;類似地,將ST<=p劃分成兩個(gè)或兩個(gè)以上子集ST<=p,>f={Ti|Fr(Ti)>f,Ti∈ST<=p}和ST<=p,<=f={Ti|Fr(Ti)≤f,Ti∈ST<=p},顯然,{ST<=p,>f,ST<=p,<=f}是ST>p的一個(gè)分劃;4)令σ={ST>p,>f,ST>p,<=f,ST<=p,>f,ST<=p,<=f},則(根據(jù)定理1)σ是一個(gè)規(guī)范化分劃。
5)對(duì)應(yīng)于規(guī)范化分劃σ,將整個(gè)日志存儲(chǔ)區(qū)被劃分成四個(gè)獨(dú)立的子日志區(qū)關(guān)鍵高頻事務(wù)類子日志區(qū)、關(guān)鍵低頻事務(wù)類子日志區(qū)、一般高頻事務(wù)類子日志區(qū)和一般低頻事務(wù)類子日志區(qū),分別簡(jiǎn)記為L(zhǎng)Sch、LScl、LSgh和LSgl,它們分別用來(lái)對(duì)應(yīng)地存儲(chǔ)ST>p,>f、ST>p,<=f、ST<=p,>f和ST<=p,>=f事務(wù)類的日志記錄,即{LSch,LScl,LSgh,LSgl}是關(guān)聯(lián)規(guī)范化分劃σ的日志存儲(chǔ)區(qū)的一個(gè)分區(qū);將LSch和LScl統(tǒng)稱為關(guān)鍵日志區(qū);LSgh和LSgl統(tǒng)稱為一般日志區(qū)。
——其中實(shí)時(shí)日志記錄的類型與結(jié)構(gòu)如圖1所示,含義如下1)結(jié)合實(shí)時(shí)提交協(xié)議1PRCP,設(shè)計(jì)五種日志記錄類型Begin,Redo,Compensate,Ready和Commit,分別用“B”,“D”,“CP”,“R”和“C”來(lái)表示,其中,P-TID表示分布式事務(wù)(全局事務(wù))標(biāo)識(shí),定義為P-TID::=<Cor_Addr,N>,這里,Cor_Addr表示分布式事務(wù)的協(xié)調(diào)者的網(wǎng)絡(luò)地址;N代表分布式事務(wù)的序號(hào),在每個(gè)協(xié)調(diào)者站點(diǎn),N是單調(diào)遞增的;2)對(duì)于本地事務(wù),P-TID被置為NULL;TID為本地事務(wù)或子事務(wù)標(biāo)識(shí),定義為TID::=<Addr,SN>,這里,Addr表示本地事務(wù)或子事務(wù)所在站點(diǎn)的網(wǎng)絡(luò)地址;SN表示本地事務(wù)或子事務(wù)的序號(hào),在每個(gè)站點(diǎn)SN是單調(diào)遞增;3)用TS表示Redo或Compensate或Commit類型日志記錄創(chuàng)建時(shí)刻的邏輯時(shí)標(biāo);在每個(gè)站點(diǎn),邏輯時(shí)標(biāo)的初始值置為0,每當(dāng)一條Redo或Compensate或Commit日志記錄或檢驗(yàn)點(diǎn)日志記錄被創(chuàng)建,邏輯時(shí)標(biāo)的值增加1;4)用RID代表被更新數(shù)據(jù)對(duì)象的標(biāo)識(shí),BN表示與本地外存數(shù)據(jù)庫(kù)(LSDB)中數(shù)據(jù)頁(yè)相對(duì)應(yīng)的LSDB中數(shù)據(jù)塊的邏輯塊號(hào);AI表示被更新數(shù)據(jù)對(duì)象的后映像;VTI表示實(shí)時(shí)數(shù)據(jù)對(duì)象的最大有效時(shí)刻,即VTI=ST(X)+VI(X),這里ST(X)表示采樣時(shí)標(biāo),即采樣X(jué)對(duì)應(yīng)的外部世界對(duì)象的時(shí)間,VI(X)表示X的有效期,即自ST(X)算起V(X)具有有效性的時(shí)間長(zhǎng)度;CA表示控制事務(wù)所對(duì)應(yīng)的補(bǔ)償活動(dòng)。
——執(zhí)行頻率動(dòng)態(tài)可調(diào)的模糊檢驗(yàn)點(diǎn)模式每個(gè)站點(diǎn)獨(dú)立地執(zhí)行本地模糊檢驗(yàn)點(diǎn);在檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中,LMDB的更新被寫出到LSDB,同時(shí),刪除無(wú)用的日志記錄;在檢驗(yàn)點(diǎn)觸發(fā)時(shí)機(jī)上,根據(jù)日志存儲(chǔ)區(qū)空間使用率(RLE)是否到達(dá)設(shè)定的閾值α來(lái)決定是否觸發(fā)檢驗(yàn)點(diǎn);當(dāng)RLE大于α,檢驗(yàn)點(diǎn)被觸發(fā)執(zhí)行。
當(dāng)檢驗(yàn)點(diǎn)執(zhí)行時(shí),檢驗(yàn)點(diǎn)日志記錄被寫入系統(tǒng)在非易失性RAM中為檢驗(yàn)點(diǎn)日志記錄分配的獨(dú)立存儲(chǔ)空間;檢驗(yàn)點(diǎn)日志記錄包括五個(gè)部分檢驗(yàn)點(diǎn)位域(CKB)、關(guān)鍵事務(wù)類恢復(fù)起始時(shí)標(biāo)(CTRST)、一般事務(wù)類恢復(fù)起始時(shí)標(biāo)(GTRST)、檢驗(yàn)點(diǎn)時(shí)標(biāo)(CKT)和更新頁(yè)域(UPF);檢驗(yàn)點(diǎn)位域(CKB)用來(lái)表示本次檢驗(yàn)點(diǎn)是否成功完成,其取值為1表示成功完成,為0表示檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中發(fā)生系統(tǒng)故障;關(guān)鍵事務(wù)類恢復(fù)起始時(shí)標(biāo)(CTRST)表示故障后需要執(zhí)行REDO恢復(fù)操作的關(guān)鍵事務(wù)類的最小邏輯時(shí)標(biāo)值,而一般事務(wù)類恢復(fù)起始時(shí)標(biāo)(GTRST)表示故障后需要執(zhí)行REDO恢復(fù)操作的一般事務(wù)類的最小邏輯時(shí)標(biāo)值;檢驗(yàn)點(diǎn)時(shí)標(biāo)(CKT)表示檢驗(yàn)點(diǎn)被觸發(fā)時(shí)的邏輯時(shí)標(biāo);更新頁(yè)域(UPF)為L(zhǎng)MDB中的每一數(shù)據(jù)頁(yè)設(shè)置一更新位(updating bit)來(lái)記錄該頁(yè)的更新狀態(tài),該位為0表示自上次檢驗(yàn)點(diǎn)后該頁(yè)還未被更新;該位為1表示自上次檢驗(yàn)點(diǎn)后該頁(yè)已被更新。
本發(fā)明的優(yōu)點(diǎn)和積極效果本發(fā)明提供的支持邊服務(wù)邊恢復(fù)的基于日志的“識(shí)時(shí)”動(dòng)態(tài)故障恢復(fù)方法(TCDCRS)采用集成分區(qū)日志和短暫日志特性的實(shí)時(shí)日志模式,同時(shí)使用非易失性高速存儲(chǔ)設(shè)備作為日志存儲(chǔ)區(qū),以盡可能地降低系統(tǒng)正常運(yùn)行時(shí)日志代價(jià);在站點(diǎn)發(fā)生故障后的恢復(fù)策略上,TCDCRS給出了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)策略,來(lái)支持系統(tǒng)邊服務(wù)邊恢復(fù),從而盡可能減少故障站點(diǎn)停止服務(wù)的時(shí)間(TDT)。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn)
(1)基于“動(dòng)態(tài)”恢復(fù)的思想,支持邊服務(wù)邊恢復(fù),從而極大地縮短了系統(tǒng)故障后停止服務(wù)的時(shí)間,有利于實(shí)時(shí)事務(wù)截止期的滿足。
(2)采用集成分區(qū)和短暫日志特性的、基于非易失性RAM的實(shí)時(shí)日志技術(shù)和與之相適應(yīng)的本地模糊檢驗(yàn)點(diǎn)模式,大大地降低了系統(tǒng)正常運(yùn)行時(shí)的日志和檢驗(yàn)點(diǎn)代價(jià),顯著地提高了系統(tǒng)運(yùn)行時(shí)的性能。
圖1是單個(gè)站點(diǎn)存儲(chǔ)介質(zhì)的組織結(jié)構(gòu)示意圖;圖2是實(shí)時(shí)日志記錄類型與結(jié)構(gòu)示意圖;圖3是四種日志模式的效果比較圖。
具體實(shí)施方式實(shí)施例1本發(fā)明提供的支持邊服務(wù)邊恢復(fù)的基于日志的“識(shí)時(shí)”動(dòng)態(tài)故障恢復(fù)方法(TCDCRS)采用了集成分區(qū)日志和短暫日志特性的實(shí)時(shí)日志模式,同時(shí)使用非易失性高速存儲(chǔ)設(shè)備作為日志存儲(chǔ)區(qū),以盡可能地降低系統(tǒng)正常運(yùn)行時(shí)日志代價(jià);在站點(diǎn)發(fā)生故障后的恢復(fù)策略上,TCDCRS給出了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)策略,來(lái)支持系統(tǒng)邊服務(wù)邊恢復(fù),從而盡可能減少故障站點(diǎn)停止服務(wù)的時(shí)間。具體包括集成分區(qū)日志和短暫日志特性的、基于非易失性RAM實(shí)時(shí)日志技術(shù)——采用了日志存儲(chǔ)區(qū)分區(qū)的思想,即根據(jù)事務(wù)類的劃分策略,將日志存儲(chǔ)區(qū)分成對(duì)應(yīng)的不同分區(qū),屬于不同類別的事務(wù)的日志記錄被分別存儲(chǔ)在不同的日志分區(qū),從而可以避免單一日志文件導(dǎo)致的系統(tǒng)性能瓶頸。下面給出TCDCRS日志分區(qū)的原則。
文中相關(guān)符號(hào)的含義說(shuō)明如下
定義1.假定ST1,ST2ST,若ST1∩ST2=,則稱ST1和ST2互斥。記為ST1⊥ST2。
定義2.假定ST1,ST2,…,STnST,若對(duì)任意的STi,STj,1≤i≤n,1≤j≤n,有STi⊥STj,則稱集合{ST1,ST2,…,STn}為ST的互斥集。
定義3.假定{ST1,ST2,…,STn}為一互斥集,若有ST1∪ST2∪…∪STn=ST,則稱{ST1,ST2,…,STn}為ST的一個(gè)分劃(分類)。其中,STi,1≤i≤n,稱為一個(gè)事務(wù)類。
定義4.假定LS1,LS2,…,LSnLS,若對(duì)任意的LSi,LSj,1≤i≤n,有LSi∩LSj=,則稱集合{LS1,LS2,…,LSn}為L(zhǎng)S的互斥集。
定義5.假定π={ST1,ST2,…,STn}為ST的一個(gè)分劃,μ={LS1,LS2,…,LSn}為L(zhǎng)S的一互斥集,若存在雙射(——映射)fπ→μ,則稱μ為關(guān)聯(lián)分劃π的LS的一個(gè)分區(qū),LSi(1≤i≤n)稱為一個(gè)子日志區(qū)。其中,f表示STi∈π有且只有一個(gè)LSi∈μ使得T∈STi都有SA(T)LSi,且反之也成立。
定義6.{ST1,ST2,…,STn}被稱為ST的一個(gè)正交分劃,若{ST1,ST2,…,STn}為ST的一個(gè)分劃且STi,STj∈{ST1,ST2,…,STn}有DS(STi)∩DS(STj)=。
原則1.為了確保故障后能將數(shù)據(jù)庫(kù)恢復(fù)到正確、一致性狀態(tài),TCDCRS要求日志分區(qū)所關(guān)聯(lián)的ST的分劃π={ST1,ST2,…,STn}滿足條件{STk1,STk2,…,STkj}π,(DS(π1)∩DS(π2))=。這里,π1=STk1∪STk2∪…∪STkj,π2=ST-π1。我們稱滿足原則1中條件的分劃為規(guī)范化分劃。
我們證明了如下定理定理1.若{π1,π2}是ST的一個(gè)正交分劃,{STk1,STk2,…,STkj}是π1的一個(gè)分劃,{STm1,STm2,…,STmi}是π2的一個(gè)分劃,則{STk1STk2,…,STkj,STm1STm2,…,STmi}為一規(guī)范化分劃。
根據(jù)定理1,下面具體給出一種構(gòu)造方法。首先將ST按事務(wù)優(yōu)先級(jí)劃分成兩個(gè)子集ST>p={Ti|Pr(Ti)>p,Ti∈ST}和ST<=p={Ti|Pr(Ti)≤p,Ti∈ST},這里,Pr(Ti)表示事務(wù)Ti的優(yōu)先級(jí)。顯然,{ST>p,ST<=p}為ST的一分劃。通過(guò)適當(dāng)?shù)卣{(diào)整p的值,可使得DS(ST>p)∩DS(ST<=p)=(最壞的情況ST>p和ST<=p中有一個(gè)為),即{ST>p,ST<=p}為ST的一正交分劃。DS(ST>p)為屬于ST>p中的高優(yōu)先級(jí)事務(wù)所存取的數(shù)據(jù)對(duì)象的集合,我們稱DS(ST>p)為關(guān)鍵數(shù)據(jù)類,稱ST>p為關(guān)鍵事務(wù)類;DS(ST<=p)為屬于ST<=p中的低優(yōu)先級(jí)事務(wù)所存取的數(shù)據(jù)對(duì)象的集合,我們稱其為一般數(shù)據(jù)類,稱ST<=p為一般事務(wù)類。進(jìn)一步,我們將ST>p劃分成兩個(gè)(也可為多個(gè))子集ST>p,>f={Ti|Fr(Ti)>f,Ti∈ST>p}和ST>p,<=f={Ti|Fr(Ti)≤f,Ti∈ST>p},這里,F(xiàn)r(Ti)代表Ti的估計(jì)執(zhí)行頻率,f為一設(shè)定的頻率值。顯然,{ST>p,>f,ST>p,<=f}是ST>p的一個(gè)分劃。類似地,可將ST<=p劃分成兩個(gè)(也可為多個(gè))子集ST<=p,>f={Ti|Fr(Ti)>f,Ti∈ST<=p}和ST<=p,<=f={Ti|Fr(Ti)≤f,Ti∈ST<=p}。顯然,{ST<=p,<f,ST<=p,<=f}是ST<=p的一個(gè)分劃。令σ={ST>p,>f,ST>p,<=f,ST<=p,>f,ST<=p,<=f},則根據(jù)定理1,σ是一個(gè)規(guī)范化分劃。
——存儲(chǔ)介質(zhì)的組織如圖1所示,每個(gè)站點(diǎn)的存儲(chǔ)介質(zhì)分為三層磁盤存儲(chǔ)器、非易失RAM、易失RAM(主存)。本地外存數(shù)據(jù)庫(kù)(LSDB)被存儲(chǔ)在磁盤存儲(chǔ)器中。非易失RAM作為日志存儲(chǔ)區(qū),對(duì)應(yīng)于規(guī)范化分劃σ,整個(gè)日志存儲(chǔ)區(qū)被劃分成四個(gè)獨(dú)立的子日志區(qū)關(guān)鍵高頻事務(wù)類子日志區(qū)、關(guān)鍵低頻事務(wù)類子日志區(qū)、一般高頻事務(wù)類子日志區(qū)和一般低頻事務(wù)類子日志區(qū),分別簡(jiǎn)記為L(zhǎng)Sch、LScl、LSgh和LSgl,它們分別用來(lái)對(duì)應(yīng)地存儲(chǔ)ST>p,>f、ST>p,<=f、ST<=p,>f和ST<=p,<=f事務(wù)類的日志記錄,即{LSch,LScl,LSgh,LSgl}是關(guān)聯(lián)規(guī)范化分劃σ的日志存儲(chǔ)區(qū)的一個(gè)分區(qū)。我們將LSch和LScl統(tǒng)稱為關(guān)鍵日志區(qū);LSgh和LSgl統(tǒng)稱為一般日志區(qū)。本地內(nèi)存數(shù)據(jù)庫(kù)(LMDB)被存儲(chǔ)在易失性主存中,并且被分成兩個(gè)獨(dú)立的分區(qū)關(guān)鍵數(shù)據(jù)分區(qū)和一般數(shù)據(jù)分區(qū),用來(lái)分別存儲(chǔ)關(guān)鍵數(shù)據(jù)類和一般數(shù)據(jù)類。
——實(shí)時(shí)日志記錄的類型與結(jié)構(gòu)結(jié)合實(shí)時(shí)提交協(xié)議1PRCP,我們?cè)O(shè)計(jì)五種日志記錄類型Begin,Redo,Compensate,Ready和Commit,如圖2所示。其中,P-TID表示分布式事務(wù)(全局事務(wù))標(biāo)識(shí),定義為P-TID::=<Cor_Addr,N>,這里,Cor_Addr表示分布式事務(wù)的協(xié)調(diào)者的網(wǎng)絡(luò)地址;N代表分布式事務(wù)的序號(hào),在每個(gè)協(xié)調(diào)者站點(diǎn),N是單調(diào)遞增的。對(duì)于本地事務(wù),P-TID被置為NULL。TID為本地事務(wù)或子事務(wù)標(biāo)識(shí),定義為TID::=<Addr,SN>,這里,Addr表示本地事務(wù)或子事務(wù)所在站點(diǎn)的網(wǎng)絡(luò)地址;SN表示本地事務(wù)或子事務(wù)的序號(hào),在每個(gè)站點(diǎn)SN是單調(diào)遞增?!癇”,“D”,“CP”,“R”和“C”用來(lái)分別表示Begin,Redo,Compensate,Ready和Commit五種日志記錄類型。TS表示Redo或Compensate或Commit類型日志記錄創(chuàng)建時(shí)刻的邏輯時(shí)標(biāo)。在每個(gè)站點(diǎn),邏輯時(shí)標(biāo)的初始值置為0,每當(dāng)一條Redo或Compensate或Commit日志記錄或后文介紹的檢驗(yàn)點(diǎn)日志記錄被創(chuàng)建,邏輯時(shí)標(biāo)的值增加1。RID代表被更新數(shù)據(jù)對(duì)象的標(biāo)識(shí)。BN表示與LMDB中數(shù)據(jù)頁(yè)相對(duì)應(yīng)的LSDB中數(shù)據(jù)塊的邏輯塊號(hào)。AI表示被更新數(shù)據(jù)對(duì)象的后映像。VTI表示實(shí)時(shí)數(shù)據(jù)對(duì)象的最大有效時(shí)刻,即VTI=ST(X)+VI(X),這里ST(X)表示采樣時(shí)標(biāo),即采樣X(jué)對(duì)應(yīng)的外部世界對(duì)象的時(shí)間,VI(X)表示X的有效期,即自ST(X)算起V(X)具有有效性的時(shí)間長(zhǎng)度。對(duì)持久數(shù)據(jù)對(duì)象而言,其VTI置為無(wú)限大。CA表示控制事務(wù)所對(duì)應(yīng)的補(bǔ)償活動(dòng)。
◆本地模糊檢驗(yàn)點(diǎn)模式在TCDCRS中,每個(gè)站點(diǎn)獨(dú)立地執(zhí)行本地模糊檢驗(yàn)點(diǎn)。在檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中,LMDB的更新被寫出到LSDB,同時(shí),一些無(wú)用的日志記錄被刪除以釋放相應(yīng)的日志存儲(chǔ)空間。在檢驗(yàn)點(diǎn)觸發(fā)時(shí)機(jī)上,TCDCRS不是采用固定時(shí)間間隔的周期性觸發(fā)策略,而是根據(jù)日志存儲(chǔ)區(qū)空間使用率(簡(jiǎn)記為RLU)是否到達(dá)設(shè)定的閾值α來(lái)決定是否觸發(fā)檢驗(yàn)點(diǎn)。當(dāng)RLU大于α,檢驗(yàn)點(diǎn)被觸發(fā)執(zhí)行。α的初始值可根據(jù)應(yīng)用的要求預(yù)先設(shè)定,在系統(tǒng)運(yùn)行過(guò)程中可通過(guò)修改α的值來(lái)動(dòng)態(tài)調(diào)整檢驗(yàn)點(diǎn)執(zhí)行的頻率。
當(dāng)檢驗(yàn)點(diǎn)執(zhí)行時(shí),檢驗(yàn)點(diǎn)日志記錄被寫入系統(tǒng)在非易失性RAM中為檢驗(yàn)點(diǎn)日志記錄分配的獨(dú)立存儲(chǔ)空間。檢驗(yàn)點(diǎn)日志記錄包括五個(gè)部分檢驗(yàn)點(diǎn)位域(CKB)、關(guān)鍵事務(wù)類恢復(fù)起始時(shí)標(biāo)(CTRST)、一般事務(wù)類恢復(fù)起始時(shí)際(GTRST)、檢驗(yàn)點(diǎn)時(shí)標(biāo)(CKT)和更新頁(yè)域(UPF)。CKB用來(lái)表示本次檢驗(yàn)點(diǎn)是否成功完成。CKB取值為1表示成功完成,為0表示檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中發(fā)生系統(tǒng)故障。CTRST表示故障后需要執(zhí)行REDO恢復(fù)操作的關(guān)鍵事務(wù)類的最小邏輯時(shí)標(biāo)值,而GTRST表示故障后需要執(zhí)行REDO恢復(fù)操作的一般事務(wù)類的最小邏輯時(shí)標(biāo)值。CKT表示檢驗(yàn)點(diǎn)被觸發(fā)時(shí)的邏輯時(shí)標(biāo)。UPF為L(zhǎng)MDB中的每一數(shù)據(jù)頁(yè)設(shè)置一更新位(updating bit)來(lái)記錄該頁(yè)的更新狀態(tài),該位為0表示自上次檢驗(yàn)點(diǎn)后該頁(yè)還未被更新;該位為1表示自上次檢驗(yàn)點(diǎn)后該頁(yè)已被更新。檢驗(yàn)點(diǎn)執(zhí)行過(guò)程可描述如下
上述算法的中文描述
在上面的描述中及后面的恢復(fù)處理的算法描述中,TCounter用來(lái)表示邏輯時(shí)標(biāo)計(jì)數(shù)器,其初始值置為0,每當(dāng)一條Redo或Compensate或Commit或檢驗(yàn)點(diǎn)日志記錄被創(chuàng)建,其值加1。系統(tǒng)在非易失性RAM中為TCounter分配相應(yīng)的存儲(chǔ)空間。
◆動(dòng)態(tài)恢復(fù)處理方法在站點(diǎn)故障后的恢復(fù)處理過(guò)程中,首先,LSDB被裝入主存并重建LMDB;然后,恢復(fù)子系統(tǒng)負(fù)責(zé)將LMDB恢復(fù)到最近的一致性狀態(tài)。為了提高系統(tǒng)性能,TCDCRS給出了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)處理策略,動(dòng)態(tài)恢復(fù)處理策略是以前面提出實(shí)時(shí)日志模式為基礎(chǔ),其關(guān)鍵特征是關(guān)鍵數(shù)據(jù)類被首先恢復(fù),在恢復(fù)一般數(shù)據(jù)類前恢復(fù)站點(diǎn)服務(wù),然后邊服務(wù)邊恢復(fù)一般數(shù)據(jù)類,以最大限度地降低故障站點(diǎn)停止服務(wù)的時(shí)間。結(jié)合實(shí)時(shí)提交協(xié)議1PRCP,動(dòng)態(tài)恢復(fù)策略能確保分布式事務(wù)故障的原子性。動(dòng)態(tài)恢復(fù)策略的具體包括如下步驟
(1)從LSDB中將關(guān)鍵數(shù)據(jù)類裝入主存相應(yīng)數(shù)據(jù)分區(qū),重建LMDB;(2)消除屬于關(guān)鍵事務(wù)類的夭折的控制事務(wù)導(dǎo)致的對(duì)外部世界改變,并將關(guān)鍵數(shù)據(jù)類恢復(fù)到最近一致性狀態(tài);(3)恢復(fù)故障站點(diǎn)的服務(wù);(4)從LSDB中將一般數(shù)據(jù)類裝入主存相應(yīng)數(shù)據(jù)分區(qū);(5)消除屬于一般事務(wù)類的夭折的控制事務(wù)導(dǎo)致的對(duì)外部世界改變,并將一般數(shù)據(jù)類恢復(fù)到最近一致性狀態(tài)。
在上面步驟中,(2)和(5)的實(shí)現(xiàn)算法可統(tǒng)一描述如下Procedure CrashRecovery(char dc)Inputdc denotes data class asking to be recovered and dc=”C”stands for critical data class,while dc=”G”stands for general data class.
1FT=TCounter2if(dc=”C”)then3 RST=CTRST;4 Scan critical logging partition(including CALP and CDLP)to look for all Compensate log reordsCPLogTi,which satisfy the following conditionsthe corresponding Commit log recordsCommitLogTidon’t exist,i.e.the corresponding transactions don’t commit successfully,and timestamp of CPLogTiis smaller than FT.At the same time insert these CPLogTiintocompensating activity recovery list(CARL)in order of their timestamp;5else6 RST=GTRST;7 Scan ordinary logging partition(including OALP and ODLP)to look for all Compensate log reordsCPLogTi,which satisfy the following conditionsthe corresponding Commit log recordsCommitLogTidon’t exist,i.e.the corresponding transactions don’t commit successfully,and timestamp of CPLogTiis smaller than FT.At the same time insert these CPLogTiintocompensating activity recovery list(CARL)in order of their timestamp;8Scan reversely CARL until the head of CARL and for each CPLogTi,execute the correspondingcompensating activity CPLogTi.CA;9while(RST≤FT)10 if(dc=”C”)then11Scan critical logging partition to look for the Redo log record RedoLogTi,kwhose timestampis RST;12. else13Scan ordinary logging partition to look for the Redo log record RedoLogTi,kwhose timestampis RST;14 if(find the Redo log record RedoLogTi,k)then15if(find the corresponding Commit log record CommitLogTi)then16 if(RedoLogTi,k.VTI>Tc)then17REDO(RedoLogTi,k)18RST++;continue;19 else
20 RST++;21 Triggeer the corresponding sample transaction to update overdue data;22 if(find the corresponding Ready log record ReadyLogTi)then23if(receive Commit message)then24 REDO(RedoLogTi,k);25 Add CommitLogTito the corresponding logging partition;26 RST++;27if(receive Abort message)then28 RST++;29 else30 RST++;31else32 RST++;33endwhile上述算法的中文描述Procedure CrashRecovery(char dc)輸入dc表示要求恢復(fù)的數(shù)據(jù)類別,dc=”C”代表關(guān)鍵數(shù)據(jù)類,而dc=”G”代表一般數(shù)據(jù)類1FT=TCounter2if(dc=”C”)then3 RST=CTRST;4 掃描關(guān)鍵日志分區(qū),尋找滿足如下條件的Compensate日志記錄CPLogTi,該事務(wù)的提交日志記錄不存在且CPLogTi,的邏輯時(shí)標(biāo)比FT更小。將找到的CPLogTi,按它們邏輯時(shí)標(biāo)值從小到大依次插入到補(bǔ)償恢復(fù)活動(dòng)表CARL中。
5else6 RST=GTRST;7 掃描一般日志分區(qū),尋找滿足如下條件的Compensate日志記錄CPLogTi,該事務(wù)的提交日志記錄不存在且CPLogTi,的邏輯時(shí)標(biāo)比FT更小。將找到的CPLogTi,按它們邏輯時(shí)標(biāo)值從小到大依次插入到補(bǔ)償恢復(fù)活動(dòng)表CARL中。
8反向掃描CARL表直到表頭,對(duì)每一CPLogTi,執(zhí)行相應(yīng)的補(bǔ)充活動(dòng)CPLogTi.CA;9while(RST≤FT)10 if(dc=”C”)then11掃描關(guān)鍵日志分區(qū)找邏輯時(shí)標(biāo)等于RST的Redo日志記錄RedoLogTi,k;12. else13掃描一般日志分區(qū)找邏輯時(shí)標(biāo)等于RST的Redo日志記錄RedoLogTi,k;14 if(找到RedoLogTi,k)then15if(存在相應(yīng)的Commit日志記錄CommitLogTi)then16 if(RedoLogTi,k.VTI>Tc)then17REDO(RedoLogTi,k)18RST++;continue;19 else
20 RST++;21 觸發(fā)對(duì)應(yīng)的采樣事務(wù)更新過(guò)期數(shù)據(jù)對(duì)象;22 if(找到相應(yīng)的Ready日志記錄ReadyLogTi)then23 if(收到了協(xié)調(diào)者的提交消息)then24 REDO(RedoLogTi,k);25 增加CommitLogTi到對(duì)應(yīng)的日志分區(qū);26 RST++;27if(收到了協(xié)調(diào)者的夭折消息)then28 RST++;29 else30 RST++;31else32 RST++;33endwhile在上面的算法描述中,RedoLogTi,k表示事務(wù)Ti的第k條Redo日志記錄;過(guò)程REDO(RedoLogTi,k)負(fù)責(zé)將RedoLogTi,k記錄的數(shù)據(jù)對(duì)象在LMDB中的值用其后映像覆蓋;RedoLogTi,k.VTI表示RedoLogTi,k記錄的數(shù)據(jù)對(duì)象的有效時(shí)刻。由于實(shí)時(shí)數(shù)據(jù)對(duì)象一旦過(guò)期其值即變得無(wú)意義,因此,在上述動(dòng)態(tài)恢復(fù)處理策略中,對(duì)過(guò)期的實(shí)時(shí)數(shù)據(jù)對(duì)象并不執(zhí)行REDO操作,還是采取觸發(fā)相應(yīng)的采樣事務(wù)來(lái)更新過(guò)期數(shù)據(jù)對(duì)象的值。
實(shí)施例具體性能比較我們將TCDCRS與其它恢復(fù)方法進(jìn)行了運(yùn)行時(shí)日志的代價(jià)的比較,測(cè)試了不同日志模式對(duì)系統(tǒng)性能的影響。性能測(cè)試的主要參數(shù)設(shè)置如表1所示,其中U[i,j]表示服從區(qū)間[i,j]上的均勻分布的隨機(jī)變量。在我們的實(shí)驗(yàn)中,全局內(nèi)存數(shù)據(jù)庫(kù)(GMDB)為由50000個(gè)數(shù)據(jù)頁(yè)組成的集合,這些數(shù)據(jù)頁(yè)被分配到5個(gè)站點(diǎn)形成相應(yīng)的本地內(nèi)存數(shù)據(jù)庫(kù)(LMDB),對(duì)數(shù)據(jù)的訪問(wèn)和并發(fā)控制都發(fā)生在頁(yè)級(jí),并發(fā)控制策略采用分布式高優(yōu)先級(jí)兩段鎖協(xié)議(DHP-2PL),事務(wù)優(yōu)先級(jí)分派采用最早截上期優(yōu)先策略(EDF)。事務(wù)T的截止期按如下公式計(jì)算Deadline(T)=AT(T)+Slack×ET(T)。這里,Deadline(T)表示T的截止期;AT(T)表示T到達(dá)系統(tǒng)的時(shí)間;Slack表示松弛因子,通常為一個(gè)滿足均勻分布的隨機(jī)變量;ET(T)表示T的估計(jì)執(zhí)行時(shí)間。ET(T)按如下公式估算ET(T)=OpN×AET,其中OpN和AET的含義如表1所述。我們以實(shí)時(shí)事務(wù)錯(cuò)過(guò)截止期的比率MDR為主要性能指標(biāo),其定義如下MDR=(錯(cuò)過(guò)截止期事務(wù)的數(shù)目)/(進(jìn)入系統(tǒng)事務(wù)的總數(shù))。顯然,MDR越小,系統(tǒng)實(shí)時(shí)性能越好。
Table 1.Experiment parameters表1.實(shí)驗(yàn)參數(shù)
我們將TCDCRS的集成分區(qū)日志和短暫日志特性的實(shí)時(shí)日志模式PERT-NVRAM與另外三種日志模式無(wú)日志模式(NLS)、基于磁盤的分區(qū)日志模式(PLSD)和基于磁盤的順序日志模式(SLSD)進(jìn)行比較。NLS表示系統(tǒng)運(yùn)行過(guò)程中不記錄事務(wù)日志,顯然這不能滿足恢復(fù)的要求,這里將它作為不同模式代價(jià)比較的基準(zhǔn)。測(cè)試結(jié)果如圖3所示,當(dāng)事務(wù)的到達(dá)率提高時(shí),四種日志模式所對(duì)應(yīng)的MDR都相應(yīng)增大,而PERT-NVRAM最接近NLS的效果,它的MDR明顯的小于其它兩種日志模式。
故障發(fā)生后系統(tǒng)停止服務(wù)的時(shí)間TDT是衡量恢復(fù)性能的另一重要指標(biāo)。對(duì)分布式實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)而言,TDT主要包括將數(shù)據(jù)從LSDB裝入內(nèi)存重建LMDB所需的時(shí)間T1和將LMDB恢復(fù)到一致性狀態(tài)所需的時(shí)間T2。由于TCDCRS采用了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)策略(關(guān)鍵類數(shù)據(jù)被首先裝入、恢復(fù),在一般類數(shù)據(jù)裝入內(nèi)存前恢復(fù)了系統(tǒng)服務(wù)),因此對(duì)TCDCRS而言,TDT等于將關(guān)鍵數(shù)據(jù)類裝入內(nèi)存所需時(shí)間與在內(nèi)存中將它們恢復(fù)一致性狀態(tài)所需時(shí)間的總和,TDT可估算如下TDT=T1+T2≈SLMDB×RCD×TL0+(SL×RCL×α)÷SLR×Trp(1)(1)式中,TL0表示從外存讀入一數(shù)據(jù)塊到內(nèi)存平均所需時(shí)間;RCL表示關(guān)鍵日志區(qū)占整個(gè)可用日志區(qū)的比率;SLR代表一條日志記錄的平均大小;Trp代表恢復(fù)時(shí)一條日志記錄的平均處理時(shí)間;SLMDB、RCD、SL及α的含義如表1所描述。由于關(guān)鍵數(shù)據(jù)類通常只占全部數(shù)據(jù)的小部分,因此相比于將全部數(shù)據(jù)裝入、恢復(fù)后再提供系統(tǒng)服務(wù)的靜態(tài)恢復(fù)策略而言,TCDCRS能明顯地降低系統(tǒng)停止服務(wù)的時(shí)間TDT。
權(quán)利要求
1.一種支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法,其特征是該方法包括1)采用集成分區(qū)日志和短暫日志特性的實(shí)時(shí)日志模式即根據(jù)事務(wù)類的劃分策略,將日志存儲(chǔ)區(qū)分成對(duì)應(yīng)的不同分區(qū),屬于不同類別的事務(wù)的日志記錄被分別存儲(chǔ)在不同的日志分區(qū);同時(shí)日志記錄并不持久保存,在本地模糊檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中,一些無(wú)用的日志記錄被刪除;2)存儲(chǔ)介質(zhì)的組織每個(gè)站點(diǎn)的存儲(chǔ)介質(zhì)分為三層磁盤存儲(chǔ)器、非易失RAM、易失RAM(主存);本地外存數(shù)據(jù)庫(kù)(LSDB)被存儲(chǔ)在磁盤存儲(chǔ)器中;非易失RAM作為日志存儲(chǔ)區(qū),對(duì)應(yīng)于規(guī)范化分劃σ,整個(gè)日志存儲(chǔ)區(qū)被劃分成四個(gè)獨(dú)立的子日志區(qū);本地內(nèi)存數(shù)據(jù)庫(kù)(LMDB)被存儲(chǔ)在易失性主存中,并且被分成兩個(gè)獨(dú)立的分區(qū)關(guān)鍵數(shù)據(jù)分區(qū)和一般數(shù)據(jù)分區(qū),用來(lái)分別存儲(chǔ)關(guān)鍵數(shù)據(jù)類和一般數(shù)據(jù)類;3)執(zhí)行頻率動(dòng)態(tài)可調(diào)的模糊檢驗(yàn)點(diǎn)模式采用模糊檢驗(yàn)點(diǎn)模式,在檢驗(yàn)點(diǎn)觸發(fā)時(shí)機(jī)上,不是采用固定時(shí)間間隔的周期性觸發(fā)策略,而是根據(jù)日志存儲(chǔ)區(qū)空間使用率(簡(jiǎn)記為RLU)是否到達(dá)設(shè)定的閾值α來(lái)決定是否觸發(fā)檢驗(yàn)點(diǎn)。當(dāng)RLU大于α,檢驗(yàn)點(diǎn)被觸發(fā)執(zhí)行;α的初始值可根據(jù)應(yīng)用的要求預(yù)先設(shè)定,在系統(tǒng)運(yùn)行過(guò)程中可通過(guò)修改α的值來(lái)動(dòng)態(tài)調(diào)整檢驗(yàn)點(diǎn)執(zhí)行的頻率;4)在站點(diǎn)發(fā)生故障后的恢復(fù)處理過(guò)程中,采用了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)處理策略,其關(guān)鍵特征是關(guān)鍵數(shù)據(jù)類被首先恢復(fù),在恢復(fù)一般數(shù)據(jù)類前恢復(fù)站點(diǎn)服務(wù),然后邊服務(wù)邊恢復(fù)一般數(shù)據(jù)類,以最大限度地降低故障站點(diǎn)停止服務(wù)的時(shí)間;動(dòng)態(tài)恢復(fù)策略的具體包括如下步驟(1)從本地外存數(shù)據(jù)庫(kù)(LSDB)中將關(guān)鍵數(shù)據(jù)類裝入主存相應(yīng)數(shù)據(jù)分區(qū),重建本地內(nèi)存數(shù)據(jù)庫(kù)(LMDB);(2)消除屬于關(guān)鍵事務(wù)類的夭折的控制事務(wù)導(dǎo)致的對(duì)外部世界改變,并將關(guān)鍵數(shù)據(jù)類恢復(fù)到最近一致性狀態(tài);(3)恢復(fù)故障站點(diǎn)的服務(wù);(4)從本地外存數(shù)據(jù)庫(kù)(LSDB)中將一般數(shù)據(jù)類裝入主存相應(yīng)數(shù)據(jù)分區(qū);(5)消除屬于一般事務(wù)類的夭折的控制事務(wù)導(dǎo)致的對(duì)外部世界改變,并將一般數(shù)據(jù)類恢復(fù)到最近一致性狀態(tài)。
2.根據(jù)權(quán)利要求1所述的支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法,其特征是1)中的日志存儲(chǔ)區(qū)的分劃方法如下(1)首先將事務(wù)集合ST按事務(wù)優(yōu)先級(jí)劃分成兩個(gè)子集ST>p={Ti|Pr(Ti)>p,T∈ST}和ST<=p={Ti|Pr(Ti)≤p,Ti∈ST},這里,Pr(Ti)表示事務(wù)Ti的優(yōu)先級(jí);顯然,{ST>p,ST<=p}為ST的一分劃;(2)通過(guò)適當(dāng)?shù)恼{(diào)整p值,使得DS(ST>p)∩DS(ST<=p)=,即{ST>p,ST<=p}為ST的一正交分劃;其中,DS(ST>p)為屬于ST>p中的高優(yōu)先級(jí)事務(wù)所存取的數(shù)據(jù)對(duì)象的集合,稱DS(ST>p)為關(guān)鍵數(shù)據(jù)類,稱ST>p為關(guān)鍵事務(wù)類;DS(ST<=p)為屬于ST<=p中的低優(yōu)先級(jí)事務(wù)所存取的數(shù)據(jù)對(duì)象的集合,稱其為一般數(shù)據(jù)類,稱ST<=p為一般事務(wù)類;(3)進(jìn)一步,將ST>p劃分成兩個(gè)或兩個(gè)以上子集ST>p,>f={Ti|Fr(Ti)>f,Ti∈ST>p}和ST>p,<=f={Ti|Fr(Ti)≤f,Ti∈ST>p},這里,F(xiàn)r(Ti)代表Ti的估計(jì)執(zhí)行頻率,f為一設(shè)定的頻率值,顯然,{ST>p,>f,ST>p,<=f}是ST>p的一個(gè)分劃;類似地,將ST<=p劃分成兩個(gè)或兩個(gè)以上子集ST<=p,>f={Ti|Fr(Ti)>f,Ti∈ST<=p}和ST<=p,<=f={Ti|Fr(Ti)≤f,Ti∈ST<=p},顯然,{ST<=p,>f,ST<=p,<=f}是ST<=p的一個(gè)分劃;(4)令σ={ST>p,>f,ST>p,<=f,ST<=p,>f,ST<=p,<=f},則(根據(jù)定理1)σ是一個(gè)規(guī)范化分劃;(5)對(duì)應(yīng)于規(guī)范化分劃σ,將整個(gè)日志存儲(chǔ)區(qū)被劃分成四個(gè)獨(dú)立的子日志區(qū)關(guān)鍵高頻事務(wù)類子日志區(qū)、關(guān)鍵低頻事務(wù)類子日志區(qū)、一般高頻事務(wù)類子日志區(qū)和一般低頻事務(wù)類子日志區(qū),分別簡(jiǎn)記為L(zhǎng)Sch、LScl、LSgh和LSgl,它們分別用來(lái)對(duì)應(yīng)地存儲(chǔ)ST>p,>f、ST>p,<=f、ST<=p,>f和ST<=p,<=f事務(wù)類的日志記錄,即{LSch,LScl,LSgh,LSgl}是關(guān)聯(lián)規(guī)范化分劃σ的日志存儲(chǔ)區(qū)的一個(gè)分區(qū)。
3.根據(jù)權(quán)利要求1所述的支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法,其特征是2)中非易失RAM作為日志存儲(chǔ)區(qū),對(duì)應(yīng)于規(guī)范化分劃σ,整個(gè)日志存儲(chǔ)區(qū)被劃分成四個(gè)獨(dú)立的子日志區(qū)關(guān)鍵高頻事務(wù)類子日志區(qū)、關(guān)鍵低頻事務(wù)類子日志區(qū)、一般高頻事務(wù)類子日志區(qū)和一般低頻事務(wù)類子日志區(qū),分別簡(jiǎn)記為L(zhǎng)Sch、LScl、LSgh和LSgl,它們分別用來(lái)對(duì)應(yīng)地存儲(chǔ)ST>p,>f、ST>p,<=f、ST<=p,>f和ST<=p,<=f事務(wù)類的日志記錄,即{LSch,LScl,LSgh,LSgl}是關(guān)聯(lián)規(guī)范化分劃σ的日志存儲(chǔ)區(qū)的一個(gè)分區(qū);將LSch和LScl統(tǒng)稱為關(guān)鍵日志區(qū);LSgh和LSgl統(tǒng)稱為一般日志區(qū)。
4.根據(jù)權(quán)利要求1所述的支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法,其特征是1)、2)、3)、或4)中的實(shí)時(shí)日志記錄的類型與結(jié)構(gòu)及含義如下(1)結(jié)合實(shí)時(shí)提交協(xié)議1PRCP,設(shè)計(jì)五種日志記錄類型Begin,Redo,Compensate,Ready和Commit,分別用“B”,“D”,“CP”,“R”和“C”來(lái)表示,其中,p-TID表示分布式事務(wù)(全局事務(wù))標(biāo)識(shí),定義為P-TID::=<Cor_Addr,N>,這里,Cor_Addr表示分布式事務(wù)的協(xié)調(diào)者的網(wǎng)絡(luò)地址;N代表分布式事務(wù)的序號(hào),在每個(gè)協(xié)調(diào)者站點(diǎn),N是單調(diào)遞增的;(2)對(duì)于本地事務(wù),P-TID被置為NULL;TID為本地事務(wù)或子事務(wù)標(biāo)識(shí),定義為TID::=<Addr,SN>,這里,Addr表示本地事務(wù)或子事務(wù)所在站點(diǎn)的網(wǎng)絡(luò)地址;SN表示本地事務(wù)或子事務(wù)的序號(hào),在每個(gè)站點(diǎn)SN是單調(diào)遞增;(3)用TS表示Redo或Compensate或Commit類型日志記錄創(chuàng)建時(shí)刻的邏輯時(shí)標(biāo);在每個(gè)站點(diǎn),邏輯時(shí)標(biāo)的初始值置為0,每當(dāng)一條Redo或Compensate或Commit日志記錄或檢驗(yàn)點(diǎn)日志記錄被創(chuàng)建,邏輯時(shí)標(biāo)的值增加1;(4)用RID代表被更新數(shù)據(jù)對(duì)象的標(biāo)識(shí),BN表示與本地外存數(shù)據(jù)庫(kù)(LSDB)中數(shù)據(jù)頁(yè)相對(duì)應(yīng)的LSDB中數(shù)據(jù)塊的邏輯塊號(hào);AI表示被更新數(shù)據(jù)對(duì)象的后映像;VTI表示實(shí)時(shí)數(shù)據(jù)對(duì)象的最大有效時(shí)刻,即VTI=ST(X)+VI(X),這里ST(X)表示采樣時(shí)標(biāo),即采樣X(jué)對(duì)應(yīng)的外部世界對(duì)象的時(shí)間,VI(X)表示X的有效期,即自ST(X)算起V(X)具有有效性的時(shí)間長(zhǎng)度;CA表示控制事務(wù)所對(duì)應(yīng)的補(bǔ)償活動(dòng)。
5.根據(jù)權(quán)利要求1所述的支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法,其特征是3)中所述執(zhí)行本地模糊檢驗(yàn)點(diǎn)模式;即要求每個(gè)站點(diǎn)獨(dú)立地執(zhí)行本地模糊檢驗(yàn)點(diǎn);在檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中,LMDB的更新被寫出到LSDB,同時(shí),刪除無(wú)用的日志記錄;在檢驗(yàn)點(diǎn)觸發(fā)時(shí)機(jī)上,根據(jù)日志存儲(chǔ)區(qū)空間使用率(RLU)是否到達(dá)設(shè)定的閾值α來(lái)決定是否觸發(fā)檢驗(yàn)點(diǎn);當(dāng)RLU大于α,檢驗(yàn)點(diǎn)被觸發(fā)執(zhí)行;當(dāng)檢驗(yàn)點(diǎn)執(zhí)行時(shí),檢驗(yàn)點(diǎn)日志記錄被寫入系統(tǒng)在非易失性RAM中為檢驗(yàn)點(diǎn)日志記錄分配的獨(dú)立存儲(chǔ)空間;檢驗(yàn)點(diǎn)日志記錄包括五個(gè)部分檢驗(yàn)點(diǎn)位域(CKB)、關(guān)鍵事務(wù)類恢復(fù)起始時(shí)標(biāo)(CTRST)、一般事務(wù)類恢復(fù)起始時(shí)標(biāo)(GTRST)、檢驗(yàn)點(diǎn)時(shí)標(biāo)(CKT)和更新頁(yè)域(UPF);檢驗(yàn)點(diǎn)位域(CKB)用來(lái)表示本次檢驗(yàn)點(diǎn)是否成功完成,其取值為1表示成功完成,為0表示檢驗(yàn)點(diǎn)執(zhí)行過(guò)程中發(fā)生系統(tǒng)故障;關(guān)鍵事務(wù)類恢復(fù)起始時(shí)標(biāo)(CTRST)表示故障后需要執(zhí)行REDO恢復(fù)操作的關(guān)鍵事務(wù)類的最小邏輯時(shí)標(biāo)值,而一般事務(wù)類恢復(fù)起始時(shí)標(biāo)(GTRST)表示故障后需要執(zhí)行REDO恢復(fù)操作的一般事務(wù)類的最小邏輯時(shí)標(biāo)值;檢驗(yàn)點(diǎn)時(shí)標(biāo)(CKT)表示檢驗(yàn)點(diǎn)被觸發(fā)時(shí)的邏輯時(shí)標(biāo);更新頁(yè)域(UPF)為L(zhǎng)MDB中的每數(shù)據(jù)頁(yè)設(shè)置一更新位(updating bit)來(lái)記錄該頁(yè)的更新狀態(tài),該位為0表示自上次檢驗(yàn)點(diǎn)后該頁(yè)還未被更新;該位為1表示自上次檢驗(yàn)點(diǎn)后該頁(yè)已被更新。
全文摘要
一種支持邊服務(wù)邊恢復(fù)的分布式實(shí)時(shí)數(shù)據(jù)庫(kù)故障恢復(fù)方法。本發(fā)明提供的支持邊服務(wù)邊恢復(fù)的基于日志的“識(shí)時(shí)”動(dòng)態(tài)故障恢復(fù)方法(TCDCRS)采用了集成分區(qū)日志和短暫日志特性的實(shí)時(shí)日志模式,同時(shí)使用非易失性高速存儲(chǔ)設(shè)備作為日志存儲(chǔ)區(qū),以盡可能地降低系統(tǒng)正常運(yùn)行時(shí)日志代價(jià);在站點(diǎn)發(fā)生故障后的恢復(fù)策略上,TCDCRS給出了基于分類恢復(fù)思想的動(dòng)態(tài)恢復(fù)策略,來(lái)支持系統(tǒng)邊服務(wù)邊恢復(fù),從而盡可能減少故障站點(diǎn)停止服務(wù)的時(shí)間。本發(fā)明適用于工業(yè)過(guò)程控制、電網(wǎng)調(diào)度、軍事作戰(zhàn)指揮系統(tǒng)等,需要分布式實(shí)時(shí)數(shù)據(jù)庫(kù)支持的領(lǐng)域。
文檔編號(hào)G06F17/30GK1975684SQ20061013010
公開日2007年6月6日 申請(qǐng)日期2006年12月13日 優(yōu)先權(quán)日2006年12月13日
發(fā)明者肖迎元, 張樺, 陳向陽(yáng) 申請(qǐng)人:天津理工大學(xué)