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