專利名稱:一種檢查點(diǎn)操作方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種檢查點(diǎn)操作方法及裝置。
背景技術(shù):
內(nèi)存相對于磁盤能夠提供較高的吞吐量和快速響應(yīng),數(shù)據(jù)庫系統(tǒng)通常將某些數(shù)據(jù)如讀寫較為繁瑣的數(shù)據(jù)優(yōu)先存放到內(nèi)存中,以提高數(shù)據(jù)讀寫速度,實(shí)現(xiàn)高速緩存。數(shù)據(jù)庫系統(tǒng)通常是以頁作為高速緩存的單位,當(dāng)進(jìn)程修改了高速緩存里的數(shù)據(jù)時,該頁就被內(nèi)核標(biāo)記為臟頁(DirtyPage),數(shù)據(jù)庫系統(tǒng)將會在合適的時間把臟頁的數(shù)據(jù)寫到磁盤中去,以保持高速緩存中的數(shù)據(jù)和磁盤中的數(shù)據(jù)是一致的。檢查點(diǎn)(Checkpoint)機(jī)制是使數(shù)據(jù)庫能夠在發(fā)生故障之后進(jìn)行恢復(fù)的機(jī)制。傳統(tǒng)的檢查點(diǎn)機(jī)制也稱為全量檢查點(diǎn)機(jī)制,是從內(nèi)存中獲取所有臟頁,并一次性將所有臟頁
寫入磁盤。由于使用傳統(tǒng)檢查點(diǎn)機(jī)制進(jìn)行數(shù)據(jù)庫恢復(fù)時,將所有臟頁一并寫入磁盤時,瞬間會產(chǎn)生大量的輸入/輸出(Input/Output, I/O)請求,而數(shù)據(jù)庫的正常運(yùn)行也會產(chǎn)生I/O請求,且數(shù)據(jù)庫的I/O能力是固定的,因此,使用傳統(tǒng)檢查點(diǎn)機(jī)制進(jìn)行數(shù)據(jù)庫恢復(fù)時,會影響數(shù)據(jù)庫系統(tǒng)的正常運(yùn)行,進(jìn)而影響數(shù)據(jù)庫系統(tǒng)的性能。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供一種檢查點(diǎn)操作方法及裝置,可以減少執(zhí)行檢查點(diǎn)操作時對數(shù)據(jù)庫系統(tǒng)性能的影響。為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:本發(fā)明實(shí)施例的第一方面,提供一種檢查點(diǎn)操作方法,包括:從內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,所述臟頁面列表中包含至少一個臟頁面表項(xiàng),每個所述臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個所述臟頁面表項(xiàng)包括所述臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號;根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序;根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。結(jié)合第一方面,在一種可能的實(shí)現(xiàn)方式中,所述根據(jù)各個臟頁面中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序,包括:遍歷所述臟頁面列表,按照所述文件號由小到大的順序排列所述臟頁面列表中的臟頁面表項(xiàng);將按照所述文件號排序后的臟頁面列表中,所述文件號相同的臟頁面表項(xiàng)按照所述塊號由小到大的順序進(jìn)行排列。結(jié)合第一方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤,包括:從所述調(diào)整后的臟頁面列表中讀取第一個臟頁面表項(xiàng)中的文件號和塊號;根據(jù)所述第一個臟頁面表項(xiàng)中的文件號和塊號從所述數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面;將所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤;根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次對所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)執(zhí)行上述讀取文件號和塊號、獲取臟頁面、以及將臟頁面寫入所述磁盤的操作。結(jié)合第一方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,在所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之前,所述方法還包括:獲取數(shù)據(jù)庫系統(tǒng)的狀態(tài)信息,所述狀態(tài)信息包括所述數(shù)據(jù)庫系統(tǒng)的輸入/輸出I/O利用率和中央處理器CPU利用率;所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤,包括:若所述狀態(tài)信息滿足預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤;若所述狀態(tài)信息不滿足所述預(yù)設(shè)條件,則暫停將所述臟頁面寫入所述磁盤;其中,所述狀態(tài)信息滿足所述預(yù)設(shè)條件具體為:所述I/O利用率小于第一預(yù)設(shè)閾值,且所述CPU利用率小于第二預(yù)設(shè)閾值。結(jié)合第一方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,在所述暫停將所述臟頁面寫入所述磁盤之后,所述方法還包括:在一個預(yù)設(shè)時間后,重新獲取所述數(shù)據(jù)庫系統(tǒng)的所述狀態(tài)信息;若所述狀態(tài)信息滿足所述預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的所述臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。結(jié)合第一方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述從內(nèi)存中獲取記錄有待寫入磁盤的臟頁面信息的臟頁面列表,包括:遍歷所述內(nèi)存中的所有的頁面,以識別所述臟頁面,所述臟頁面包含頁面標(biāo)記;根據(jù)各個頁面的所述頁面標(biāo)記獲取所述臟頁面的文件號和塊號,并根據(jù)所述臟頁面的文件號和塊號生成所述臟頁面列表。結(jié)合第一方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,在所述根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序之前,所述方法還包括:生成檢查點(diǎn)日志,所述檢查點(diǎn)日志用于記錄所述檢查點(diǎn)操作的開始時刻,以便所述數(shù)據(jù)庫系統(tǒng)在進(jìn)行數(shù)據(jù)庫系統(tǒng)恢復(fù)時,直接從所述檢查點(diǎn)操作的開始時刻所對應(yīng)的操作在日志文件中的對應(yīng)位置開始恢復(fù)所述數(shù)據(jù)庫系統(tǒng);其中,所述檢查點(diǎn)操作的開始時刻為開始從所述內(nèi)存獲取所述臟頁面列表的時亥IJ,所述日志文件用于記錄所述數(shù)據(jù)庫系統(tǒng)中的每一步操作。
結(jié)合第一方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,在所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之后,所述方法還包括:將所述檢查點(diǎn)日志寫入所述日志文件;更新所述磁盤中的控制文件,所述控制文件用于記錄檢查點(diǎn)信息,所述檢查點(diǎn)信息包括:所述檢查點(diǎn)操作開始時刻和所述檢查點(diǎn)操作開始時刻所對應(yīng)的操作在所述日志文件中的對應(yīng)位置。本發(fā)明實(shí)施例的第二方面,還提供一種檢查點(diǎn)操作裝置,包括:第一獲取單元,用于從內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,所述臟頁面列表中包含至少一個臟頁面表項(xiàng),每個所述臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個所述臟頁面表項(xiàng)包括所述臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號;調(diào)整單元,用于根據(jù)所述第一獲取單元獲取的各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序;第一寫入單元,用于根據(jù)所述調(diào)整單元調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。結(jié)合第二方面,在一種可能的實(shí)現(xiàn)方式中,所述調(diào)整單元,包括:第一遍歷模塊,用于遍歷所述臟頁面列表,按照所述文件號由小到大的順序排列所述臟頁面列表中的臟頁面表項(xiàng);排列模塊,用于將按照所述文件號排序后的臟頁面列表中,所述文件號相同的臟頁面表項(xiàng)按照所述塊號由小到大的順序進(jìn)行排列。結(jié)合第二方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述第一寫入單元,包括:讀取模塊,用于從所述調(diào)整后的臟頁面列表中讀取第一個臟頁面表項(xiàng)中的文件號和塊號;獲取模塊,用于根據(jù)所述第一個臟頁面表項(xiàng)中的文件號和塊號從所述數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面;寫入模塊,用于將所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤;其中,所述讀取模塊,還用于根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次讀取所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)的文件號和塊號;所述獲取模塊,還用于根據(jù)所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)的文件號和塊號,依次從所述數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)對應(yīng)的臟頁面;所述寫入模塊,還用于將所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)對應(yīng)的臟頁面依次寫入所述磁盤。結(jié)合第二方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述檢查點(diǎn)操作裝置,還包括:第二獲取單元,用于在所述第一寫入單元根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之前,獲取數(shù)據(jù)庫系統(tǒng)的狀態(tài)信息,所述狀態(tài)信息包括所述數(shù)據(jù)庫系統(tǒng)的輸入/輸出I/o利用率和中央處理器CPU利用率;所述第一寫入單元,還用于若所述狀態(tài)信息滿足預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤;所述第一寫入單元,還用于若所述狀態(tài)信息不滿足所述預(yù)設(shè)條件,則暫停將所述臟頁面寫入所述磁盤;其中,所述狀態(tài)信息滿足所述預(yù)設(shè)條件具體為:所述I/O利用率小于第一預(yù)設(shè)閾值,且所述CPU利用率小于第二預(yù)設(shè)閾值。結(jié)合第二方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述檢查點(diǎn)操作裝置,還包括:第三獲取單元,用于在所述第一寫入單元暫停將所述臟頁面寫入所述磁盤之后,在一個預(yù)設(shè)時間后,重新獲取所述數(shù)據(jù)庫系統(tǒng)的所述狀態(tài)信息;第二寫入單元,用于若所述狀態(tài)信息滿足所述預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的所述臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。結(jié)合第二方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述第一獲取單元,包括:第二遍歷模塊,用于遍歷所述內(nèi)存中的所有的頁面,以識別所述臟頁面,所述臟頁面包含頁面標(biāo)記;生成模塊,用于根據(jù)各個頁面的所述頁面標(biāo)記獲取所述臟頁面的文件號和塊號,并根據(jù)所述臟頁面的文件號和塊號生成所述臟頁面列表。結(jié)合第二方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述檢查點(diǎn)操作裝置,還包括:生成單元,用于在所述調(diào)整單元調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序之前,生成檢查點(diǎn)日志,所述檢查點(diǎn)日志用于記錄所述檢查點(diǎn)操作的開始時刻,以便所述數(shù)據(jù)庫系統(tǒng)在進(jìn)行數(shù)據(jù)庫系統(tǒng)恢復(fù)時,直接從所述檢查點(diǎn)操作的開始時刻所對應(yīng)的操作在日志文件中的對應(yīng)位置開始恢復(fù)所述數(shù)據(jù)庫系統(tǒng);其中,所述檢查點(diǎn)操作的開始時刻為開始從所述內(nèi)存獲取所述臟頁面列表的時亥IJ,所述日志文件用于記錄所述數(shù)據(jù)庫系統(tǒng)中的每一步操作。結(jié)合第二方面和上述可能的實(shí)現(xiàn)方式,在另一種可能的實(shí)現(xiàn)方式中,所述檢查點(diǎn)操作裝置,還包括:第三寫入單元,用于在所述第一寫入單元依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之后,將所述檢查點(diǎn)日志寫入所述日志文件;更新單元,用于更新所述磁盤中的控制文件,所述控制文件用于記錄檢查點(diǎn)信息,所述檢查點(diǎn)信息包括:所述檢查點(diǎn)操作開始時刻和所述檢查點(diǎn)操作開始時刻所對應(yīng)的操作在所述日志文件中的對應(yīng)位置。本發(fā)明實(shí)施例提供的檢查點(diǎn)操作方法及裝置,從數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,臟頁面列表中包含至少一個臟頁面表項(xiàng),每個臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個臟頁面表項(xiàng)包括臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號,然后根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整臟頁面列表中臟頁面表項(xiàng)的順序,最后根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次將臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤。與現(xiàn)有技術(shù)中,將所有臟頁一并寫入磁盤相比,可以根據(jù)臟頁面表項(xiàng)的排列順序
將臟頁面--寫入磁盤,不會瞬間會產(chǎn)生大量的輸入/輸出(Input/Output, I/O)請求,可
以減少執(zhí)行檢查點(diǎn)操作時對數(shù)據(jù)庫系統(tǒng)性能的影響。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例1中的一種檢查點(diǎn)操作方法流程圖;圖2為本發(fā)明實(shí)施例2中的一種檢查點(diǎn)操作方法流程圖;圖3為本發(fā)明實(shí)施例3中的一種檢查點(diǎn)操作裝置的組成示意圖;圖4為 本發(fā)明實(shí)施例3中的另一種檢查點(diǎn)操作裝置的組成示意圖;圖5為本發(fā)明實(shí)施例3中的另一種檢查點(diǎn)操作裝置的組成示意圖;圖6為本發(fā)明實(shí)施例4中的一種檢查點(diǎn)操作裝置的組成示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。另外,本文中術(shù)語“系統(tǒng)”和“網(wǎng)絡(luò)”在本文中常被可互換使用。本文中術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:單獨(dú)存在A,同時存在A和B,單獨(dú)存在B這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。實(shí)施例1本發(fā)明實(shí)施例提供一種檢查點(diǎn)操作方法,如圖1所示,包括:101、從數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,臟頁面列表中包含至少一個臟頁面表項(xiàng),每個臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個臟頁面表項(xiàng)包括所述臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號。其中,數(shù)據(jù)庫系統(tǒng)可以對內(nèi)存(緩沖區(qū)緩存)中的數(shù)據(jù)庫頁面進(jìn)行修改,但在每次更改后不將這些頁寫入磁盤。但是,數(shù)據(jù)庫系統(tǒng)發(fā)出對每個數(shù)據(jù)庫系統(tǒng)的檢查點(diǎn)命令,觸發(fā)檢查點(diǎn)操作裝置(檢查 點(diǎn)進(jìn)程)執(zhí)行相應(yīng)的檢查點(diǎn)操作?!皺z查點(diǎn)”將當(dāng)前內(nèi)存中已修改的頁(稱為“臟頁”)和檢查點(diǎn)日志信息從內(nèi)存寫入磁盤,并在日志文件中記錄檢查點(diǎn)日志信息,以便于數(shù)據(jù)庫系統(tǒng)在數(shù)據(jù)庫意外關(guān)閉或者崩潰后,進(jìn)行數(shù)據(jù)庫系統(tǒng)恢復(fù)時可以根據(jù)日志文件中記錄檢查點(diǎn)日志信息實(shí)現(xiàn)數(shù)據(jù)庫的快速恢復(fù)。示例性的,如果沒有檢查點(diǎn)操作,一旦數(shù)據(jù)庫系統(tǒng)由于斷電等原因崩潰,數(shù)據(jù)庫系統(tǒng)無法確定內(nèi)存中的哪些更新(修改)已經(jīng)寫入磁盤,哪些更新還未寫入磁盤。此時,數(shù)據(jù)庫系統(tǒng)則需要使用數(shù)據(jù)庫系統(tǒng)運(yùn)行以來的所有日志文件恢復(fù)該數(shù)據(jù)庫中的數(shù)據(jù)信息,整個恢復(fù)過程復(fù)雜而漫長。若定期執(zhí)行檢查點(diǎn)操作,則在執(zhí)行檢查點(diǎn)操作時,會在日志文件中寫入檢查點(diǎn)信息(檢查點(diǎn)日志),給系統(tǒng)打上一個時間戳,表明在這一時刻,以往所有的更新得到了確認(rèn),已經(jīng)寫入磁盤。在數(shù)據(jù)庫系統(tǒng)恢復(fù)時,只要從日志文件中最后一個檢查點(diǎn)開始就可以了,可以減少數(shù)據(jù)庫恢復(fù)的時間。具體的,獲取臟頁面列表的方法可以包括:遍歷數(shù)據(jù)庫系統(tǒng)內(nèi)存中的所有的頁面,然后根據(jù)頁面的頁面標(biāo)記獲取臟頁面的文件號和塊號,并根據(jù)臟頁面的文件號和塊號生成臟頁面列表。其中,數(shù)據(jù)庫系統(tǒng)中被修改后的頁面(臟頁面)中包含頁面標(biāo)記。需要說明的是,本發(fā)明實(shí)施例中,可以以檢查點(diǎn)操作裝置(硬件)作為方法實(shí)施例的執(zhí)行主體,也可以以檢查點(diǎn)進(jìn)程(軟件)作為方法實(shí)施例的執(zhí)行主體。102、根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整臟頁面列表中臟頁面表項(xiàng)的順序。具體的,根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整臟頁面列表中臟頁面表項(xiàng)的順序可以包括:遍歷臟頁面列表,按照文件號由小到大的順序排列臟頁面列表中的臟頁面表項(xiàng),然后將按照文件號排序后的臟頁面列表中,文件號相同的臟頁面表項(xiàng)按照塊號由小到大的順序進(jìn)行排列。103、根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次將臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤。其中,檢查點(diǎn)操作裝置根據(jù)更新調(diào)整后的臟頁面列表將臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤還包括:檢查點(diǎn)操作裝置根據(jù)更新調(diào)整后的臟頁面列表將臟頁面列表中至少一個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤。具體的,由于檢查點(diǎn)操作裝置每次在執(zhí)行檢查點(diǎn)操作時,獲取到的臟頁面列表中的檢查點(diǎn)中包含的臟頁面表項(xiàng)可能不止一個,因此檢查點(diǎn)操作裝置根據(jù)調(diào)整后的臟頁面列表寫入磁盤的臟頁面也不止一個。具體的,根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次將臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤,可以包括:從調(diào)整后的臟頁面列表中讀取第一個臟頁面表項(xiàng)中的文件號和塊號;根據(jù)第一個臟頁面表項(xiàng)中的文件號和塊號從數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取第一個臟頁面表項(xiàng)對應(yīng)的臟頁面;將第一個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤;根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次對第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)執(zhí)行上述讀取文件號和塊號、獲取臟頁面、以及將臟頁面寫入所述磁盤的操作。其中具體的,檢查點(diǎn)操作裝置將可以按照調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的排列順序,依次讀取每一個臟頁面的文件號和塊號,并根據(jù)文件號和塊號獲取相應(yīng)的臟頁面,并將相應(yīng)的臟頁面寫入磁盤,直至臟頁面列表中的所有臟頁面都被寫入磁盤。進(jìn)一步可選的,本發(fā)明實(shí)施例的方法還可以包括:在根據(jù)調(diào)整后的所述臟頁面列表將所述臟頁面寫入磁盤之前,獲取數(shù)據(jù)庫系統(tǒng)的狀態(tài)信息,狀態(tài)信息包括數(shù)據(jù)庫系統(tǒng)的輸入 / 輸出(Input/Output, I/O)利用率和中央處理器(Central Processing Unit, CPU)利用率,然后判斷狀態(tài)信息是否滿足預(yù)設(shè)條件;其中,所述狀態(tài)信息是否滿足預(yù)設(shè)條件具體為:1/0利用率是否小于第一預(yù)設(shè)閾值,且CPU利用率是否小于第二預(yù)設(shè)閾值。此時,根據(jù)調(diào)整后的臟頁面列表將臟頁面寫入磁盤具體為:若狀態(tài)信息滿足預(yù)設(shè)條件,則根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次將臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤。本發(fā)明實(shí)施例提供的一種檢查點(diǎn)操作方法,從數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,臟頁面列表中包含至少一個臟頁面表項(xiàng),每個臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個臟頁面表項(xiàng)包括臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號,然后根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整臟頁面列表中臟頁面表項(xiàng)的順序,最后根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次將臟頁面表項(xiàng)對應(yīng)的臟頁面寫入磁盤。與現(xiàn)有技術(shù)中,將所有臟頁一并寫入磁盤相比,可以根據(jù)臟頁面表項(xiàng)的排列順序?qū)⑴K頁面一一寫入磁盤,不會瞬間會產(chǎn)生大量的I/o請求,可以減少執(zhí)行檢查點(diǎn)操作時對數(shù)據(jù)庫系統(tǒng)性能的影響。實(shí)施例2本發(fā)明實(shí)施例提供一種檢查點(diǎn)操作方法,如圖2所示,包括:201、遍歷數(shù)據(jù)庫系統(tǒng)的內(nèi)存中的所有的頁面,以識別臟頁面,臟頁面包含頁面標(biāo)記。其中,數(shù)據(jù)庫中被修改后的頁面(臟頁面)中可以包含頁面標(biāo)記,以便于可以根據(jù)頁面標(biāo)記從內(nèi)存中獲取臟頁面的文件號和塊號,并生成臟頁面列表。其中,在數(shù)據(jù)庫系統(tǒng)對數(shù)據(jù)庫中的數(shù)據(jù)頁面進(jìn)行修改后,當(dāng)前內(nèi)存中的數(shù)據(jù)頁面可以包括未修改的頁面和已修改的頁面(臟頁面),因此,需要遍歷內(nèi)存中的所有的頁面,以便于從這些頁面中獲取已修改的頁面(臟頁面)。數(shù)據(jù)庫系統(tǒng)可以觸發(fā)檢查點(diǎn)進(jìn)程執(zhí)行檢查點(diǎn)操作,具體的,數(shù)據(jù)庫系統(tǒng)在固定的時間間隔內(nèi)可以觸發(fā)檢查點(diǎn)裝置進(jìn)程執(zhí)行檢查點(diǎn)操作;或者,數(shù)據(jù)庫系統(tǒng)可以不斷檢查內(nèi)存中的數(shù)據(jù)更新狀態(tài),當(dāng)內(nèi)存中的已更新的數(shù)據(jù)量高于預(yù)設(shè)的閾值范圍時,數(shù)據(jù)庫系統(tǒng)可以觸發(fā)激活檢查點(diǎn)進(jìn)程,執(zhí)行檢查點(diǎn)操作;或者,數(shù)據(jù)庫系統(tǒng)可以響應(yīng)于用戶的檢查點(diǎn)觸發(fā),觸發(fā)檢查點(diǎn)進(jìn)程執(zhí)行檢查點(diǎn)操作。需要說明的是,數(shù)據(jù)庫系統(tǒng)觸發(fā)檢查點(diǎn)操作的方法包括但不限于本實(shí)施例所列舉的方法,數(shù)據(jù)庫系統(tǒng)觸發(fā)檢查點(diǎn)操作的其他方法本實(shí)施例這里不再贅述。202、根據(jù)各個頁面的頁面標(biāo)記獲取臟頁面的文件號和塊號,并根據(jù)臟頁面的文件號和塊號生成臟頁面列表。示例性的,表I所示為一個簡單的臟頁面列表實(shí)例,臟頁面列表主要可以包含臟頁面的文件號和塊號。其中,臟頁面的文件號可以為該臟頁面被修改前在數(shù)據(jù)庫系統(tǒng)中所屬的文件的編號,臟頁面的塊號可以為該臟頁面被修改前在數(shù)據(jù)庫系統(tǒng)中所屬的文件中的編號。表I
權(quán)利要求
1.一種檢查點(diǎn)操作方法,其特征在于,包括: 從數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,所述臟頁面列表中包含至少一個臟頁面表項(xiàng),每個所述臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個所述臟頁面表項(xiàng)包括所述臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號; 根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序; 根據(jù)調(diào)整后的臟頁面列表中臟頁面表項(xiàng)的順序,依次將每個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。
2.根據(jù)權(quán)利要求1所述的檢查點(diǎn)操作方法,其特征在于,所述根據(jù)各個臟頁面中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序,包括: 遍歷所述臟頁面列表,按照所述文件號由小到大的順序排列所述臟頁面列表中的臟頁面表項(xiàng); 將按照所述文件號排序后的臟頁面列表中,所述文件號相同的臟頁面表項(xiàng)按照所述塊號由小到大的順序進(jìn)行排列。
3.根據(jù)權(quán)利要求1所述的檢查點(diǎn)操作方法,其特征在于,所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤,包括: 從所述調(diào)整后的臟頁面列表中讀取第一個臟頁面表項(xiàng)中的文件號和塊號; 根據(jù)所述第一個臟頁面表項(xiàng)中的文件號和塊號從所述數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面; 將所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤; 根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次對所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)執(zhí)行上述讀取文件號和塊號、獲取臟頁面、以及將臟頁面寫入所述磁盤的操作。
4.根據(jù)權(quán)利要求1所述的檢查點(diǎn)操作方法,其特征在于,在所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之前,所述方法還包括: 獲取所述數(shù)據(jù)庫系統(tǒng)的狀態(tài)信息,所述狀態(tài)信息包括所述數(shù)據(jù)庫系統(tǒng)的輸入/輸出I/O利用率和中央處理器CPU利用率; 所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤,包括: 若所述狀態(tài)信息滿足預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤; 若所述狀態(tài)信息不滿足所述預(yù)設(shè)條件,則暫停將所述臟頁面寫入所述磁盤; 其中,所述狀態(tài)信息滿足所述預(yù)設(shè)條件具體為:所述I/o利用率小于第一預(yù)設(shè)閾值,且所述CPU利用率小于第二預(yù)設(shè)閾值。
5.根據(jù)權(quán)利要求4所述的檢查點(diǎn)操作方法,其特征在于,在所述暫停將所述臟頁面寫入所述磁盤之后,所述方法還包括: 在一個預(yù)設(shè)時間后,重新獲取所述數(shù)據(jù)庫系統(tǒng)的所述狀態(tài)信息; 若所述狀態(tài)信息滿足所述預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的所述臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。
6.根據(jù)權(quán)利要求1所述的檢查點(diǎn)操作方法,其特征在于,所述從內(nèi)存中獲取記錄有待寫入磁盤的臟頁面信息的臟頁面列表,包括: 遍歷所述內(nèi)存中的所有的頁面,以識別所述臟頁面,所述臟頁面包含頁面標(biāo)記; 根據(jù)各個頁面的所述頁面標(biāo)記獲取所述臟頁面的文件號和塊號,并根據(jù)所述臟頁面的文件號和塊號生成所述臟頁面列表。
7.根據(jù)權(quán)利要求1所述的檢查點(diǎn)操作方法,其特征在于,在所述根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序之前,所述方法還包括: 生成檢查點(diǎn)日志,所述檢查點(diǎn)日志用于記錄所述檢查點(diǎn)操作的開始時刻,以便所述數(shù)據(jù)庫系統(tǒng)在進(jìn)行數(shù)據(jù)庫系統(tǒng)恢復(fù)時,直接從所述檢查點(diǎn)操作的開始時刻所對應(yīng)的操作在日志文件中的對應(yīng)位置開始恢復(fù)所述數(shù)據(jù)庫系統(tǒng); 其中,所述檢查點(diǎn)操作的開始時刻為開始從所述內(nèi)存獲取所述臟頁面列表的時刻,所述日志文件用于記錄所述數(shù)據(jù)庫系統(tǒng)中的每一步操作。
8.根據(jù)權(quán)利要求7所述的檢查點(diǎn)操作方法,其特征在于,在所述根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之后,所述方法還包括: 將所述檢查點(diǎn)日志寫入所述日志文件; 更新所述磁盤中的控制文件,所述控制文件用于記錄檢查點(diǎn)信息,所述檢查點(diǎn)信息包括:所述檢查點(diǎn)操作開始時刻和所述檢查點(diǎn)操作開始時刻所對應(yīng)的操作在所述日志文件中的對應(yīng)位置。
9.一種檢查點(diǎn)操作裝置,其特征在于,包括: 第一獲取單元,用于從內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,所述臟頁面列表中包含至少一個臟頁面表項(xiàng),每個所述臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個所述臟頁面表項(xiàng)包括所述臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號; 調(diào)整單元,用于根據(jù)所述第一獲取單元獲取的各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序; 第一寫入單元,用于根據(jù)所述調(diào)整單元調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。
10.根據(jù)權(quán)利要求9所述的檢查點(diǎn)操作裝置,其特征在于,所述調(diào)整單元,包括: 第一遍歷模塊,用于遍歷所述臟頁面列表,按照所述文件號由小到大的順序排列所述臟頁面列表中的臟頁面表項(xiàng); 排列模塊,用于將按照所述文件號排序后的臟頁面列表中,所述文件號相同的臟頁面表項(xiàng)按照所述塊號由小到大的順序進(jìn)行排列。
11.根據(jù)權(quán)利要求9所述的檢查點(diǎn)操作裝置,其特征在于,所述第一寫入單元,包括: 讀取模塊,用于從所述調(diào)整后的臟頁面列表中讀取第一個臟頁面表項(xiàng)中的文件號和塊號; 獲取模塊,用于根據(jù)所述第一個臟頁面表項(xiàng)中的文件號和塊號從所述數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面; 寫入模塊,用于將所述第一個臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤;其中,所述讀取模塊,還用于根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次讀取所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)的文件號和塊號; 所述獲取模塊,還用于根據(jù)所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)的文件號和塊號,依次從所述數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)對應(yīng)的臟頁面; 所述寫入模塊,還用于將所述第一個臟頁面表項(xiàng)之后的每一個臟頁面表項(xiàng)對應(yīng)的臟頁面依次寫入所述磁盤。
12.根據(jù)權(quán)利要求9所述的檢查點(diǎn)操作裝置,其特征在于,還包括: 第二獲取單元,用于在所述第一寫入單元根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之前,獲取數(shù)據(jù)庫系統(tǒng)的狀態(tài)信息,所述狀態(tài)信息包括所述數(shù)據(jù)庫系統(tǒng)的輸入/輸出I/O利用率和中央處理器CPU利用率; 所述第一寫入單元,還用于若所述狀態(tài)信息滿足預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤; 所述第一寫入單元,還用于若所述狀態(tài)信息不滿足所述預(yù)設(shè)條件,則暫停將所述臟頁面寫入所述磁盤; 其中,所述狀態(tài)信息滿足所述預(yù)設(shè)條件具體為:所述I/O利用率小于第一預(yù)設(shè)閾值,且所述CPU利用率小于第二預(yù)設(shè)閾值。
13.根據(jù)權(quán)利要求12所述的檢查點(diǎn)操作裝置,其特征在于,還包括: 第三獲取單元,用于在所述第一寫入單元暫停將所述臟頁面寫入所述磁盤之后,在一個預(yù)設(shè)時間后,重新獲取所述數(shù)據(jù)庫系統(tǒng)的所述狀態(tài)信息; 第二寫入單元,用于若所述狀態(tài)信息滿足所述預(yù)設(shè)條件,則根據(jù)所述調(diào)整后的所述臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。
14.根據(jù)權(quán)利要求9所述的檢查點(diǎn)操作裝置,其特征在于,所述第一獲取單元,包括: 第二遍歷模塊,用于遍歷所述內(nèi)存中的所有的頁面,以識別所述臟頁面,所述臟頁面包含頁面標(biāo)記; 生成模塊,用于根據(jù)各個頁面的所述頁面標(biāo)記獲取所述臟頁面的文件號和塊號,并根據(jù)所述臟頁面的文件號和塊號生成所述臟頁面列表。
15.根據(jù)權(quán)利要求9所述的檢查點(diǎn)操作裝置,其特征在于,還包括: 生成單元,用于在所述調(diào)整單元調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序之前,生成檢查點(diǎn)日志,所述檢查點(diǎn)日志用于記錄所述檢查點(diǎn)操作的開始時刻,以便所述數(shù)據(jù)庫系統(tǒng)在進(jìn)行數(shù)據(jù)庫系統(tǒng)恢復(fù)時,直接從所述檢查點(diǎn)操作的開始時刻所對應(yīng)的操作在日志文件中的對應(yīng)位置開始恢復(fù)所述數(shù)據(jù)庫系統(tǒng); 其中,所述檢查點(diǎn)操作的開始時刻為開始從所述內(nèi)存獲取所述臟頁面列表的時刻,所述日志文件用于記錄所述數(shù)據(jù)庫系統(tǒng)中的每一步操作。
16.根據(jù)權(quán)利要求15所述的檢查點(diǎn)操作裝置,其特征在于,還包括: 第三寫入單元,用于在所述第一寫入單元依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤之后,將所述檢查點(diǎn)日志寫入所述日志文件; 更新單元,用于更新所述磁盤中的控制文件,所述控制文件用于記錄檢查點(diǎn)信息,所述檢查點(diǎn)信息包括:所述檢查點(diǎn)操作開始時刻和所述檢查點(diǎn)操作開始時刻所對應(yīng)的操作在所述日志文件中 的對應(yīng)位置。
全文摘要
本發(fā)明實(shí)施例公開了一種檢查點(diǎn)操作方法及裝置,涉及計(jì)算機(jī)技術(shù)領(lǐng)域,可以減少執(zhí)行檢查點(diǎn)操作時對數(shù)據(jù)庫系統(tǒng)性能的影響。具體方案為從數(shù)據(jù)庫系統(tǒng)的內(nèi)存中獲取記錄有待寫入磁盤的臟頁面的信息的臟頁面列表,臟頁面列表中包含至少一個臟頁面表項(xiàng),每個臟頁面表項(xiàng)對應(yīng)于一個臟頁面,且每個臟頁面表項(xiàng)包括臟頁面表項(xiàng)對應(yīng)的臟頁面的文件號和塊號;根據(jù)各個臟頁面表項(xiàng)中的文件號和塊號調(diào)整所述臟頁面列表中所述臟頁面表項(xiàng)的順序;根據(jù)調(diào)整后的臟頁面列表中所述臟頁面表項(xiàng)的順序,依次將所述臟頁面表項(xiàng)對應(yīng)的臟頁面寫入所述磁盤。本發(fā)明用于數(shù)據(jù)庫的檢查點(diǎn)操作過程中。
文檔編號G06F17/30GK103177085SQ20131006037
公開日2013年6月26日 申請日期2013年2月26日 優(yōu)先權(quán)日2013年2月26日
發(fā)明者李健, 劉輝軍 申請人:華為技術(shù)有限公司