在存儲(chǔ)器中鏡像盤中的數(shù)據(jù)以提高查詢性能的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫系統(tǒng),并且更具體地,涉及在存儲(chǔ)器中以一種格式鏡像以另一種格式駐留在盤上的數(shù)據(jù)。
【背景技術(shù)】
[0002]鑒于主存儲(chǔ)器變得越來越便宜和越來越大,當(dāng)數(shù)據(jù)被存儲(chǔ)在存儲(chǔ)器中時(shí),需要新的數(shù)據(jù)格式來加快查詢處理。現(xiàn)有的格式是為盤而設(shè)計(jì)的,并且當(dāng)存儲(chǔ)在存儲(chǔ)器中(例如,在緩沖區(qū)高速緩存中)時(shí),這些格式對于查詢不是最優(yōu)的。例如,對于數(shù)據(jù)庫系統(tǒng)來說,將數(shù)據(jù)持久性地存儲(chǔ)在“盤塊”中是常見的。通常,在每個(gè)盤塊內(nèi),數(shù)據(jù)以行為主的格式進(jìn)行布置。即,一行中的所有列的值后面跟著用于下一行的所有列的值。
[0003]為了提高性能,一些盤塊可以在易失性存儲(chǔ)器內(nèi)的“緩沖區(qū)高速緩存”中進(jìn)行高速緩存。從易失性存儲(chǔ)器訪問數(shù)據(jù)比從盤訪問數(shù)據(jù)明顯更快。但是,即使在易失性存儲(chǔ)器內(nèi),數(shù)據(jù)仍然是以行為主的盤塊格式,這對于某些類型的數(shù)據(jù)庫操作不是最優(yōu)的。
[0004]與行為主的盤塊相比,列狀格式對于存儲(chǔ)器中的查詢處理具有許多吸引人的優(yōu)點(diǎn),諸如高速緩存局部性和壓縮性。因此,一些數(shù)據(jù)庫服務(wù)器現(xiàn)在采用新的表類型,用于以列為主的格式持久性地存儲(chǔ)數(shù)據(jù)。在列為主的格式中,數(shù)據(jù)可以被讀入到易失性存儲(chǔ)器中,其中與數(shù)據(jù)以行為主的盤塊存儲(chǔ)時(shí)相比,它可以被用來更高效地處理某些查詢。
[0005]不幸的是,將以行為主的盤塊持久性地存儲(chǔ)數(shù)據(jù)的現(xiàn)有數(shù)據(jù)庫迀移到使用新的列為主的表類型的任務(wù)不是簡單的任務(wù)。此外,在執(zhí)行這種迀移之后,對于可以在以行為主的盤塊中存儲(chǔ)的數(shù)據(jù)上更高效執(zhí)行的查詢類別來說,查詢處理將變得較為低效。
[0006]作為替代,一些數(shù)據(jù)庫系統(tǒng)將數(shù)據(jù)保持在行為主的盤塊中,但是采用列存儲(chǔ)索引。列存儲(chǔ)索引不取代現(xiàn)有的表,并且因此不需要將整個(gè)數(shù)據(jù)庫迀移到新的表結(jié)構(gòu)。相反,列存儲(chǔ)索引更像作為傳統(tǒng)的二級索引。例如,這種列存儲(chǔ)索引仍然被持久保存到盤中。不幸的是,隨著對通過其進(jìn)行索引的數(shù)據(jù)執(zhí)行更新,可能需要大量的開銷來維護(hù)這種索引。
[0007]作為還有的另一種替代,數(shù)據(jù)庫可以被復(fù)制,其中數(shù)據(jù)庫的第一副本用常規(guī)的行為主的盤塊存儲(chǔ)數(shù)據(jù),而第二副本以列為主的格式存儲(chǔ)數(shù)據(jù)。當(dāng)數(shù)據(jù)庫以這種方式進(jìn)行復(fù)制時(shí),利用行為主的數(shù)據(jù)最高效處理的查詢可以被路由到第一副本,而利用列為主的數(shù)據(jù)最高效處理的查詢可以被路由到第二副本。
[0008]不幸的是,由于在被復(fù)制的系統(tǒng)之間發(fā)生的滯后,這種技術(shù)并不能很好地工作。具體而言,在任何給定的時(shí)間點(diǎn),在其中一個(gè)副本處做出的一些改變將還沒有被應(yīng)用到另一個(gè)副本。因此,在復(fù)制機(jī)制中固有的滯后會(huì)導(dǎo)致不可預(yù)測的假像,并且有可能地,導(dǎo)致不正確的結(jié)果。
[0009]此外,每個(gè)事務(wù)通常需要看見其自己的改變,甚至在那些改變已被提交之前。但是,數(shù)據(jù)庫的改變通常直到改變已被提交時(shí)才被復(fù)制。因此,即使在另一個(gè)副本處的數(shù)據(jù)的格式可能對于一些操作是更高效的,事務(wù)也可能被限制為利用其中做出事務(wù)未提交的改變的副本。
[0010]本節(jié)中描述的方法是可以實(shí)行的方法,但不一定是先前已被構(gòu)思或?qū)嵭械姆椒?。因此,除非另外指出,否則不應(yīng)當(dāng)假定在本節(jié)中描述的任何方法僅僅憑其包括在本節(jié)中就有資格作為現(xiàn)有技術(shù)。
【附圖說明】
[0011]在附圖中:
[0012]圖1是根據(jù)實(shí)施例的、同時(shí)維護(hù)在易失性存儲(chǔ)器中的鏡像格式數(shù)據(jù)和在持久性存儲(chǔ)裝置上的持久性格式數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)的框圖;
[0013]圖2a是用于例子的表的框圖;
[0014]圖2b是根據(jù)實(shí)施例的、用于表的數(shù)據(jù)項(xiàng)如何可以被同時(shí)以兩種格式維護(hù)的框圖,其中一種格式是存儲(chǔ)器中(in-memory)格式;
[0015]圖3是示出根據(jù)實(shí)施例的、存儲(chǔ)在易失性存儲(chǔ)器中的與鏡像格式數(shù)據(jù)結(jié)合的日志的框圖;
[0016]圖4是示出根據(jù)實(shí)施例的、來自單個(gè)表的數(shù)據(jù)如何可以基于行的范圍在MCU之間進(jìn)行劃分的框圖;
[0017]圖5a是示出可以如何分配不同的數(shù)據(jù)庫服務(wù)器實(shí)例來管理不同MF數(shù)據(jù)集合的框圖,其中所述集合基于行的范圍;
[0018]圖5b是示出可以如何分配不同的數(shù)據(jù)庫服務(wù)器實(shí)例來管理不同MF數(shù)據(jù)集合的框圖,其中所述集合基于列;
[0019]圖6是示出根據(jù)實(shí)施例的、存儲(chǔ)改變行的位圖和位改變的記錄的SMU的框圖;
[0020]圖7是示出根據(jù)實(shí)施例的、用于執(zhí)行掃描操作的步驟的流程圖;
[0021]圖8是示出根據(jù)實(shí)施例的、用于實(shí)現(xiàn)改變行的位圖的結(jié)構(gòu)的框圖;及
[0022]圖9是示出可用來實(shí)現(xiàn)本文所述的技術(shù)的計(jì)算機(jī)系統(tǒng)的框圖。
【具體實(shí)施方式】
[0023]在以下描述中,出于解釋的目的,闡述了許多具體細(xì)節(jié),以便提供對本發(fā)明的透徹理解。但是,很顯然,本發(fā)明可以在沒有這些具體細(xì)節(jié)的情況下進(jìn)行實(shí)踐。在其它情況下,眾所周知的結(jié)構(gòu)和設(shè)備以框圖的形式示出,以避免不必要地模糊本發(fā)明。
[0024]總體概述
[0025]不同數(shù)據(jù)格式具有不同的好處。因此,本文所描述的技術(shù)用于以一種格式持久性地維護(hù)數(shù)據(jù),但是使該數(shù)據(jù)以多于一種的格式對數(shù)據(jù)庫服務(wù)器可用。在一種實(shí)施例中,其中使數(shù)據(jù)可用于查詢處理的格式中之一是基于盤上(on-disk)格式,而其中使數(shù)據(jù)可用于查詢處理的另一種格式獨(dú)立于該盤上格式。
[0026]對應(yīng)于盤上格式的格式在本文被稱為“持久性格式”或“PF”。處于持久性格式的數(shù)據(jù)在本文被稱為PF數(shù)據(jù)。獨(dú)立于盤上格式的存儲(chǔ)器中格式被稱為“鏡像格式”或“MF”。處于鏡像格式的數(shù)據(jù)在本文被稱為MF數(shù)據(jù)。例如,在一種實(shí)施例中,持久性格式是行為主的盤塊,而鏡像格式是列為主的格式。
[0027]根據(jù)一種實(shí)施例,鏡像格式完全獨(dú)立于持久性格式。但是,MF數(shù)據(jù)初始地基于持久存儲(chǔ)的PF數(shù)據(jù),而不基于任何持久性MF結(jié)構(gòu)在存儲(chǔ)器中構(gòu)建。由于不需要持久性MF結(jié)構(gòu),因此現(xiàn)有數(shù)據(jù)庫的用戶不需要將其現(xiàn)有數(shù)據(jù)庫中的數(shù)據(jù)或結(jié)構(gòu)迀移到另一種格式。因此,使用行為主的盤塊的常規(guī)數(shù)據(jù)庫系統(tǒng)可以繼續(xù)使用那些盤塊來持久存儲(chǔ)其數(shù)據(jù),而無需執(zhí)行任何數(shù)據(jù)迀移,同時(shí)仍然獲得由于具有在易失性存儲(chǔ)器中可用的數(shù)據(jù)的列為主的表示而產(chǎn)生的性能益處。
[0028]存儲(chǔ)器中MF數(shù)據(jù)被維護(hù)為在事務(wù)上與PF數(shù)據(jù)一致。MF數(shù)據(jù)在事務(wù)上是一致的,因?yàn)閺腗F數(shù)據(jù)提供給事務(wù)的任何數(shù)據(jù)項(xiàng)將是如果數(shù)據(jù)項(xiàng)從PF數(shù)據(jù)提供的話將會(huì)被提供的同一版本。此外,那一版本反映了在事務(wù)的快照時(shí)間之前提交的所有改變,并且不反映在事務(wù)的快照時(shí)間之后提交的改變。因此,當(dāng)提交對在MF數(shù)據(jù)中被鏡像的數(shù)據(jù)項(xiàng)做出改變的事務(wù)時(shí),使得該改變相對于PF數(shù)據(jù)和MF數(shù)據(jù)兩者都可見。另一方面,如果做出改變的事務(wù)被中止或回滾,則該改變相對于PF數(shù)據(jù)和MF數(shù)據(jù)兩者被回滾。
[0029]在一種實(shí)施例中,確保PF數(shù)據(jù)的讀和寫之間的一致性的同一事務(wù)管理器也被用于確保MF數(shù)據(jù)的讀和寫之間的一致性。因?yàn)镸F數(shù)據(jù)以在事務(wù)上一致的方式保持最新,因此,如果存儲(chǔ)器中MF數(shù)據(jù)包括由數(shù)據(jù)庫操作所需的數(shù)據(jù),則數(shù)據(jù)庫操作可以或者從存儲(chǔ)器中MF數(shù)據(jù)或者從PF數(shù)據(jù)中被滿足。
[0030]MF數(shù)據(jù)鏡像已經(jīng)在PF數(shù)據(jù)中存在的數(shù)據(jù)。但是,雖然在MF數(shù)據(jù)中的所有項(xiàng)都是在PF數(shù)據(jù)中的對應(yīng)項(xiàng)的鏡像版本(盡管以不同的格式被組織),但是不是所有在PF數(shù)據(jù)中的項(xiàng)都需要在MF數(shù)據(jù)中被鏡像。因此,MF數(shù)據(jù)可以是PF數(shù)據(jù)的子集。
[0031]由于不是所有的PF數(shù)據(jù)都必須在MF數(shù)據(jù)中鏡像,因此,在一些情況下,查詢可能需要只能被PF數(shù)據(jù)滿足的數(shù)據(jù)。例如,如果表具有列A、B和C,并且只有列A在MF數(shù)據(jù)中被鏡像,則需要來自列B的值的查詢必須從PF數(shù)據(jù)中獲得那些值。
[0032]但是,即使在那些情況下,MF數(shù)據(jù)仍然可以用于(a)滿足查詢的一部分,和/或(b)加快從PF數(shù)據(jù)中所需數(shù)據(jù)的檢索。例如,MF數(shù)據(jù)可以用來識(shí)別必須從PF數(shù)據(jù)中檢索的特定行。
[0033]根據(jù)一種實(shí)施例,為了減少開銷,不維護(hù)MF數(shù)據(jù)的盤上拷貝。在一種可替代的實(shí)施例中,MF的拷貝可以被存儲(chǔ),但不試圖使MF數(shù)據(jù)的盤上拷貝與正在PF數(shù)據(jù)上執(zhí)行的更新保持同步。因此,在失敗之后,存儲(chǔ)器中MF數(shù)據(jù)必須基于PF數(shù)據(jù)的持久性拷貝進(jìn)行重建。
[0034]在一些實(shí)施例中,MF數(shù)據(jù)被壓縮。壓縮可以在由用戶指定的或基于訪問模式的各種壓縮級別下執(zhí)行。
[0035]雖然下文將給出其中鏡像格式是列狀的實(shí)施例,但是鏡像格式可以是與持久性格式不同的、對運(yùn)行存儲(chǔ)器中查詢有用的任何格式。例如,在可替代的實(shí)施例中,PF格式是列為主的,而MF格式是行為主的。無論使用何種特定鏡像格式,鏡像格式數(shù)據(jù)都基于現(xiàn)有的PF結(jié)構(gòu)(例如表和索引)在存儲(chǔ)器中進(jìn)行創(chuàng)建,而不會(huì)引起對那些結(jié)構(gòu)的格式的改變。
[0036]通用體系架構(gòu)
[0037]圖1是根據(jù)一種實(shí)施例的數(shù)據(jù)庫系統(tǒng)的框圖。參考圖1,數(shù)據(jù)庫系統(tǒng)100包括易失性存儲(chǔ)器102和持久性存儲(chǔ)裝置110。易失性存儲(chǔ)器102—般表示由數(shù)據(jù)庫系統(tǒng)使用的隨機(jī)存取存儲(chǔ)器,并且可以通過任何數(shù)量的存儲(chǔ)器設(shè)備來實(shí)現(xiàn)。通常,當(dāng)發(fā)生故障時(shí),在易失性存儲(chǔ)器102存儲(chǔ)的數(shù)據(jù)丟失。
[0038]持久性存儲(chǔ)裝置110—般表示任何數(shù)量的持久性存儲(chǔ)設(shè)備,諸如磁盤、閃存存儲(chǔ)器和/或固態(tài)驅(qū)動(dòng)器。與易失性存儲(chǔ)器102不同,存儲(chǔ)在持久性存儲(chǔ)裝置110上的數(shù)據(jù)在發(fā)生故障時(shí)不會(huì)丟失。相應(yīng)地,在發(fā)生故障之后,持久性存儲(chǔ)裝置110上的數(shù)據(jù)可用來重建在易失性存儲(chǔ)器102中丟失的數(shù)據(jù)。
[0039]在易失性存儲(chǔ)器102中,數(shù)據(jù)庫服務(wù)器120正在執(zhí)行由一個(gè)或多個(gè)數(shù)據(jù)庫應(yīng)用(未示出)提交給數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)庫命令。被這些應(yīng)用使用的數(shù)據(jù)被示為PF數(shù)據(jù)112 JF數(shù)據(jù)112以PF數(shù)據(jù)結(jié)構(gòu)108駐留在持久性存儲(chǔ)設(shè)備110中。PF結(jié)構(gòu)108可以是,例如,行為主的盤塊。雖然行為主的盤塊被用于說明的目的,但是PF結(jié)構(gòu)可以采取任何形式,諸如列為主的盤塊、混合壓縮單元,等等。
[0040]易失性存儲(chǔ)器102還包括PF數(shù)據(jù)的高速緩存106。在高速緩存106內(nèi),數(shù)據(jù)以基于其中數(shù)據(jù)駐留在PF數(shù)據(jù)結(jié)構(gòu)108內(nèi)的格式的格式被存儲(chǔ)。例如,如果持久性格式是行為主的盤塊,則高速緩存106可以包含行為主的盤塊的高速緩存拷貝。
[0041]在另一方面,MF數(shù)據(jù)104處于與持久性格式無關(guān)的格式。例如,在其中持久性格式是行為主的盤塊的情況下,鏡像格式可以是列為主的壓縮單元。由于鏡像格式與持久性格式不同,因此MF數(shù)據(jù)104通過對PF數(shù)據(jù)執(zhí)行變換來產(chǎn)生。這些變換既在易失性存儲(chǔ)器102被初始地用MF數(shù)據(jù)104填充時(shí)發(fā)生(無論在啟動(dòng)時(shí)或根據(jù)需要時(shí)),又在易失性存儲(chǔ)器102在發(fā)生故障之后用MF數(shù)據(jù)104重新填充時(shí)發(fā)生。
[0042]重要的是,MF數(shù)據(jù)104的存在可以對向數(shù)據(jù)庫服務(wù)器提交數(shù)據(jù)庫命令、利用MF數(shù)據(jù)104的數(shù)據(jù)庫應(yīng)用是透明的。例如,被設(shè)計(jì)為與在PF數(shù)據(jù)112上獨(dú)自操作的數(shù)據(jù)庫系統(tǒng)交互的那些相同的應(yīng)用除了 PF數(shù)據(jù)112之外還可以不加修改地與維護(hù)MF數(shù)據(jù)104的數(shù)據(jù)庫服務(wù)器交互。此外,對那些應(yīng)用透明,該數(shù)據(jù)庫服務(wù)器可以使用MF數(shù)據(jù)104來更高效地處理那些數(shù)據(jù)庫命令中的一些或全部。
[0043]鏡像格式數(shù)據(jù)
[0044]MF數(shù)據(jù)104可以鏡像所有PF數(shù)據(jù)112或其子集。在一種實(shí)施例中,用戶可以指定PF數(shù)據(jù)112的哪一部分是“啟用存儲(chǔ)器中(in-memory enabled)”??梢栽谌魏瘟6燃墑e做出該指定。例如,什么啟用存儲(chǔ)器中的指定可以至少在以下粒度級別做出:
[0045].整個(gè)數(shù)據(jù)庫
[0046].指定的表
[0047].指定的列
[0048].指定的行范圍
[0049].指定的分區(qū)
[0050].指定的段
[0051]?指定的擴(kuò)展區(qū)(extent)
[0052].或其任意組合(例如指定的列和分區(qū))
[0053]如將在下文中進(jìn)行描述的,啟用存儲(chǔ)器中的數(shù)據(jù)被轉(zhuǎn)換成鏡像格式并且在易失性存儲(chǔ)器中存儲(chǔ)為MF數(shù)據(jù)104。因此,當(dāng)查詢需要啟用存儲(chǔ)器中的數(shù)據(jù)時(shí),數(shù)據(jù)庫服務(wù)器具有從PF數(shù)據(jù)112或者從MF數(shù)據(jù)104中任一個(gè)提供數(shù)據(jù)的選項(xiàng)。轉(zhuǎn)換和加載可以在數(shù)據(jù)庫啟動(dòng)的時(shí)間發(fā)生,或者以懶惰或按需的方式發(fā)生。沒有處于啟用存儲(chǔ)器中的數(shù)據(jù)沒有在MF數(shù)據(jù)104中被鏡像。因此,當(dāng)查詢需要這種數(shù)據(jù)時(shí),數(shù)據(jù)庫服務(wù)器不具有從MF數(shù)據(jù)104中獲取該數(shù)據(jù)的選項(xiàng)。
[0054]為了解釋的目的,將假定PF數(shù)據(jù)結(jié)構(gòu)108包括在圖2A中所示的表200。表200包括三個(gè)列cl-c3和六個(gè)行rl-r6。雖然在圖2A中示出的表200描繪了數(shù)據(jù)邏輯上如何被組織在持久性存儲(chǔ)裝置110中,但是其中數(shù)據(jù)被物理上存儲(chǔ)的實(shí)際格式可能是完全不同的。
[0055]具體而言,參考圖2B,它示出了駐留在表200中的數(shù)據(jù)如何可以被物理上組織在持久性存儲(chǔ)裝置110中。在本例子中,用于表200的數(shù)據(jù)被存儲(chǔ)在三個(gè)行為主的盤塊202、204和206中。塊202存儲(chǔ)用于行rl的所有列的值,接著用于行r2的所有列的值。塊204存儲(chǔ)用于行r3的所有列的值,接著行r4的所有列的值。最后,塊206存儲(chǔ)行r5的所有列的值,接著行r6的所有列的值。
[0056]那些盤塊中的一些盤塊的拷貝可以被臨時(shí)存儲(chǔ)在高速緩存106中。在圖2B所示的例子中,塊204的高速緩存拷貝212駐留在高速緩存106中。高速緩存106可以利用各種高速緩存管理技術(shù)中的任何一種技術(shù)來管理,并且本文描述的實(shí)施例不限于任何特定的高速緩存管理技術(shù)。一般而言,這些技術(shù)試圖在易失性存儲(chǔ)器102中保留最有可能在不久的將來被請求的盤塊的拷貝。因此,當(dāng)高速緩存106用完空間時(shí),較不可能被請求的盤塊的高速緩存拷貝被更可能被請求的塊的拷貝替換。
[0057]與高速緩存106中的數(shù)據(jù)相比,鏡像格式數(shù)據(jù)104沒有以基于持久性格式的方式被格式化。在圖不的例子中,鏡像格式數(shù)據(jù)104包括兩個(gè)列向量220和222。每個(gè)列向量存儲(chǔ)來自表200的單個(gè)列的連續(xù)的一系列值。在本例子中,列向量220存儲(chǔ)來自表200的列I的值,并且列向量222存儲(chǔ)來自表300的列3的值。在這個(gè)例子中,MF數(shù)據(jù)104鏡像PF數(shù)據(jù)的子集,因?yàn)镸F數(shù)據(jù)104不包括用于表200的列2的列向量。
[0058]MF數(shù)據(jù)的組織
[0059]根據(jù)一種實(shí)施例,即使MF數(shù)據(jù)使用與PF數(shù)據(jù)不同的格式,MF數(shù)據(jù)也以對應(yīng)于PF數(shù)據(jù)組織的方式進(jìn)行組織。例如,在持久性存儲(chǔ)裝置110中,PF數(shù)據(jù)可以被存儲(chǔ)在駐留在擴(kuò)展區(qū)中的塊中,其中擴(kuò)展區(qū)又被組織成段。在這些情況下,在易失性存儲(chǔ)器102內(nèi),MF數(shù)據(jù)104可以基于數(shù)據(jù)所屬的擴(kuò)展區(qū)和/或段進(jìn)行組織。因此,列向量220可以被劃分成向量部分,其中每個(gè)部分對應(yīng)于擴(kuò)展區(qū)和/或段的特定范圍。
[0060]在擴(kuò)展區(qū)內(nèi),數(shù)據(jù)通常按rowid進(jìn)行排序。類似地,在一種實(shí)施例中,MF數(shù)據(jù)104基于rowid進(jìn)行排序。例如,在列向量220中的值基于用來排序塊202、204和206中的PF數(shù)據(jù)的同一rowid進(jìn)行排序。具體而言,rowid rl緊挨著在rowid r2之前,因此rlcl在列向量220中緊挨著在r2cl之前,并且rlcl至rlc3在塊202中緊挨著在r2cl至r2c3之前。
[0061 ] 在可替代實(shí)施例中,MF數(shù)據(jù)104中的數(shù)據(jù)項(xiàng)的一些或全部沒有在MF數(shù)據(jù)104內(nèi)按rowid排序。以不同的順序存儲(chǔ)數(shù)據(jù)項(xiàng)會(huì)是有用的,例如,如果不同的排序產(chǎn)生顯著更好的壓縮。作為另一個(gè)例子,列向量可以最初按rowid進(jìn)行排序。但是,當(dāng)新的更新被“合并到”列向量中時(shí)(如將在后面更詳細(xì)討論的),更新的值可以附加到現(xiàn)有列向量的尾部,以避免必須解壓縮和重新壓縮現(xiàn)有的列向量。
[0062]當(dāng)列向量內(nèi)的數(shù)據(jù)項(xiàng)不按rowid排序時(shí),存儲(chǔ)器中索引可以建立在rowid上,以在MF數(shù)據(jù)104內(nèi)快速定位與任