一種處理數(shù)據(jù)庫日志的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及一種處理數(shù)據(jù)庫日志的方法及裝置。
【背景技術(shù)】
[0002]當前數(shù)據(jù)庫技術(shù)中,重做(redo)日志提供了一個對未寫入數(shù)據(jù)庫磁盤的數(shù)據(jù)的進行重做的基礎(chǔ)。當數(shù)據(jù)庫更新提交的時候,數(shù)據(jù)并不會即時寫入到磁盤的數(shù)據(jù)文件中,而是保存在內(nèi)存當中,這就需要通過redo日志來對該次數(shù)據(jù)庫更新提供一種持久化的支持,避免在故障的情況下,由于內(nèi)存數(shù)據(jù)的丟失而導(dǎo)致數(shù)據(jù)丟失。
[0003]現(xiàn)有技術(shù)中,通常通過將數(shù)據(jù)庫更新的動作記錄在redo日志中來避免要求每次的數(shù)據(jù)庫更新寫入數(shù)據(jù)文件,從而提高數(shù)據(jù)庫更新的性能;傳統(tǒng)的數(shù)據(jù)庫大多采用循環(huán)的重做日志緩沖區(qū)(redo buffer)的形式來順序存儲redo日志,之后在合適的時刻把buffer中的數(shù)據(jù)追加到磁盤上的redo文件中進行持久化存儲,日志刷出后buffer可以重用,這樣在redo日志的寫入上通過設(shè)置redo日志的緩沖,可減少redo日志寫入磁盤的頻率;而撤消日志(undo log)記錄了數(shù)據(jù)庫變更前的狀態(tài),能夠把所有沒有提交(commit)的事務(wù)回滾到事務(wù)開始前的狀態(tài)。同時,系統(tǒng)崩潰時,可能有些事務(wù)還沒有commit,在系統(tǒng)恢復(fù)時,這些沒有commit的事務(wù)就需要借助undo log來進行回滾。傳統(tǒng)的數(shù)據(jù)庫大多采用與數(shù)據(jù)頁一樣的存儲方式來存儲undo日志。但是這樣所有的redo都統(tǒng)一存儲在redo buffer中,在大并發(fā)下redo buffer成為了沖突熱點,制約了數(shù)據(jù)庫的可擴展性;且redo需要持久化存儲在磁盤上,在事務(wù)提交時需要將日志刷新到磁盤,此時會影響事務(wù)提交性能,尤其當redo日志和數(shù)據(jù)存儲在同一塊磁盤上,對磁盤的爭搶更為激烈,這對數(shù)據(jù)庫性能有巨大影響;而undo日志與數(shù)據(jù)存儲處理一致,同樣造成了一定程度的存儲空間浪費和磁盤競爭。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實施例所要解決的技術(shù)問題在于,提供一種處理數(shù)據(jù)庫日志的方法及裝置。以解決數(shù)據(jù)庫日志操作的熱點爭用和磁盤爭用的問題。
[0005]為了解決上述技術(shù)問題,本發(fā)明實施例第一方面提供了一種處理數(shù)據(jù)庫日志的方法,包括:
[0006]將按照數(shù)據(jù)版本變更先后順序生成的日志保存在非易失存儲器中,其中,所述日志包括事務(wù)狀態(tài)表、元數(shù)據(jù)文件及日志文件,所述事務(wù)狀態(tài)表用于記錄各個事務(wù)的狀態(tài),所述元數(shù)據(jù)文件用于記錄事務(wù)對應(yīng)的日志的位置以及下一個日志記錄的位置,所述日志文件用于記錄數(shù)據(jù)的變更版本;
[0007]當恢復(fù)內(nèi)存中的數(shù)據(jù)時,根據(jù)所述日志中事務(wù)狀態(tài)表的事務(wù)提交順序,使用事務(wù)提交后的日志文件版本對內(nèi)存中的數(shù)據(jù)進行恢復(fù)。
[0008]在第一方面的第一種可能的實現(xiàn)方式中,在所述恢復(fù)內(nèi)存中的數(shù)據(jù)之前,還包括:
[0009]標記事務(wù)的操作類型,所述操作類型包括回滾和提交。
[0010]結(jié)合第一方面或結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述將按照數(shù)據(jù)版本變更先后順序生成的日志保存在非易失存儲器中,包括:
[0011]當數(shù)據(jù)更新時,生成新版本的日志文件;
[0012]判斷新版本的日志文件對應(yīng)的歷史版本日志文件是否可見;
[0013]若所述新版本的日志文件對應(yīng)的歷史版本日志文件不可見,則保存所述新版本的日志文件;
[0014]若所述新版本的日志文件對應(yīng)的歷史版本日志文件可見,則進一步判斷所述新版本的日志文件是否為最后一條日志文件;
[0015]若所述新版本的日志文件是最后一條日志文件,則保存所述新版本的日志文件;
[0016]若所述新版本的日志文件不是最后一條日志文件,則清理所述新版本的日志文件。
[0017]結(jié)合第一方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,在將按照數(shù)據(jù)版本變更先后順序生成的日志保存在非易失存儲器中之后,還包括:
[0018]根據(jù)預(yù)設(shè)周期定期清理所述日志文件中的至少一個歷史變更版本或者清理除最后一條日志文件之外的其他日志文件。
[0019]結(jié)合第一方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述當恢復(fù)內(nèi)存中的數(shù)據(jù)時,根據(jù)所述日志中事務(wù)狀態(tài)表的事務(wù)提交順序,使用事務(wù)提交后的日志文件版本對內(nèi)存中的數(shù)據(jù)進行恢復(fù),包括:
[0020]讀取所述非易失存儲器中的日志;
[0021 ] 讀取所述日志中的事務(wù)狀態(tài)表;
[0022]根據(jù)所述日志中事務(wù)狀態(tài)表的事務(wù)提交順序,使用事務(wù)提交后的日志文件版本對內(nèi)存中的數(shù)據(jù)進行恢復(fù)。
[0023]本發(fā)明實施例第二方面提供了一種處理處理數(shù)據(jù)庫日志的裝置,包括:
[0024]保存單元,用于將按照數(shù)據(jù)版本變更先后順序生成的日志保存在非易失存儲器中,其中,所述日志包括事務(wù)狀態(tài)表、元數(shù)據(jù)文件及日志文件,所述事務(wù)狀態(tài)表用于記錄各個事務(wù)的狀態(tài),所述元數(shù)據(jù)文件用于記錄事務(wù)對應(yīng)的日志的位置以及下一個日志記錄的位置,所述日志文件用于記錄數(shù)據(jù)的變更版本;
[0025]恢復(fù)單元,用于當恢復(fù)內(nèi)存中的數(shù)據(jù)時,根據(jù)所述日志中事務(wù)狀態(tài)表的事務(wù)提交順序,使用事務(wù)提交后的日志文件版本對內(nèi)存中的數(shù)據(jù)進行恢復(fù)。
[0026]在第二方面的第一種可能的實現(xiàn)方式中,所述裝置還包括:
[0027]標記單元,用于標記事務(wù)的操作類型,所述操作類型包括回滾和提交。
[0028]結(jié)合第二方面或結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述保存單元具體用于:
[0029]當數(shù)據(jù)更新時,生成新版本的日志文件;
[0030]判斷新版本的日志文件對應(yīng)的歷史版本日志文件是否可見;
[0031 ] 若所述新版本的日志文件對應(yīng)的歷史版本日志文件不可見,則保存所述新版本的日志文件;
[0032]若所述新版本的日志文件對應(yīng)的歷史版本日志文件可見,則進一步判斷所述新版本的日志文件是否為最后一條日志文件;
[0033]若所述新版本的日志文件是最后一條日志文件,則保存所述新版本的日志文件;
[0034]若所述新版本的日志文件不是最后一條日志文件,則清理所述新版本的日志文件。
[0035]結(jié)合第二方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述裝置還包括:
[0036]清理單元,用于根據(jù)預(yù)設(shè)周期定期清理所述日志文件中的至少一個歷史變更版本或者清理除最后一條日志文件之外的其他日志文件。
[0037]結(jié)合第二方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述恢復(fù)單元具體用于:
[0038]讀取所述非易失存儲器中的日志;
[0039]讀取所述日志中的事務(wù)狀態(tài)表;
[0040]根據(jù)所述日志中事務(wù)狀態(tài)表的事務(wù)提交順序,使用事務(wù)提交后的日志文件版本對內(nèi)存中的數(shù)據(jù)進行恢復(fù)。
[0041]實施本發(fā)明實施例,具有如下有益效果:
[0042]通過利用NVM的特性,按照數(shù)據(jù)版本變更先后順序存儲對應(yīng)的日志,使得該日志可同時用來支持undo和redo日志的功能;且通過將日志以歷史版本的形式組織起來,這種分布式的組織形式,可消除了并發(fā)沖突熱點,提高了系統(tǒng)的性能,同時也解決了常規(guī)日志操作熱點爭用的問題,提升了數(shù)據(jù)操作的并發(fā)性;而在日志操作的磁盤爭用問題上,也提升了數(shù)據(jù)操作的性能和并發(fā)性。
【附圖說明】
[0043]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0044]圖1是本發(fā)明實施例一種處理數(shù)據(jù)庫日志的方法的流程示意圖;
[0045]圖2是本發(fā)明實施例一種處理數(shù)據(jù)庫日志的方法中更新日志的流程示意圖;
[0046]圖3是本發(fā)明實施例一種處理數(shù)據(jù)庫日志的方法中恢復(fù)數(shù)據(jù)的流程示意圖;
[0047]圖4是本發(fā)明實施例一種處理數(shù)據(jù)庫日志的裝置的組成示意圖;
[0048]圖5是本發(fā)明實施例另一種處理數(shù)據(jù)庫日志的裝置的組成示意圖;
[0049]圖6是本發(fā)明實施例另一種處理數(shù)據(jù)庫日志的裝置的組成示意圖。
【具體實施方式】
[0050]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。<