專利名稱:延遲日志生成的方法及其設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的日志生成(logging) 方法,更具體地說,涉及一種用于在更新DB并且生成日志記錄(log record) 時(shí)可通過使用日志項(xiàng)來減小所述日志大小的日志生成方法和設(shè)備。
背景技術(shù):
使用數(shù)據(jù)庫管理系統(tǒng)(DBMS)的目的在于系統(tǒng)地管理數(shù)據(jù),從而更加 容易地開發(fā)應(yīng)用程序,并且在任何情況下安全地維護(hù)并管理數(shù)據(jù)。 一般來說, DBMS根據(jù)數(shù)據(jù)改變來執(zhí)行日志生成,以保證這種數(shù)據(jù)庫(DB )的穩(wěn)定性(持 久性)。
日志生成是DBMS的基本功能,其中,發(fā)生數(shù)據(jù)的插入、刪除或者更新, 并且所述數(shù)據(jù)的插入、刪除或者更新被記錄到穩(wěn)定的存儲(chǔ)裝置(諸如,盤驅(qū) 動(dòng))中,以通過使用異常情況下生成的日志的信息來允許恢復(fù)到先前的DB 狀態(tài)。
在DBMS中,持久性的概念是業(yè)務(wù)處理的重要特征之一,所述重要特征 包括原子性、 一致性、隔離性和持久性(ACID)。持久性表示如果成功 完成業(yè)務(wù),則即使發(fā)生系統(tǒng)錯(cuò)誤也應(yīng)當(dāng)保證在DB中反映出該業(yè)務(wù)處理的結(jié) 果。通常,DBMS將在進(jìn)行業(yè)務(wù)處理時(shí)發(fā)生的狀態(tài)改變的內(nèi)容記錄為曰志, 并且將該日志存儲(chǔ)到諸如盤的穩(wěn)定的存儲(chǔ)介質(zhì)中。因此,DB的狀態(tài)改變被記 錄在日志中,并且該日志支持DB的狀態(tài)的一致性維護(hù)。在其最簡表格中, 由業(yè)務(wù)改變的所有內(nèi)容被記錄在盤上的日志文件中;然而,業(yè)務(wù)的每一項(xiàng)操 作都伴有盤輸入和輸出_|喿作,所以DBMS的性能被大大地降低。 圖1是示出根據(jù)傳統(tǒng)技術(shù)的DBMS的日志生成處理的示意圖。 在盤(即,永久存儲(chǔ)介質(zhì))驅(qū)動(dòng)120的預(yù)定區(qū)域中的DB 121包括數(shù)據(jù)
文件121a和日志文件121b。當(dāng)執(zhí)行應(yīng)用程序引起通過業(yè)務(wù)執(zhí)行更新時(shí),相關(guān) 的數(shù)據(jù)文件以頁為單位被載入到存儲(chǔ)器110的緩沖器113中。如果在存儲(chǔ)器 110中執(zhí)行與數(shù)據(jù)頁的業(yè)務(wù)相應(yīng)的區(qū)域llla的更新,則在日志頁112中寫入 與該更新相應(yīng)的日志記錄112b。根據(jù)預(yù)寫式日志(WAL)協(xié)議,所述更新的 輸入頁和產(chǎn)生的日志頁被分別存儲(chǔ)在盤驅(qū)動(dòng)120的數(shù)據(jù)文件121a和日志文件 121b中。
WAL協(xié)議是首先將日志頁存儲(chǔ)在盤中,并隨后存儲(chǔ)數(shù)據(jù)頁,以排除在未 完成的業(yè)務(wù)的改變內(nèi)容被存儲(chǔ)在盤中時(shí)發(fā)生的錯(cuò)誤的過程。根據(jù)WAL協(xié)議, 當(dāng)再次運(yùn)行系統(tǒng)時(shí),系統(tǒng)可安全地被恢復(fù)到異常發(fā)生之前的狀態(tài)。 圖2是示出根據(jù)傳統(tǒng)技術(shù)的日志記錄格式的數(shù)據(jù)結(jié)構(gòu)的示圖。 如圖2所示,形成具有多個(gè)字段的包括更新信息的日志記錄。 先前日志序列號(hào)(LSN)是由預(yù)定業(yè)務(wù)生成的先前日志記錄的LSN。換 句話說,LSN是日志記錄的標(biāo)識(shí)號(hào)(ID )并且指示日志頁中記錄日志記錄的 位置。因此,LSN包括日志頁的編號(hào)以及所述日志頁內(nèi)的偏移。
除了LSN之外,日志記錄包括業(yè)務(wù)ID、指示日志記錄類型的類型字 段、指示更新的數(shù)據(jù)頁的編號(hào)的頁ID、更新數(shù)據(jù)的長度、更新的數(shù)據(jù)頁內(nèi)的 偏移和分別與更新前后的鏡像對(duì)應(yīng)的前鏡像和后鏡像。
圖3A和圖3B示出了根據(jù)傳統(tǒng)技術(shù)在執(zhí)行更新時(shí)生成的日志記錄。 參照?qǐng)D3A,可以確定在數(shù)據(jù)頁1 310中發(fā)生過兩次更新4乘作。首先,位 于數(shù)據(jù)頁1 310的偏移10的數(shù)據(jù)"name" 311被改為"kate" 311a,并且位于偏 移31的數(shù)據(jù)"0000" 312被改為"0021" 312a。
這里,從日志記錄1 (LR1 ) 320可以確定更新前的鏡像的值"name"被改 為更新后的鏡像的值"kate"。從日志記錄2 (LR2) 330可以確定值"OOOO"被 改為"0021"。當(dāng)日志記錄320和330的每一個(gè)被生成時(shí),它們被同時(shí)記錄在 日志頁中。
如果以這種方式繼續(xù)執(zhí)行更新,則將被寫在日志頁中的日志記錄的數(shù)量 與更新的頻率成比例地增加。
圖3B示出了以下所述。參照?qǐng)D3B,通過以下參照上述圖3A描述的日 志記錄340和350,由其他更新操作導(dǎo)致了從"kate"改為"john"的日志記錄360 以及被從"0021"改為"0701"的日志記錄370被生成,并且可以確定日志記錄 380被隨后連續(xù)地生成。
以這種方式,由日志生成處理引起的日志大小可變成實(shí)際更新的數(shù)據(jù)大 小的幾倍到幾百倍。日志大小的增加引起盤輸入和/或輸出,從而降低更新操 作的速度,并且減少了盤上所剩的可用空間。此外,當(dāng)由于異常情況的發(fā)生 而執(zhí)行恢復(fù)操作時(shí),從盤上讀取并處理很大的日志數(shù)據(jù)增加了恢復(fù)需要的時(shí)間。
發(fā)明內(nèi)容
本發(fā)明提供一種在由更新生成日志記錄時(shí)通過使用日志項(xiàng)來減小日志大 小的日志生成方法和設(shè)備。
根據(jù)本發(fā)明的一方面,提供了一種在數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的日 志生成方法,所述方法包括存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息;在完成數(shù) 據(jù)頁的更新時(shí)讀取存儲(chǔ)的日志信息;通過使用讀取的日志信息生成日志記錄; 和將生成的日志記錄寫入日志頁。
存儲(chǔ)日志信息的步驟可包括生成包括正被更新的數(shù)據(jù)頁的偏移值的曰 志項(xiàng);將正被更新的數(shù)據(jù)頁的日志信息記錄在生成的日志項(xiàng)中;和通過使用 記錄的日志信息合并至少兩個(gè)或者多個(gè)日志項(xiàng)。
在合并至少兩個(gè)或者多個(gè)日志項(xiàng)的步驟中,如果存在關(guān)于與更新的數(shù)據(jù) 頁的區(qū)域相同的區(qū)域而已經(jīng)生成的日志項(xiàng),則可以將其中記錄有正被更新的 數(shù)據(jù)頁的日志信息的日志項(xiàng)添加到已經(jīng)生成的日志項(xiàng), >(人而合并日志項(xiàng)。
在合并至少兩個(gè)或者多個(gè)日志項(xiàng)的步驟中,如果存在關(guān)于與更新的數(shù)據(jù) 頁的區(qū)域相鄰的區(qū)域而已經(jīng)生成的日志項(xiàng),則關(guān)于所述相鄰區(qū)域,可以對(duì)包 括在已經(jīng)生成的日志項(xiàng)中的偏移值進(jìn)行改變,從而合并日志項(xiàng)。
在合并至少兩個(gè)或者多個(gè)日志項(xiàng)的步驟中,如果存在關(guān)于與正被更新的 數(shù)據(jù)頁的區(qū)域重疊的區(qū)域而已經(jīng)生成的日志項(xiàng),則可以關(guān)于所述重疊區(qū)域, 對(duì)包括在已經(jīng)生成的日志項(xiàng)中的偏移值進(jìn)行改變,從而合并日志項(xiàng)。
當(dāng)完成對(duì)數(shù)據(jù)頁的更新操作時(shí)可以執(zhí)行合并至少兩個(gè)或者多個(gè)日志項(xiàng)的步驟。
所述完成數(shù)據(jù)頁的更新操作的時(shí)間可以是提交執(zhí)行更新操作的業(yè)務(wù)的時(shí) 間,或者數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除的時(shí)間。
所述生成的日志項(xiàng)關(guān)于正被更新的數(shù)據(jù)頁并且關(guān)于執(zhí)行更新操作的每個(gè) 業(yè)務(wù)被管理。
所述產(chǎn)生的日志項(xiàng)可根據(jù)包括在該日志項(xiàng)中的偏移值被分類。
生成日志項(xiàng)和記錄日志信息可使用恢復(fù)和獨(dú)立開發(fā)語義算法(ARIES ), 并且遵守預(yù)寫式日志(WAL)協(xié)議。
根據(jù)本發(fā)明的另一方面,提供一種在DBMS中的日志生成方法,所述方 法包括生成正被更新的數(shù)據(jù)頁的復(fù)制的鏡像,所述鏡像與更新之前的所述 原始鏡像相同;生成正被更新的數(shù)據(jù)頁的日志項(xiàng);合并生成的日志項(xiàng);對(duì)原 始鏡像執(zhí)行更新操作;和如果完成更新操作,則通過l吏用所述原始鏡像、復(fù) 制的鏡像和合并的日志項(xiàng)生成日志記錄。
在合并生成的日志項(xiàng)的步驟中,如果存在關(guān)于與正被更新的數(shù)據(jù)頁的區(qū) 域相同的區(qū)域而已經(jīng)生成的日志項(xiàng),則可以將關(guān)于正一皮更新的數(shù)據(jù)頁的曰志 項(xiàng)添加到已經(jīng)生成的日志項(xiàng),從而合并日志項(xiàng)。
在合并生成的日志項(xiàng)的步驟中,如果存在關(guān)于與更新的數(shù)據(jù)頁的區(qū)域相 鄰的區(qū)域而已經(jīng)生成的日志項(xiàng),則關(guān)于所述相鄰區(qū)域可以對(duì)包括在已經(jīng)生成 的日志項(xiàng)中的偏移值進(jìn)行改變,從而合并日志項(xiàng)。
在合并生成的日志項(xiàng)的步驟中,如果存在關(guān)于與更新的數(shù)據(jù)頁的區(qū)域重 疊的區(qū)域而已經(jīng)生成的日志項(xiàng),則關(guān)于所述重疊區(qū)域可以對(duì)包括在已經(jīng)生成 的曰志項(xiàng)中的偏移值進(jìn)行改變,從而合并日志項(xiàng)。
當(dāng)完成對(duì)數(shù)據(jù)頁的更新操作時(shí)可以執(zhí)行合并生成的日志項(xiàng)的步驟。
所述完成更新操作的時(shí)間可以是提交執(zhí)行更新操作的業(yè)務(wù)的時(shí)間,或者 原始鏡像的數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除的時(shí)間。
所述方法還可以包括在管理始鏡像、復(fù)制的鏡像和執(zhí)行更新操作的業(yè) 務(wù)之間的關(guān)系的緩存頁信息單元中寄存原始鏡像、復(fù)制的鏡像和關(guān)于所述業(yè) 務(wù)的信息。
每個(gè)業(yè)務(wù)被管理。
所述生成的日志項(xiàng)可以根據(jù)包括在該日志項(xiàng)中的偏移值被分類。
日志項(xiàng)可以具有正被更新的數(shù)據(jù)頁的區(qū)域的長度和正被更新的數(shù)據(jù)頁
中的更新的區(qū)域的開始位置,或者正被更新的數(shù)據(jù)頁中的更新的區(qū)域的開始
位置和結(jié)束位置。
如果存在多項(xiàng)執(zhí)行更新操作的業(yè)務(wù),并且所述更新業(yè)務(wù)被同時(shí)執(zhí)行,則 可以應(yīng)用嚴(yán)^f各兩^:鎖(2PL)協(xié)議。
如果在完成更新時(shí)所述業(yè)務(wù)被提交,則所述方法還可以包括確定在數(shù) 據(jù)頁中是否存在另一業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù),則 在復(fù)制的鏡像的相應(yīng)區(qū)域內(nèi)記錄與其提交的業(yè)務(wù)的各個(gè)日志項(xiàng)相應(yīng)的原始鏡 像的更新的區(qū)域;和如果確定結(jié)果指示lt據(jù)頁中不存在其他業(yè)務(wù),則刪除復(fù) 制的鏡像。
如果在沒有完成更新操:作時(shí)所述業(yè)務(wù)異常中止,則所述方法還可以包括 確定在數(shù)據(jù)頁中是否存在另一業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一 業(yè)務(wù),則在原始鏡像的相應(yīng)區(qū)域內(nèi)記錄與異常中止的業(yè)務(wù)的各個(gè)曰志項(xiàng)相應(yīng) 的更新前的復(fù)制的鏡像的區(qū)域;和如果確定結(jié)果指示數(shù)據(jù)頁中不存在其他業(yè) 務(wù),則將復(fù)制的鏡像替換為原始鏡像。
在完成更新操作時(shí)業(yè)務(wù)被提交,則所述方法還可以包括確定在數(shù)據(jù)頁 中是否存在另一業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù),則在緩 存頁信息單元中記錄所述業(yè)務(wù)被提交;和如果確定結(jié)果指示數(shù)據(jù)頁中不存在 其他業(yè)務(wù),則刪除復(fù)制的鏡像。
如果在沒有完成更新操作時(shí)所述業(yè)務(wù)異常中止,則所述方法還可以包括 確定在數(shù)據(jù)頁中是否存在另一業(yè)務(wù);通過參照緩存頁信息單元確定在數(shù)據(jù)頁 中是否存在另一提交的業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù)或 者另一提交的業(yè)務(wù),則在原始鏡像的相應(yīng)區(qū)域內(nèi)記錄與異常中止的業(yè)務(wù)的各 個(gè)曰志項(xiàng)相應(yīng)的更新前的復(fù)制的鏡像的區(qū)域;和如果確定結(jié)果指示數(shù)據(jù)頁中 不存在其他業(yè)務(wù)或者其他提交的業(yè)務(wù),則將復(fù)制的鏡像替換為原始鏡像。
如果在完成更新業(yè)務(wù)時(shí)原始鏡像的數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除,則所述方法還可 以包括生成轉(zhuǎn)儲(chǔ)清除的數(shù)據(jù)頁的全部日志項(xiàng)的日志記錄;和刪除復(fù)制的鏡 像。
才艮據(jù)本發(fā)明的另一方面,提供一種在DBMS中的日志生成設(shè)備,包括 曰志存儲(chǔ)單元,存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息;日志讀取單元,在完成 數(shù)據(jù)頁的更新搡作時(shí)讀取存儲(chǔ)在日志存儲(chǔ)單元中的日志信息;和日志控制單 元,基于讀取的日志信息生成日志記錄,并將生成的日志記錄記錄在日志頁 中。
根據(jù)本發(fā)明的另一方面,提供一種在DBMS中的日志生成設(shè)備,所述設(shè) 備包括業(yè)務(wù)控制單元,管理執(zhí)行數(shù)據(jù)頁的更新,操作的業(yè)務(wù);日志控制單元, 將根據(jù)由業(yè)務(wù)控制單元管理的業(yè)務(wù)的更新操作生成的日志信息進(jìn)行合并,從
而生成日志記錄,并將生成的日志記錄記錄在日志頁中;和緩存控制單元, 管理被執(zhí)行更新操作的數(shù)據(jù)頁,并且管理所述日志頁,從而可以將所述數(shù)據(jù) 頁和日志頁輸入存儲(chǔ)介質(zhì),或者從存儲(chǔ)介質(zhì)輸出所述數(shù)據(jù)頁和日志頁。
日志控制單元可以包括第一存儲(chǔ)單元,存儲(chǔ)復(fù)制的鏡像,所述復(fù)制的 鏡像與正被執(zhí)行更新操作的數(shù)據(jù)頁的更新之前的原始鏡像相同;第二存儲(chǔ)單 元,存儲(chǔ)日志項(xiàng),所述日志項(xiàng)根據(jù)由業(yè)務(wù)控制單元管理的業(yè)務(wù)的更新操作被 生成;日志合并單元,將至少兩個(gè)或者多個(gè)存儲(chǔ)在第二存儲(chǔ)單元的日志項(xiàng)進(jìn)
行合并;和日志輸出單元,在完成更新操作時(shí)通過使用原始鏡像、復(fù)制的鏡
像和合并的日志項(xiàng)生成日志記錄,并且將生成的日志記錄記錄在日志頁中。 緩存控制單元可以管理緩存頁信息單元,在所述緩存頁信息單元中寄存
有原始鏡像、復(fù)制的鏡像和關(guān)于執(zhí)行更新操作的業(yè)務(wù)的信息。
根據(jù)本發(fā)明的另一方面,提供一種其上實(shí)現(xiàn)有用于執(zhí)行所述方法的計(jì)算
機(jī)程序的計(jì)算機(jī)可讀記錄介質(zhì)。
通過參照附圖對(duì)本發(fā)明示例性實(shí)施例的詳細(xì)描述,本發(fā)明的以上和其他
方面將變得更加清楚,其中
圖1是示出根據(jù)傳統(tǒng)技術(shù)的DBMS的日志生成處理的示意圖2是示出才艮據(jù)傳統(tǒng)技術(shù)的日志記錄格式的tt據(jù)結(jié)構(gòu)的示圖3A和圖3B示出了根據(jù)傳統(tǒng)技術(shù)在執(zhí)行更新時(shí)生成的日志記錄;
圖4A和圖4B示出了根據(jù)本發(fā)明示例性實(shí)施例的合并多條日志記錄的結(jié)
果;
圖5是示出才艮據(jù)本發(fā)明示例性實(shí)施例的在DB中的日志生成方法的流程
圖6是根據(jù)本發(fā)明示例性實(shí)施例的更加詳細(xì)地示出圖5中所示的日志信 息的存儲(chǔ)的流程圖7是示出根據(jù)本發(fā)明另一示例性實(shí)施例的在DB中的日志生成方法的 流程圖8A和圖8B是示出根據(jù)本發(fā)明示例性實(shí)施例的日志項(xiàng)格式的數(shù)據(jù)結(jié)構(gòu) 的示圖9是示出根據(jù)本發(fā)明示例性實(shí)施例的通過一次業(yè)務(wù)更新的示例的示
圖10是示出根據(jù)本發(fā)明示例性實(shí)施例的通過兩次或者多次業(yè)務(wù)更新的 示例的示圖11是示出根據(jù)本發(fā)明示例性實(shí)施例的每一種模式的更新操作的示圖; 圖12是示出才艮據(jù)本發(fā)明示例性實(shí)施例的作為圖11中所示的操作完成的 結(jié)果被生成的日志項(xiàng)的示圖13示出了根據(jù)本發(fā)明示例性實(shí)施例的用于生成日志項(xiàng)的處理的偽代
碼;
圖14示出了才艮據(jù)本發(fā)明示 圖15示出了沖艮據(jù)本發(fā)明 代碼;
圖16示出了根據(jù)本發(fā)明示例性實(shí)施例的用于轉(zhuǎn)儲(chǔ)清除數(shù)據(jù)頁的處理的 偽代碼;
圖17是示出了根據(jù)本發(fā)明示例性實(shí)施例的數(shù)據(jù)庫日志生成設(shè)備的示意 性功能框圖18是示出根據(jù)本發(fā)明示例性實(shí)施例的數(shù)據(jù)庫日志生成設(shè)備的功能性 框示圖;和
圖22是示出根據(jù)本發(fā)明示例性實(shí)施例的在DB的每一個(gè)模塊中減少的日 志記錄的比較表。
具體實(shí)施方式
現(xiàn)在將參照附圖更全面地描述本發(fā)明的示例性實(shí)施例。 圖4A到圖4B示出了根據(jù)本發(fā)明實(shí)施例的合并多條日志記錄的結(jié)果。 參照?qǐng)D4A,可以從箭頭的左側(cè)看到3條日志記錄410到430??梢源_定 這3條日志記錄410到430是通過更新相對(duì)于同一數(shù)據(jù)頁具有同一偏移值的 數(shù)據(jù)(即,通過更新相同區(qū)域的數(shù)據(jù))而被生成的。由于非平衡(non-equalized) 更新操作所以頻繁出現(xiàn)日志記錄410到430的這些類型。頻繁執(zhí)行更新的數(shù) 據(jù)區(qū)域的日志記錄一般具有這種類型,例如,同一用戶訪問頻率的日志記錄, 或者同一音樂文件被收聽的次數(shù)的日志記錄。在這種情況下,利用箭頭右側(cè)
的一條日志記錄440,僅僅"0"(即,第一鏡像)和"3"(即,最后的鏡像) 的信息就足以維護(hù)(maintain)業(yè)務(wù)的持久性(durability )。
參照?qǐng)D4B,箭頭左側(cè)的3條日志記錄450到470不涉及相同區(qū)域的數(shù)據(jù) 更新。然而,當(dāng)與偏移值20、 24和28相關(guān)的各更新的區(qū)域的數(shù)據(jù)長度(4 字節(jié))被彼此比較時(shí),可以確定包含將被更新的數(shù)據(jù)("0")的區(qū)域相鄰。因 此,可以獲得用于將與從偏移值20開始的12字節(jié)相應(yīng)的數(shù)據(jù)"000"更新為值 "lll"的(如箭頭右側(cè)的日志記錄480) —條日志記錄。
圖5是示出才艮據(jù)本發(fā)明示例性實(shí)施例的在DB中的日志生成方法的流程圖。
首先,在操作510存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息。也就是說,每當(dāng) 執(zhí)行更新時(shí),臨時(shí)地存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息(業(yè)務(wù)ID、類型、頁 ID、更新數(shù)據(jù)長度、偏移值、更新前的鏡像和更新后的鏡像),而不是立即生 成日志記錄并在日志頁中寫入該日志記錄。隨后,如果完成更新操作,則在 操作520讀取存儲(chǔ)的日志信息。也就是說,如果執(zhí)行更新操作的業(yè)務(wù)提交 (commit)或者正被更新的數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除,則讀取存儲(chǔ)的日志信息。在 操作530使用所述讀取的日志信息來生成日志記錄,并且在操作540在所述 日志頁中寫入生成的日志記錄。
在用于生成并寫入日志記錄的操作中,使用恢復(fù)和獨(dú)立開發(fā)語義算法 (ARIES),并且可以使用的WAL協(xié)議遵守ARIES。因此,僅對(duì)數(shù)據(jù)頁的更 新鏡像生成日志記錄,并且在存儲(chǔ)所述數(shù)據(jù)頁之前存儲(chǔ)該日志記錄。
現(xiàn)在將描述關(guān)于存儲(chǔ)正被更新的數(shù)據(jù)頁日志信息的詳細(xì)操作。
圖6是根據(jù)本發(fā)明示例性實(shí)施例的更加詳細(xì)地示出圖5中所示的操作510 的流程圖。
參照?qǐng)D6,在臨時(shí)存儲(chǔ)日志信息的步驟中,在梯:作610,首先生成包括數(shù) 據(jù)頁偏移值的日志項(xiàng),并且在操作620將正被更新的數(shù)據(jù)頁的日志信息寫入 生成的日志項(xiàng)內(nèi)。然后使用寫入的日志信息將一條或者多條日志項(xiàng)合并到一起。
合并的處理可被細(xì)分為可在應(yīng)用程序中頻繁出現(xiàn)的三種情況。 第一,在重復(fù)更新同一區(qū)域時(shí)可合并日志項(xiàng)。根據(jù)傳統(tǒng)方法,當(dāng)同一業(yè) 務(wù)重復(fù)更新預(yù)定區(qū)域的數(shù)據(jù)時(shí),在每次更新時(shí)生成并記錄更新前的鏡像和更 新后的鏡像的日志記錄。在本示例性實(shí)施例中,所需的日志信息是在第一次
更新生成日志記錄之前的鏡像(即,更新前的鏡像)和在最后一次更新生成 日志記錄之后的鏡像(即,更新后的鏡像)。在中間處理中由更新生成的關(guān)于 鏡像改變的信息可以被看作為非必要信,包-。
因此,如果對(duì)于正被更新的數(shù)據(jù)頁存在先前生成的關(guān)于數(shù)據(jù)頁同一區(qū)域 的日志項(xiàng),則包含用于正被更新的數(shù)據(jù)的日志信息的日志項(xiàng)可被添加到先前 生成的同一區(qū)域的日志項(xiàng)內(nèi),從而對(duì)日志項(xiàng)進(jìn)行合并??赏ㄟ^使用頁ID、業(yè) 務(wù)ID、數(shù)據(jù)長度和偏移值來找到同一頁,并且還可以通過使用指示數(shù)據(jù)頁區(qū) 域的其他參數(shù)值來找到所述同 一頁。
第二,在更新相鄰區(qū)域時(shí)可以合并日志項(xiàng)。根據(jù)傳統(tǒng)技術(shù),當(dāng)同一業(yè)務(wù) 更新相鄰區(qū)域的數(shù)據(jù)時(shí),即當(dāng)根據(jù)偏移值所述正被更新的區(qū)域相鄰時(shí),在每 次更新時(shí)分別生成日志記錄。在這種情況下,如果在日志記錄中出現(xiàn)的更新 后的鏡像可被合并為一個(gè),則可只生成一條日志記錄。
因此,如果在與正#皮更新的數(shù)據(jù)頁的區(qū)域相鄰的區(qū)域中存在先前生成的 日志項(xiàng),則相對(duì)于相鄰區(qū)域改變先前生成的日志項(xiàng)中包括的偏移值,從而對(duì)
日志記錄進(jìn)4亍合并。通過使用頁ID、偏移值和數(shù)據(jù)長度可計(jì)算相鄰區(qū)域的定 義(determination )。如果只可以計(jì)算數(shù)據(jù)頁上的預(yù)定數(shù)據(jù)區(qū)域的開始和結(jié)束 位置,則還可以使用其他定義方法。
第三,當(dāng)更新包括被一次或者多次更新的區(qū)域時(shí)可以合并日志項(xiàng)。這與 混合同一區(qū)域的更新和相鄰區(qū)域的更新的情況相應(yīng)。根據(jù)傳統(tǒng)技術(shù),當(dāng)更新 包括至少;陂更新一次的區(qū)域時(shí),每次更新分別生成日志記錄。在本發(fā)明示例 性實(shí)施例中,不需要在同一區(qū)域的中間更新處理生成的鏡像,并且如果不同 區(qū)域的鏡像可被合并,則可以將多條日志記錄合并為一條日志記錄。
因此,如果對(duì)于正被更新的數(shù)據(jù)頁的同一區(qū)域存在先前生成的日志項(xiàng), 則對(duì)于同一區(qū)域改變包括在所述先前生成的日志項(xiàng)中的偏移值,從而合并所 述日志記錄。這里,可以使用與如上所述的第一種和第二種情況相同的方法 來找到所述同一區(qū)域。
根據(jù)更新操作,可在每當(dāng)生成日志項(xiàng)或者完成數(shù)據(jù)頁更新時(shí)執(zhí)行上述合 并處理。數(shù)據(jù)頁更新的完成通常是指提交更新業(yè)務(wù)或者轉(zhuǎn)儲(chǔ)清除數(shù)據(jù)頁時(shí)的 點(diǎn)。它還可以指示當(dāng)由于其他事件在數(shù)據(jù)庫中應(yīng)當(dāng)反映出業(yè)務(wù)的更新內(nèi)容時(shí) 或者當(dāng)根據(jù)緩存替換策略向盤中輸入或者從盤中輸出緩存頁時(shí)的點(diǎn)。
如果使用傳統(tǒng)的日志生成方法,則很難在上述情況下減小日志文件的大
小。這是因?yàn)樵谏鲜銮闆r出現(xiàn)在應(yīng)用程序中時(shí)沒有連續(xù)出現(xiàn)預(yù)定模式。換句 話說,在傳統(tǒng)方法中,即使當(dāng)發(fā)生更新同一區(qū)域的操作時(shí),該操作也不是出 現(xiàn)的唯一操作;在正在執(zhí)行該操作的同時(shí)還可出現(xiàn)其他操作。因此,因?yàn)槿?志頁上的特定日志記錄與在正在執(zhí)行該操作的同時(shí)被執(zhí)行的其他操作相關(guān), 所以很難確定哪個(gè)日志記錄與同一區(qū)域、相鄰區(qū)域或者更新的區(qū)域的更新相 關(guān)。
在傳統(tǒng)方法中,即使這些日志記錄相同,也^艮難在將這些日志記錄記錄
在曰志頁的同時(shí)將其合并。這是因?yàn)樗龊喜⑿枰淖內(nèi)罩居涗浀腖SN,所 述改變?nèi)罩居涗浀腖SN的步驟需要另一將被處理的載入。此外,傳統(tǒng)方法導(dǎo) 致系統(tǒng)開銷的花費(fèi),諸如,由于重新寫入全部先前記錄的日志記錄而導(dǎo)致的 存儲(chǔ)器復(fù)制花費(fèi)。
但是,根據(jù)本發(fā)明示例性實(shí)施例,在存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息 的操作中,包括數(shù)據(jù)頁的偏移值的日志項(xiàng)被合并到每一數(shù)據(jù)頁中,和更新操 作的每一項(xiàng)業(yè)務(wù)中。這里,基于日志項(xiàng)的偏移值來對(duì)日志項(xiàng)分類并形成列表。 因此,在更新數(shù)據(jù)時(shí)關(guān)于更新數(shù)據(jù)的日志記錄沒有被立即生成并記錄在曰志 頁內(nèi),并且沒有出現(xiàn)與日志記錄的LSN被立即完成并且很難被改變相關(guān)的問 題。
圖7是示出根據(jù)本發(fā)明另一示例性實(shí)施例的在DB中的日志生成方法的
流程圖。
參照?qǐng)D7,在操作710,如果執(zhí)行更新,則生成正被更新的數(shù)據(jù)頁復(fù)制的 鏡像,即,與更新前的原始鏡像相同的鏡像。鏡像副本被臨時(shí)存儲(chǔ)在存儲(chǔ)器 中直到日志記錄^C生成。隨后,在操作720,生成關(guān)于正^C更新的數(shù)據(jù)頁的 曰志項(xiàng)。在操作730,將生成的日志項(xiàng)彼此合并。可如上所述執(zhí)行合并模式。 在操作740,與更新相應(yīng)的改變的內(nèi)容被反映在原始鏡像中,并且在操作750, 如果完成更新,則通過使用合并的日志項(xiàng)來生成日志記錄。在這種情況下, 從鏡像副本中取回日志記錄的前鏡像(before-image)的數(shù)據(jù),和從原始鏡像 中取回后鏡像(after-image)的數(shù)據(jù)。
根據(jù)更新操作,每當(dāng)生成日志項(xiàng)時(shí)可執(zhí)行合并處理,或者通常當(dāng)完成更 新(諸如,提交更新業(yè)務(wù))時(shí),或者轉(zhuǎn)儲(chǔ)清除數(shù)據(jù)頁時(shí),可執(zhí)行合并處理。
此外,還可包括在緩存頁信息單元中寄存(register)鏡像副本和關(guān)于更 新業(yè)務(wù)的信息的操作。緩存頁信息用于管理原始鏡像、鏡像副本和更新業(yè)務(wù)
之間的關(guān)系,并且所述緩存頁信息存儲(chǔ)關(guān)于正被更新的數(shù)據(jù)頁的頁ID的信
息、鏡像副本的位置指針、更新業(yè)務(wù)的ID以及業(yè)務(wù)是否被提交的信息。在存
儲(chǔ)器中,更新生成的日志項(xiàng)和更新的頁由緩存頁信息單元來管理。當(dāng)通過緩 存替換策略將更新的頁轉(zhuǎn)儲(chǔ)清除到盤中或者業(yè)務(wù)被提交時(shí),在日志頁中生成
并寫入日志記錄。
根據(jù)這種日志生成方法,在業(yè)務(wù)的開始和結(jié)束之間生成的日志信息被包 括在當(dāng)業(yè)務(wù)被提交時(shí)生成的日志記錄中,并且被記錄在日志頁內(nèi),從而保證 了所述日志信息被轉(zhuǎn)儲(chǔ)清除到盤。因此,也就保證了日志信息的恢復(fù)。
圖8A和圖8B是示出根據(jù)本發(fā)明實(shí)施例的日志項(xiàng)格式的數(shù)據(jù)結(jié)構(gòu)的示圖。
如上所述,日志項(xiàng)被生成并被臨時(shí)存儲(chǔ)在存儲(chǔ)器中,而不是在執(zhí)行更新 之后立即生成日志記錄。所述日志項(xiàng)可具有以下字段 長度更新的數(shù)據(jù)區(qū)域的長度; 偏移更新的區(qū)域的開始位置在頁中的偏移值; 下一日志項(xiàng)(next):指示下一日志項(xiàng)的指針;
開始偏移(soffset):指示更新的區(qū)域的開始位置在所述頁中的偏移值; 結(jié)束偏移(eoffest):指示更新的區(qū)域的結(jié)束位置在所述頁中的偏移值; 根據(jù)實(shí)現(xiàn)可以選4奪和使用圖8A和圖8B中所示的格式的任何一個(gè),也可
以使用沒有在此詳細(xì)示出的其他格式。
這里,應(yīng)當(dāng)注意的是基于"位置"的概念來管理由日志項(xiàng)管理的信息。也
就是說,所述日志項(xiàng)根據(jù)所述日志項(xiàng)的位置來存儲(chǔ)更新數(shù)據(jù)頁導(dǎo)致的所有改
變。這是合并日志項(xiàng)的處理中的重要信息,由此,可以大大減少寫入日志頁
中的日志記錄的數(shù)量。
圖9是示出根據(jù)本發(fā)明示例性實(shí)施例的通過一次業(yè)務(wù)更新的示例的示圖。
參照?qǐng)D9,頁1910是原始鏡像,頁l'920是原始鏡像的副本。此外,示 出了緩存頁信息單元(頁信息)930、 一項(xiàng)業(yè)務(wù)T1 940和兩個(gè)日志項(xiàng)950和 960。如果執(zhí)行更新,則生成更新的頁的鏡像副本(頁1,920)。
為了識(shí)別執(zhí)行更新的業(yè)務(wù),緩存頁信息單元(頁信息)930管理業(yè)務(wù)T1 940 的ID。業(yè)務(wù)Tl 940使用關(guān)于頁1 910的更新的信息來生成日志項(xiàng)950和960 的列表。日志項(xiàng)950和960的列表按照偏移值被分類,并在存儲(chǔ)器中被維護(hù)。
也就是說,圖9中所示的操作可被如下簡要描述。
i) 業(yè)務(wù)Tl 940對(duì)從頁1 910的偏移10開始的4字節(jié)區(qū)域進(jìn)行更新。這 是發(fā)生在頁1 910中的第一次更新。因此,在更新頁1910之前,生成該頁的 副本(頁1, 920 )。業(yè)務(wù)Tl 940的ID被寄存在緩存頁信息單元930中,使用 更新信息生成日志項(xiàng)950,以指示由于業(yè)務(wù)T1 940更新了該信息。隨后使用 期望的更新鏡像來更新原始鏡像頁1 910。
ii) 業(yè)務(wù)Tl 940對(duì)從頁1 910的偏移31開始的4字節(jié)區(qū)域進(jìn)行更新。此 時(shí),日志項(xiàng)960被生成,按照偏移值被分類,并且被插入到日志項(xiàng)列表中。 隨后,使用期望的更新鏡像來更新頁1910。僅在存儲(chǔ)器中維護(hù)生成的日志項(xiàng) 950和960,并且所述日志項(xiàng)950和960將不作為日志記錄一皮寫入該日志頁。
iii) 根據(jù)緩存替換策略,頁1 910被選為對(duì)象頁(目標(biāo)),并且被轉(zhuǎn)儲(chǔ)清 除到盤(或者業(yè)務(wù)T1 94(H皮^:交)。日志記錄由關(guān)于相應(yīng)頁(在這種情況下, 即,頁1 910)存在的日志項(xiàng)950和960構(gòu)成,或者由提交的業(yè)務(wù)生成(在這 種情況下,即,業(yè)務(wù)Tl 940 )的日志項(xiàng)950和960構(gòu)成,并且一皮寫入該曰志 頁。
圖10是示出才艮據(jù)本發(fā)明示例性實(shí)施例的通過兩次或者多次業(yè)務(wù)更新的 示圖。
參照?qǐng)DIO,兩項(xiàng)業(yè)務(wù)TI 1040和T5 1070分別更新頁1 IOIO的不同區(qū)域, 由更新信息生成日志項(xiàng)1050、 1060、 1080和1090,所述這些日志項(xiàng)與相應(yīng) 的業(yè)務(wù)T1和T5相連并被管理。圖IO和圖9間的不同在于在圖10中,關(guān) 于多項(xiàng)業(yè)務(wù)中的每一項(xiàng)來管理日志項(xiàng)的列表。
在這種情況下,當(dāng)同時(shí)執(zhí)行兩項(xiàng)或者多項(xiàng)業(yè)務(wù)時(shí),要遵守嚴(yán)格兩段鎖 (2PL)協(xié)議。因此,因?yàn)橐袷貒?yán)格2PL協(xié)議,所以沒有出現(xiàn)兩項(xiàng)或者多 項(xiàng)運(yùn)行的(active)業(yè)務(wù)更新同一區(qū)域的情況。
鎖協(xié)議是一組規(guī)則,通過所述規(guī)則DBMS僅允許連續(xù)并可恢復(fù)的日志安 排。所述鎖協(xié)議包括共享鎖和獨(dú)占鎖,并且嚴(yán)格2PL鎖根據(jù)以下規(guī)則被執(zhí)行。 第一規(guī)則,即,如果業(yè)務(wù)T想要讀取或者寫入對(duì)象,則所述業(yè)務(wù)T首先要分 別請(qǐng)求共享或者獨(dú)占對(duì)象的鎖。第二規(guī)則,即,在完成業(yè)務(wù)時(shí)打開(unlock) 所述業(yè)務(wù)擁有的所有鎖狀態(tài)。根據(jù)用于請(qǐng)求和獲得鎖的規(guī)則,當(dāng)?shù)谝粯I(yè)務(wù)的 共享鎖鎖定對(duì)象并且第二業(yè)務(wù)請(qǐng)求相同對(duì)象的共享鎖時(shí),第二業(yè)務(wù)可獲得共 享鎖,但是如果第一業(yè)務(wù)請(qǐng)求獨(dú)占鎖時(shí),第二業(yè)務(wù)必須等待。此外,當(dāng)業(yè)務(wù) 的獨(dú)占鎖鎖定對(duì)象時(shí),請(qǐng)求任何類型的鎖的其他業(yè)務(wù)必須等待。但是,其他 業(yè)務(wù)可直接讀取已經(jīng)獲得其獨(dú)占鎖的對(duì)象。
圖11是示出根據(jù)本發(fā)明示例性實(shí)施例的每一種模式的更新操作的示圖。 圖12是示出根據(jù)本發(fā)明示例性實(shí)施例的作為圖11中所示的操作完成的結(jié)果 被生成的日志項(xiàng)的示圖。
現(xiàn)在將簡要說明圖11所示的情況。業(yè)務(wù)T1 1140在從頁1 1110的偏移 IO開始的4字節(jié)的區(qū)域中將"name"更新為"kate",并且在從頁1 1110的偏移 31開始的4字節(jié)的區(qū)域中將"0000"更新為"0021"。生成頁1 1110的副本(頁 1, 1120)和兩個(gè)日志項(xiàng)1150和1160。
現(xiàn)在將按照帶圈編號(hào)(①到⑥)的順序?qū)D11所示的更新操作的處理進(jìn) 行說明。
① 將"kate"更新為"john"。這是這樣一種情況,即同一區(qū)域被更新,并 且已經(jīng)生成了用于從"name"到"kate"的改變的相應(yīng)于前一更新的日志項(xiàng)1150。 此時(shí),唯一需要的操作是將作為原始頁的頁1 1110更新為作為更新后的鏡像 的"john"。因此,將新的日志項(xiàng)合并到先前生成的日志項(xiàng)1150中,而沒有必 要添加新的日志項(xiàng)。
② 將"0005"更新為"0006"。在這種情況下,從偏移35開始的4字節(jié)被更 新,并且所述區(qū)域相鄰于現(xiàn)有更新的區(qū)域。在這種情況下,可以確定用于將 "0000"改為"0021"的第二日志項(xiàng)1160的更新的鏡像的結(jié)束位置相鄰于當(dāng)前正 在被更新的鏡像,并且可以改變?nèi)罩卷?xiàng)1160的長度字段,從而該長度字段包 括相鄰區(qū)域(③)的長度。
從偏移14到偏移31的區(qū)域的更新。這是這樣一種情況,即位于兩 個(gè)現(xiàn)有更新的區(qū)域之間且相鄰的區(qū)域被更新。在這種情況下,刪除兩個(gè)現(xiàn)有 曰志項(xiàng)中的第二曰志項(xiàng)1160,將第一曰志項(xiàng)1150的長度字段中的"4"更新為 "29",并且在頁1 1110中記錄更新的鏡像。
⑤和⑥包括已經(jīng)被更新的區(qū)域的區(qū)域的更新。以與 相似的方式執(zhí)行更新。
如果執(zhí)行從①到⑥的操作,則最終僅生成圖12所示的一個(gè)日志記錄 1250。因此,當(dāng)原始鏡像是指復(fù)制的鏡像時(shí),可以確定盡管總共執(zhí)行了 8次 更新但是日志項(xiàng)被合并為一個(gè)日志項(xiàng)。因此,當(dāng)業(yè)務(wù)被提交時(shí)或者頁被轉(zhuǎn)儲(chǔ) 清除時(shí),僅生成和寫入一個(gè)日志項(xiàng)。
圖13示出了根據(jù)本發(fā)明示例性實(shí)施例的用于生成日志項(xiàng)的處理的偽代 碼。除非操作順序的改變改變了最終結(jié)果,可以以不同的順序執(zhí)行所述操作。
在生成日志項(xiàng)的處理中,如果所述日志項(xiàng)是頁中的第一日志項(xiàng),則應(yīng)當(dāng) 生成所述頁的復(fù)制的鏡像。隨后,生成日志項(xiàng),關(guān)于偏移值進(jìn)行分類,并將 其添加到列表中。通過參照偏移值,根據(jù)合并模式將日志項(xiàng)彼此合并。最后, 所述頁的原始鏡像被更新為后鏡像,即,更新后的鏡像。代碼。
在當(dāng)業(yè)務(wù)(txn)凈皮^C交時(shí)日志生成的處理中,如果存在包括通過提交業(yè) 務(wù)更新的日志項(xiàng)的頁,則針對(duì)這樣的每一頁執(zhí)行以下操作。首先,讀取所述 業(yè)務(wù)的日志項(xiàng),生成日志記錄。該日志記錄實(shí)質(zhì)上需要更新之前的鏡像或前 鏡像以及更新之后的鏡像或后鏡像。如果在所述頁中存在另一業(yè)務(wù)的日志項(xiàng), 則在復(fù)制的鏡像中記錄由提交的業(yè)務(wù)更新的區(qū)域中的后鏡像,從而在由其他 業(yè)務(wù)更新期間這個(gè)區(qū)域不會(huì)異常中止。這就允許遵守DBMS的持續(xù)性的概念, 即,應(yīng)當(dāng)在DB中反映提交的業(yè)務(wù)更新的結(jié)果。因此,由于當(dāng)前提交的業(yè)務(wù) 的更新的區(qū)域的數(shù)據(jù)被記錄在所述頁的復(fù)制的鏡像中,并從而被保證安全, 所以另一個(gè)未來業(yè)務(wù)的異常中止不會(huì)影響到所述當(dāng)前提交的業(yè)務(wù)的更新的區(qū) 域的數(shù)據(jù)。
此外,業(yè)務(wù)已經(jīng)被提交的事實(shí)可以被記錄在緩存頁信息單元中,從而可 以為另一業(yè)務(wù)的潛在異常中止進(jìn)行準(zhǔn)備。在這種情況下,應(yīng)當(dāng)在異常中止操 作中添加一過程,以確定是否在頁中已經(jīng)存在提交的業(yè)務(wù)。
因此,在另一業(yè)務(wù)異常中止的情況下執(zhí)行預(yù)防操作;隨后,在日志頁中 寫入生成的日志記錄,并且刪除讀取的日志項(xiàng)。
此后,如果所述頁中不再存在另一業(yè)務(wù)的日志項(xiàng),也就是說,如果當(dāng)前 提交的業(yè)務(wù)是唯一的業(yè)務(wù),則不需要所述頁的復(fù)制的鏡像并因此將其刪除。
圖15示出了指示根據(jù)本發(fā)明示例性實(shí)施例的用于異常中止業(yè)務(wù)的處理 的偽代碼。
業(yè)務(wù)的不完整指示異常情況,諸如當(dāng)由于DBMS的內(nèi)部原因,業(yè)務(wù)被異 常中止,以及業(yè)務(wù)被自動(dòng)重啟時(shí),或者在正在執(zhí)行業(yè)務(wù)的同時(shí)發(fā)生系統(tǒng)錯(cuò)誤 或者業(yè)務(wù)的預(yù)定命令讀取錯(cuò)誤值,或者盤不能被訪問時(shí)。
在異常中止處理中,如果在頁中不存在另一業(yè)務(wù)的日志項(xiàng),也就是說, 如果異常中止的業(yè)務(wù)是所述頁中唯一的業(yè)務(wù),則所述頁的原始鏡像被替換為 復(fù)制的鏡像,并且所述原始的鏡像可被刪除。但是,如果所述頁的另一業(yè)務(wù) 具有日志項(xiàng),則異常中止的業(yè)務(wù)應(yīng)當(dāng)讀取其自身日志項(xiàng),并且只應(yīng)當(dāng)恢復(fù)更 新之前的相應(yīng)于每個(gè)日志項(xiàng)的鏡像區(qū)域。
如上所述,如果指示是否存在另一提交的業(yè)務(wù)的信息被記錄在緩存頁信 息單元中,則這個(gè)信息可以被利用。也就是說,如果從緩存頁信息單元能夠 確定在所述頁中存在另一提交的業(yè)務(wù),則異常中止的業(yè)務(wù)可讀取其自身的曰 志項(xiàng),并且可以恢復(fù)相應(yīng)于每個(gè)日志項(xiàng)的特定鏡像區(qū)域的前鏡像。
圖16示出了指示根據(jù)本發(fā)明示例性實(shí)施例的用于轉(zhuǎn)儲(chǔ)清除數(shù)據(jù)頁的處 理的偽代碼。
當(dāng)根據(jù)緩存替換策略,頁被轉(zhuǎn)儲(chǔ)清除到盤時(shí),所述頁的全部日志項(xiàng)的日 志記錄被生成并被記錄在日志頁中。刪除所述頁的復(fù)制的鏡像也是必要的。
圖17是示出了根據(jù)本發(fā)明示例性實(shí)施例的數(shù)據(jù)庫日志生成設(shè)備的示意
性功能框圖。
圖17的設(shè)備大致包括日志存儲(chǔ)單元1710、日志讀取單元1720和曰志 控制單元1730。日志存儲(chǔ)單元1710存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息,并 且僅當(dāng)數(shù)據(jù)頁的更新完成時(shí),存儲(chǔ)的日志信息才被傳送到日志讀取單元1720。 曰志控制單元1730使用讀取的日志信息,以構(gòu)成日志記錄,并且所述讀取的 曰志信息被記錄在日志頁中。
圖18是示出根據(jù)本發(fā)明示例性實(shí)施例的數(shù)據(jù)庫日志生成設(shè)備的功能性 框圖。
對(duì)于每個(gè)模塊的功能,業(yè)務(wù)控制單元1810通過使用應(yīng)用程序來管理執(zhí)行 數(shù)據(jù)頁更新的業(yè)務(wù)。
緩存控制器單元1830管理存儲(chǔ)介質(zhì)的盤輸入和/或輸出操作,將更新的 數(shù)據(jù)頁和其中被寫入日志記錄的日志頁存儲(chǔ)在存儲(chǔ)介質(zhì)中,或者從所述存儲(chǔ) 介質(zhì)中讀取新的頁。也就是說,緩存控制單元1830負(fù)責(zé)根據(jù)緩存替換策略的 轉(zhuǎn)儲(chǔ)清除操作。緩存控制單元1830還管理其中寄存了原始鏡像、復(fù)制的鏡像 和關(guān)于更新業(yè)務(wù)的信息的緩存頁信息單元。在緩存頁信息單元中可以寄存 正被更新的數(shù)據(jù)頁的頁ID、復(fù)制的鏡像的位置指針、更新業(yè)務(wù)的ID以及關(guān) 于業(yè)務(wù)是否被提交的信息。
曰志控制單元1820合并根據(jù)由業(yè)務(wù)控制單元1810執(zhí)行的更新生成的曰
志信息,從而生成日志記錄,并將所述日志記錄寫入日志頁。日志控制單元
1820還可包括第一存儲(chǔ)單元1824、第二存儲(chǔ)單元1823、日志合并單元1821 和日志輸出單元1822。
第一存儲(chǔ)單元1824存儲(chǔ)其中執(zhí)行更新的數(shù)據(jù)頁的復(fù)制的鏡像,并且,所 述復(fù)制的鏡像包括其中反映與在更新之前的原始鏡像的數(shù)據(jù)相同的數(shù)據(jù)。
第二存儲(chǔ)單元1823以列表的形式存儲(chǔ)由業(yè)務(wù)控制單元1810管理的業(yè)務(wù) 的更新生成的日志項(xiàng)。如上所述,日志項(xiàng)關(guān)于正被更新的每一數(shù)據(jù)頁和關(guān)于 每一業(yè)務(wù)被管理,并且根據(jù)偏移值被分類。
日志合并單元1821通過使用這樣分類和管理的日志項(xiàng)來合并存儲(chǔ)在第 二存儲(chǔ)單元1823中的日志項(xiàng),并且減少日志項(xiàng)的總數(shù)量。根據(jù)上述更新模式 來執(zhí)行所述合并。
如果完成更新,則日志輸出單元1822生成日志記錄并將所述日志記錄寫 入曰志頁。這是因?yàn)楦碌臄?shù)據(jù)頁應(yīng)當(dāng)被反映在DB中,并且應(yīng)當(dāng)保持一致 性和持久性。在這種情況下,日志輸出單元1822通過使用存儲(chǔ)在第一存儲(chǔ)單 元1824中的復(fù)制的鏡像和存儲(chǔ)在第二存儲(chǔ)單元1823中的合并的日志項(xiàng)來生 成曰志記錄并將所述日志記錄寫入日志頁中。根據(jù)上述符合ARIES算法的數(shù) 據(jù)格式,所述日志記錄包括前鏡像、后鏡像和其他需要的信息。前鏡像是 存儲(chǔ)在第一存儲(chǔ)單元1824中的復(fù)制的鏡像,后鏡像是當(dāng)前數(shù)據(jù)頁的鏡像???以從存儲(chǔ)在第二存儲(chǔ)單元1823中的日志項(xiàng)確定更新的區(qū)域的偏移信息。
圖19到圖21是示出根據(jù)本發(fā)明示例性實(shí)施例的更新的數(shù)據(jù)頁的示例的 示圖。
參照?qǐng)D19,編號(hào)1到12指示更新的順序和相應(yīng)的數(shù)據(jù)區(qū)域。根據(jù)傳統(tǒng) 方法,如圖19所示的更新操作生成的日志記錄的數(shù)量與更新的數(shù)量成比例。 因此,如果傳統(tǒng)方法^皮應(yīng)用于圖19中的示例,則可生成12個(gè)日志記錄,每 個(gè)曰志記錄可被分配LSN,并且每個(gè)LSN可被記錄在日志頁中。但是,根據(jù) 本發(fā)明示例性實(shí)施例,在這種情況下,更新的區(qū)域(1,5)、 (6,2,7,8,11)、 (4, 9)和(10, 12)是相鄰的區(qū)域,并且僅生成(1,5)、 (3)、 (6,2,7,8,11)、 (4, 9)和(10, 12) 5個(gè)日志記錄。此外,即使在先前更新的區(qū)域中執(zhí)行另 一更新,也不生成另外的日志記錄。
參照?qǐng)D20,在使用堆文件(heap file)和平衡樹(b-tree)方法的DB的 示例中,出現(xiàn)如圖20所示的以1、 2、 3、 4等的順序^Mv兩端向中間移動(dòng)的更
新模式。在這種模式的更新操作中,如果應(yīng)用根據(jù)本發(fā)明示例性實(shí)施例的日 志生成方法,則僅生成兩個(gè)日志記錄。如果如圖20所示更新整個(gè)區(qū)域,即繼 續(xù)執(zhí)行所述更新操作并且所述更新在中間匯合,則將只生成一個(gè)日志記錄。
的更新模式。所述目錄管理器(CatalogMgr)包括關(guān)于日志計(jì)數(shù)和索引關(guān)鍵 字計(jì)數(shù)的信息。根據(jù)圖21所示的更新模式,可以確定只生成了更新區(qū)域(1, 2, 3 )和(4, 5 )的兩個(gè)日志記錄。
圖22是示出根據(jù)本發(fā)明示例性實(shí)施例的在DB的每一個(gè)模塊中減少的日 志記錄的比較表。
參照?qǐng)D22,當(dāng)7000條記錄被包括在DB的一個(gè)表中時(shí),從它們中刪除 5000條記錄,將在各個(gè)情況下的當(dāng)前出現(xiàn)的日志記錄數(shù)量和合并之后出現(xiàn)的 日志記錄數(shù)量進(jìn)行比較。
DB模塊的總數(shù)指示通過添加空閑頁映射(FPMap)、 CatalogMgr和數(shù)據(jù) 頁的日志記錄獲得的總數(shù)。個(gè)別的日志記錄是其中的更新區(qū)域彼此不同的曰 志記錄。合并之后的日志記錄是在所有相鄰區(qū)域一皮合并時(shí)生成的日志記錄。 FPMap模塊是用于管理關(guān)于使用和/或不使用整個(gè)DB的信息的模塊。 CatalogMgr是上述的目錄管理器,并且是包括關(guān)于記錄計(jì)數(shù)和索引關(guān)鍵字計(jì) 數(shù)的信息的模塊。數(shù)據(jù)頁是記錄實(shí)際數(shù)據(jù)的數(shù)據(jù)頁。
當(dāng)只考慮同一區(qū)域的日志記錄時(shí),在比較日志大小時(shí),總的日志大小從 1315KB減少到195KB,即減少了1120KB。此外,當(dāng)考慮相鄰區(qū)域時(shí),可以 確定總大小被減少到23KB,僅僅是根據(jù)傳統(tǒng)技術(shù)的大小的1.7%。
根據(jù)上述本發(fā)明的示例性實(shí)施例的DB的日志生成方法,由于日志生成 的原因減少了日志大小,并且盤輸入和/或輸出操作的次數(shù)被減少,從而提高 了數(shù)據(jù)庫系統(tǒng)的更新速度。
此外,當(dāng)業(yè)務(wù)被提交或者頁被轉(zhuǎn)儲(chǔ)清除時(shí)頁的多條日志項(xiàng)作為一條日志 記錄被一次記錄。因此,與記錄在日志頁中的日志記錄相應(yīng)的更新區(qū)域在同 一頁中的概率增加,從而在執(zhí)行恢復(fù)操作時(shí)增加了將被恢復(fù)的頁的局部性。
同時(shí),當(dāng)業(yè)務(wù)異常中止時(shí),從存儲(chǔ)器刪除日志項(xiàng),并且使用復(fù)制的頁替 換原始頁,從而以簡單的方式執(zhí)行異常中止操作,并因此減少了異常中止操 作的花費(fèi)。
當(dāng)執(zhí)行恢復(fù)操作時(shí),因?yàn)槿罩敬笮”粶p小,所以將被從存儲(chǔ)介質(zhì)讀取的
曰志文件的大小也被減小。此外,因?yàn)榫植啃员辉鰪?qiáng),所以減少了用于恢復(fù) 操作的對(duì)存儲(chǔ)介質(zhì)執(zhí)行的盤輸入和輸出操作的花費(fèi)。
因此,在存儲(chǔ)器應(yīng)當(dāng)充足的情況下,由于日志記錄的原因會(huì)出現(xiàn)盤輸入 和輸出操作的瓶頸,推遲的日志生成方法很大地減少了存儲(chǔ)在存儲(chǔ)介質(zhì)中的
日志文件的大小,從而最大化利益。
盡管已經(jīng)參照本發(fā)明示例性實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)示出和描述,但 是本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解,在不脫離由權(quán)利要求限定的本發(fā)明的精神 和范圍的情況下,可以在形式和細(xì)節(jié)上做出各種改變。所述優(yōu)選實(shí)施例僅應(yīng)
當(dāng)被理解為描述的目的,而不是限定的目的。因此,本發(fā)明的范圍不是由本 發(fā)明的詳細(xì)描述來限定,而是由權(quán)利要求限定,并且所述范圍內(nèi)的所有不同 將被解釋為包括在本發(fā)明內(nèi)。
權(quán)利要求
1、一種在數(shù)據(jù)庫管理系統(tǒng)中的日志生成方法,所述方法包括存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息;在完成數(shù)據(jù)頁的更新時(shí)讀取存儲(chǔ)的日志信息;通過使用讀取的日志信息生成日志記錄;和將生成的日志記錄寫入日志頁。
2、 如權(quán)利要求l所述的方法,其中,存儲(chǔ)日志信息的步驟包括 生成包括正被更新的數(shù)據(jù)頁的偏移值的日志項(xiàng); 將正被更新的數(shù)據(jù)頁的日志信息記錄在所述日志項(xiàng)中;和 基于日志信息合并至少兩個(gè)日志項(xiàng)。
3、 如權(quán)利要求2所述的方法,其中,合并至少兩個(gè)日志項(xiàng)的步驟包括 關(guān)于與正被更新的數(shù)據(jù)頁的區(qū)域相同的區(qū)域,確定是否存在一個(gè)或者多個(gè)先前生成的日志項(xiàng);和將所述一個(gè)或者多個(gè)先前生成的日志項(xiàng)組合為所述日志項(xiàng)。
4、 如權(quán)利要求2所述的方法,其中,合并至少兩個(gè)日志項(xiàng)的步驟包括 關(guān)于與正被更新的數(shù)據(jù)頁的區(qū)域相鄰的區(qū)域,確定是否存在一個(gè)或者多個(gè)先前生成的日志項(xiàng);和關(guān)于所述相鄰區(qū)域,改變包括在所述一個(gè)或者多個(gè)先前生成的日志項(xiàng)中 的偏移值。
5、 如權(quán)利要求2所述的方法,其中,合并至少兩個(gè)日志項(xiàng)的步驟包括 關(guān)于與正被更新的數(shù)據(jù)頁的區(qū)域重疊的區(qū)域,確定是否存在先前生成的日志項(xiàng);和關(guān)于所述重疊的區(qū)域改變包括在所述先前生成的日志項(xiàng)中的偏移值。
6、 如權(quán)利要求2所述的方法,其中,當(dāng)完成對(duì)數(shù)據(jù)頁的更新操作時(shí)執(zhí)行 一次合并至少兩個(gè)日志項(xiàng)的步驟。
7、 如權(quán)利要求6所述的方法,其中,所述完成數(shù)據(jù)頁的更新操作的時(shí)間 是提交執(zhí)行更新操作的業(yè)務(wù)的時(shí)間,或者數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除的時(shí)間。
8、 如權(quán)利要求2所述的方法,其中,關(guān)于正被更新的數(shù)據(jù)頁并且關(guān)于執(zhí) 行更新操作的每個(gè)業(yè)務(wù)管理所述日志項(xiàng)。
9、 如權(quán)利要求8所述的方法,其中,所述日志項(xiàng)根據(jù)包括在該日志項(xiàng)中 的偏移值,皮分類。
10、 如權(quán)利要求2所述的方法,其中,生成日志項(xiàng)和記錄日志信息使用 恢復(fù)和獨(dú)立開發(fā)語義算法,并且遵守預(yù)寫式日志協(xié)議。
11、 一種在數(shù)據(jù)庫管理系統(tǒng)中的日志生成方法,所述方法包括 生成正被更新的數(shù)據(jù)頁的復(fù)制的鏡像,所述復(fù)制的鏡像與更新之前的所述數(shù)據(jù)頁的原始鏡像相同;生成關(guān)于正^皮更新的數(shù)據(jù)頁的日志項(xiàng);將生成的日志項(xiàng)與另 一 日志項(xiàng)合并,以生成合并的日志項(xiàng);關(guān)于數(shù)據(jù)頁的原始鏡像執(zhí)行更新操作;和如果完成更新操作,則基于所述原始鏡像、復(fù)制的鏡像和合并的日志項(xiàng) 生成日志記錄。
12、 如權(quán)利要求11所述的方法,其中,合并的步驟包括關(guān)于與正被更新的數(shù)據(jù)頁的區(qū)域相同的區(qū)域,確定是否存在一個(gè)或者多 個(gè)先前生成的日志項(xiàng);和將所述一個(gè)或者多個(gè)先前生成的日志項(xiàng)組合為所述日志項(xiàng)。
13、 如權(quán)利要求11所述的方法,其中,合并的步驟包括關(guān)于與正被更新的數(shù)據(jù)頁的區(qū)域相鄰的區(qū)域,確定是否存在一個(gè)或者多 個(gè)先前生成的日志項(xiàng);和關(guān)于所述相鄰區(qū)域,改變包括在所述一個(gè)或者多個(gè)先前生成的日志項(xiàng)中 的偏移值。
14、 如權(quán)利要求11所述的方法,其中,合并的步驟包括關(guān)于與正被更新的數(shù)據(jù)頁的區(qū)域重疊的區(qū)域,確定是否存在先前生成的 日志項(xiàng);和關(guān)于所述重疊的區(qū)域改變包括在所述先前生成的日志項(xiàng)中的偏移值。
15、 如權(quán)利要求11所述的方法,其中,當(dāng)完成對(duì)數(shù)據(jù)頁的更新操作時(shí)執(zhí) 行合并的步驟。
16、 如權(quán)利要求15所述的方法,其中,所述完成數(shù)據(jù)頁的更新操作的時(shí) 間是提交執(zhí)行更新操作的業(yè)務(wù)的時(shí)間,或者是原始鏡像的數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除 的時(shí)間。
17、 如;f又利要求11所述的方法,還包括在管理原始鏡像、復(fù)制的鏡像和執(zhí)行更新操作的業(yè)務(wù)之間的關(guān)系的緩存頁信息單元中寄存關(guān)于原始鏡像、復(fù)制的鏡像和所述業(yè)務(wù)的信息。
18、 如權(quán)利要求n所述的方法,其中,關(guān)于正被更新的數(shù)據(jù)頁并且關(guān)于 執(zhí)行更新操作的每個(gè)業(yè)務(wù)管理所述日志項(xiàng)。
19、 如權(quán)利要求18所述的方法,其中,所述日志項(xiàng)根據(jù)包括在該日志項(xiàng) 中的偏移值被分類。
20、 如權(quán)利要求19所述的方法,其中,日志項(xiàng)包括始位置,或者正被更新的數(shù)據(jù)頁中更新的區(qū)域的開始位置和結(jié)束位置。
21、 如權(quán)利要求17所述的方法,其中,如果存在多項(xiàng)執(zhí)行更新操作的業(yè) 務(wù),并且所述更新操作被同時(shí)執(zhí)行,則應(yīng)用嚴(yán)格兩段鎖協(xié)議。
22、 如權(quán)利要求21所述的方法,其中,如果在完成更新操作時(shí)所述業(yè)務(wù) 被4I:交,則所述方法還包括確定在數(shù)據(jù)頁中是否存在另 一業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù),則在復(fù)制的鏡像的相應(yīng)區(qū) 域內(nèi)記錄與提交的業(yè)務(wù)的各個(gè)日志項(xiàng)相應(yīng)的原始鏡像的更新的區(qū)域;和 如果確定結(jié)果指示數(shù)據(jù)頁中不存在其他業(yè)務(wù),則刪除復(fù)制的鏡像。
23、 如權(quán)利要求21所述的方法,其中,如果在完成更新操作前所述業(yè)務(wù) 異常中止,則所述方法還包括確定在數(shù)據(jù)頁中是否存在另一業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù),則在原始鏡像的相應(yīng)區(qū)域 內(nèi)記錄與異常中止的業(yè)務(wù)的各個(gè)日志項(xiàng)相應(yīng)的復(fù)制的鏡像的區(qū)域;和如果確定結(jié)果指示數(shù)據(jù)頁中不存在其他業(yè)務(wù),則將復(fù)制的鏡像替換為原 始鏡像。
24、 如權(quán)利要求21所述的方法,其中,在完成更新操作時(shí)業(yè)務(wù)被提交, 則所述方法還包括確定在數(shù)據(jù)頁中是否存在另 一業(yè)務(wù);如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù),則在緩存頁信息單元中記 錄所述業(yè)務(wù)被提交;和如果確定結(jié)果指示數(shù)據(jù)頁中不存在其他業(yè)務(wù),則刪除復(fù)制的鏡像。
25、 如權(quán)利要求21所述的方法,其中,如果在完成更新操作之前所述業(yè) 務(wù)異常中止,則所述方法還包括確定在數(shù)據(jù)頁中是否存在另一業(yè)務(wù);通過參照緩存頁信息單元確定在數(shù)據(jù)頁中是否存在另一提交的業(yè)務(wù); 如果確定結(jié)果指示在數(shù)據(jù)頁中存在另一業(yè)務(wù)或者另一提交的業(yè)務(wù),則在 原始鏡像的相應(yīng)區(qū)域內(nèi)記錄與異常中止的業(yè)務(wù)的各個(gè)日志項(xiàng)相應(yīng)的復(fù)制的鏡像的區(qū)域;和如果確定結(jié)果指示數(shù)據(jù)頁中不存在其他業(yè)務(wù)或者其他提交的業(yè)務(wù),則將 復(fù)制的鏡像替換為原始鏡像。
26、 如權(quán)利要求21所述的方法,其中,如果在完成更新業(yè)務(wù)時(shí)原始鏡像 的數(shù)據(jù)頁被轉(zhuǎn)儲(chǔ)清除,則所述方法還包括生成轉(zhuǎn)儲(chǔ)清除的數(shù)據(jù)頁的全部日志項(xiàng)的日志記錄;和 刪除復(fù)制的鏡像。
27、 一種在數(shù)據(jù)庫管理系統(tǒng)中的日志生成設(shè)備,所述設(shè)備包括 曰志存儲(chǔ)單元,存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息;曰志讀取單元,在完成數(shù)據(jù)頁的更新操作時(shí)讀取存儲(chǔ)在日志存儲(chǔ)單元中 的曰志信息;和曰志控制單元,基于讀取的日志信息生成日志記錄,并將生成的日志記 錄記錄在日志頁中。
28、 一種在數(shù)據(jù)庫管理系統(tǒng)中的日志生成設(shè)備,所述設(shè)備包括 業(yè)務(wù)控制單元,管理執(zhí)行數(shù)據(jù)頁的更新操作的業(yè)務(wù);曰志控制單元,將根據(jù)由業(yè)務(wù)控制單元管理的業(yè)務(wù)的更新操作生成的曰 志信息進(jìn)行合并,從而生成日志記錄,并將生成的日志記錄記錄在日志頁中; 和緩存控制單元,管理^皮執(zhí)行更新操作的數(shù)據(jù)頁,并且管理所述日志頁, 從而可以將所述數(shù)據(jù)頁和日志頁輸入存儲(chǔ)介質(zhì),或者從存儲(chǔ)介質(zhì)輸出所述數(shù) 據(jù)頁和日志頁。
29、 如權(quán)利要求28所述的設(shè)備,其中,日志控制單元包括 第一存儲(chǔ)單元,存儲(chǔ)復(fù)制的鏡像,所述復(fù)制的鏡像與正被執(zhí)行更新搡作的數(shù)據(jù)頁的更新之前的原始鏡像相同;第二存儲(chǔ)單元,存儲(chǔ)日志項(xiàng),所述日志項(xiàng)根據(jù)由業(yè)務(wù)控制單元管理的業(yè)務(wù)的更新搡作被生成; 曰志合并單元,將至少兩個(gè)或者多個(gè)存儲(chǔ)在第二存儲(chǔ)單元中的日志項(xiàng)進(jìn)行合并;和曰志輸出單元,在完成更新操作時(shí)基于原始鏡像、復(fù)制的鏡像和合并的 曰志項(xiàng)生成日志記錄,并且將生成的日志記錄記錄在日志頁中。
30、 如權(quán)利要求29所述的設(shè)備,其中,緩存控制單元管理緩存頁信息單 元,在所述緩存頁信息單元中寄存有原始鏡像、復(fù)制的鏡像和關(guān)于執(zhí)行更新 操作的業(yè)務(wù)的信息。
31、 一種其上實(shí)現(xiàn)有用于執(zhí)行權(quán)利要求1的方法的計(jì)算機(jī)程序的計(jì)算機(jī) 可讀記錄介質(zhì)。
全文摘要
提供了一種在由更新生成日志記錄時(shí)通過使用日志項(xiàng)來減小日志大小的日志生成方法及其設(shè)備。所述方法包括存儲(chǔ)正被更新的數(shù)據(jù)頁的日志信息;在完成數(shù)據(jù)頁的更新時(shí)讀取存儲(chǔ)的日志信息;通過使用讀取的日志信息生成日志記錄;和將生成的日志記錄寫入日志頁。根據(jù)所述方法,由于日志生成引起日志大小減小,并且減少了盤輸入和/或輸出操作的次數(shù),從而提高了數(shù)據(jù)庫系統(tǒng)的更新速度。
文檔編號(hào)G06F11/14GK101183322SQ20071010851
公開日2008年5月21日 申請(qǐng)日期2007年5月31日 優(yōu)先權(quán)日2006年11月16日
發(fā)明者金映錫, 閔庚燮 申請(qǐng)人:三星電子株式會(huì)社