用于分布式数据库系统的系统范围检查点避免的制作方法_4

文档序号:9457678阅读:来源:国知局
写入,如同它们由存储节点接收。指定来自先前版本的页面的以A形式的用户/数据页面改变的两个△用户日志记录(DULR),以及指定完全用户/数据页面的内容的绝对用户日志记录(AULR)可被完全写入日志中。日志记录可添加至这个区中,以近似它们被接收(例如,它们不是通过LSN来分类)以及它们可横跨日志页面的顺序。日志记录可为自描述的,例如,它们可包含它们自身的大小的指示。在一些实施方案中,在这个区域中未执行无用数据收集。相反,在所有需要的日志记录已经被复制至冷日志后,可通过从日志开始截断来改造空间。每次扇区被写入时,在热区中的日志扇区可用最近已知的无条件的VDL来注释。有条件的VDL CLR可在它们被接收时被写入至热区中,但仅最近写入的VDL CLR可能为有意义的。
[0091 ] 在一些实施方案中,每次新的日志页面被写入时,它可被分配一个刷新数目。刷新数目可被写入作为每个日志页面内的每个扇区的部分。当比较两个日志页面时,刷新数目可用于确定哪个日志页面稍后被写入。刷新数目可单调增加,并且范围至SSD (或存储节点)。例如,一组单调增加的刷新数目在SSD上的所有区段之间(或在存储节点上的所有区段)共享。
[0092]在一些实施方案中,在冷日志区中,日志记录可能以它们的LSN增长顺序来存储。在这个区中,AULR可能不必被顺序存储,取决于它们的大小。例如,如果它们具有大的有效负载,所述有效负载的全部或一部分可存储在数据区中,并且它们可指向它们的数据被存储在数据区中的地方。在一些实施方案中,在冷日志区中的日志页面每次可一整页面地被写入,不是扇区接着扇区地。因为在冷区中的日志页面每次被整个页面地写入,用于其所有扇区中的刷新数目不相同的冷区中的任何日志页面可被认为是不完全写入的页面并且可被忽略。在一些实施方案中,在冷日志区中,DULR可以能够横跨日志页面(直到两个日志页面的最大值)。然而,AULR可能不能够跨越日志扇区,例如,以使得合并操作在单个原子写入中将能够用AULR来替换DULR。
[0093]在一些实施方案中,冷日志区通过从热日志区复制日志记录来填充。在此类实施方案中,仅其LSN小于或等于当前无条件的卷耐用LSN (VDL)的日志记录可为符合条件的以便被复制到冷日志区。当将日志记录从热日志区移动至冷日志区时,一些日志记录(如许多CLR)可能不需要被复制因为它们不再是必须的。此外,可在这个点处执行用户页面的一些附加合并,其可简化所需的复制数量。在一些实施方案中,一旦给定热区日志页面已被完全写入,并且不再是最新的热区日志页面,以及在热区日志页面上的所有ULR已被成功复制到冷日志区,所述热区日志页面可被释放和再使用。
[0094]在一些实施方案中,无用数据收集可在冷日志区中进行,以便改造由废弃日志记录占据的空间,例如,不再需要存储在存储层的SSD中的日志记录。例如,当存在用于相同用户页面的随后AULR,以及由日志记录代表的版本的用户页面不再被需要在SSD上保留时,日志记录可变成废弃的。在一些实施方案中,通过合并两个或更多的邻近日志页面以及用更少的新日志页面来替换它们,所述更少的新日志页面包含来自它们替换的日志页面的所有非废弃的日志记录,无用数据收集进程可改造空间。新的日志页面可被分配大于它们替换的日志页面的刷新数目的新的刷新数目。在这些新的日志页面的写入完成后,替换的日志页面可被添加至空闲页面库。注意在一些实施方案中,可能不存在使用任何指针的日志页面的任何明确链接。反而,日志页面的序列可通过在那些页面上的刷新数目来含蓄地确定。每当日志记录的多个副本被发现时,在日志页面中存在的具有最高刷新数目的日志记录可被认为是有效的,并且其他的可被认为是废弃的。
[0095]在一些实施方案中,例如,因为在数据区(扇区)内管理的空间的间隔尺寸可不同于数据区(存储页面)外的间隔尺寸,可能存在一些存储残片。在一些实施方案中,为使得这个存储残片在控制下,所述系统可追踪由每个数据页面使用的扇区的数目,可优先从几乎完全的数据页面分配,并且可优先无用数据收集几乎空的数据页面(如果它仍为相关的,其可需要将数据移动至新的位置)。注意在一些实施方案中,被分配至区段的页面可能在所述三个区中被重定意图。例如,当被分配至区段的页面被释放时,它可保持与那个区段关联持续某个时间段,并且随后可在那个区段的三个区中的任何一个中使用。每个扇区的扇区标头可指示所述扇区属于的区。一旦页面中的所有扇区为空闲的,所述页面可返回在区上共享的常用空闲存储页面池。这个空闲存储页面共享在一些实施方案中可减少(或避免)存储残片。
[0096]在一些实施方案中,本文描述的分布式数据库优化存储系统可在存储器中维持各种数据结构。例如,对于在区段中存在的每个用户页面,用户页面表格可存储比特,所述比特指示这个用户页面是否为“清除的”(即它是否包括所有零点)、来自用于页面的冷日志区的最新日志记录的LSN、以及来自用于页面的热日志区的所有日志记录的位置的阵列/列表。对于每个日志记录,用户页面表格可存储扇区数目、那个扇区内的日志记录偏移、将在那个日志页面内读取的扇区的数目、第二日志页面(如果日志记录跨越日志页面)的扇区数目、以及将在那个日志页面内读取的扇区的数目。在一些实施方案中,用户页面表格也可存储来自冷日志区的每个日志记录的LSN,和/或用于最新的AULR (如果它在冷日志区)的有效负载的扇区数目的阵列。
[0097]在本文描述的分布式数据库优化存储系统的一些实施方案中,LSN索引可存储在存储器中。LSN索引可将LSN映射至冷日志区内的日志页面。假设在冷日志区中的日志记录被分类,它可能将包括每个日志页面一个条目。然而,在一些实施方案中,每个非废弃的LSN可存储在索引中,并且映射至对应的扇区数目、偏移、和用于每个日志记录的扇区的数目。
[0098]在本文描述的分布式数据库优化存储系统的一些实施方案中,日志页面表格可存储在存储器中,并且日志页面表格可在冷日志区的无用数据收集期间使用。例如,日志页面表格可识别哪些日志记录为废弃的(例如,哪些日志记录可被无用数据收集),以及多少空闲空间在每个日志页面上可用。
[0099]在本文描述的存储系统中,程度可为代表可与其他程度组合(连结的或剥离的)以便代表卷的高耐用存储单元的逻辑概念。可通过单个保护组中的成员关系使得每个程度耐用。程度可给LSN类型的读取/写入接口提供具有在创建时限定的固定大小的连续字节子范围。对程度的读取/写入操作可通过包含的保护组映射至一个或多个合适的区段读取/写入操作中。如本文使用的,术语“卷程度”可指用于代表卷内的具体字节子范围的程度。
[0100]如以上指出的,卷可包括多个程度,每个程度由包括一个或多个区段的保护组代表。在一些实施方案中,指向不同程度的日志记录可具有交错的LSN。为改变直到特定LSN的卷以便(使其)为耐用的,可能需要直到那个LSN的所有日志记录为耐用的,无论它们属于的程度。在一些实施方案中,客户端可追踪还未被使得耐用的突出日志记录,并且一旦直到具体LSN的所有ULR被使得耐用,它可将卷耐用LSN(VDL)消息发送至卷中的保护组中的一个。VDL可被写入至用于保护组的所有同步镜像区段。这有时被称为“无条件VDL”,并且它可周期性地持续至各种区段(或更具体地,至各种保护组)连同在所述区段上发生的写入活动。在一些实施方案中,无条件VDL可存储在日志扇区标头中。
[0101]在各种实施方案中,可在区段上执行的操作可包括写入从客户端接收的DULR或AULR(其可包括将DULR或AULR写入至热日志区的尾部,以及随后更新用户页面表格)、读取冷用户页面(其可包括定位用户页面的数据扇区,以及返回它们而不需要应用任何附加的DULR)、读取热用户页面(其可包括定位用于用户页面的最近AULR的数据扇区,将任何随后的DULR应用至用户页面,在返回它前),用AULR替换DULR(其可包括合并用于用户页面的DULR以便创建替换应用的最后DULR的AULR)、操纵日志记录等。如本文描述的,合并为将DULR应用至较早版本的用户页面以便创建稍后版本的用户页面的进程。因为(直到另一 DULR被写入)在合并前写入的所有DULR可能不需要按需读取和应用,合并用户页面可帮助简化读取时延。通过使得旧的AULR和DULR为废弃的(假定不存在需要日志记录为当前的快照),它也可帮助改造存储空间。在一些实施方案中,合并操作可包括定位最近的AULR,以及依次应用任何随后的DULR而不跳过DULR中的任何一个。如以上指出的,在一些实施方案中,合并可能不在热日志区内执行。反而,它可在冷日志区内执行。在一些实施方案中,当日志记录从热日志区复制至冷日志区时,合并也可被执行。
[0102]在一些实施方案中,合并用户页面的决定可由用于页面的未决定的DULR链的大小(例如,如果DULR的长度超过用于合并操作的预先限定的阈值,根据全系统的、具体应用的或客户端指定的政策))、或由被客户端读取的用户页面来触发。
[0103]图7为示出根据一个实施方案的数据库卷710的示例性配置的框图。在这个实例中,对应于各种地址范围715(被示出作为地址范围715a-715e)中的每一个的数据被存储为不同的区段745 (被示出为区段745a-745n)。更具体地,对应于各种地址范围715中的每一个的数据可被组织至不同的程度(被示出作为程度725a-725b,和程度735a-735h)中,并且这些程度中的每一个可包括在不同的保护组730 (被示出作为730a-730f)中,用或不用剥离(如被示出为带区集720a和带区集720b)。在这个实例中,保护组I示出擦除编码的使用。在这个实例中,保护组2和3以及保护组6和7代表彼此的镜像数据组,同时保护组4代表单个实例(非冗余的)的数据组。在这个实例中,保护组8代表组合其他保护组的多层保护组(例如,这可代表多区域保护组)。在这个实例中,带区集I (720a)和带区集2 (720b)示出在一些实施方案中程度(例如,程度725a和725b)可如何被剥离至卷中。
[0104]更具体地,在这个实例中,保护组I (730a)包括程度a_c (735a_735c),所述程度a-c(735a-735c)分别包括来自范围1_3 (715a_715c)的数据,并且这些程度可映射至区段l-4(745a-745d)。保护组2(730b)包括程度d(735d),所述程度d(735d)包括从范围4 (715d)剥离的数据,并且这个程度映射至区段5-7 (745e-745g)。类似地,保护组3 (730c)包括程度e(735e),所述程度e(735e)包括从范围4(715d)剥离的数据,并且被映射至区段8-9(745h-745i),以及保护组4(730d)包括程度f (735f),所述程度f (735f)包括从范围4(715d)剥离的数据,并且被映射至区段10(745j)。在这个实例中,保护组6 (730e)包括程度g(735g),所述程度g(735g)包括从范围5(715e)剥离的数据,并且被映射至区段11-12 (745k-7451),以及保护组7(730f)包括程度h (735h),所述程度h (735h)包括从范围5(715e)剥离的数据,并且被映射至区段13-14(745m-745n)。
[0105]现在转向图8,在各种实施方案中,如上所述,数据库系统可被配置来响应于对存储在存储节点上的数据页面内的数据的各种访问请求(例如,写入请求)产生重做日志记录,并且将重做日志记录发送至存储针对其产生重做日志记录的相应数据页面的存储节点。存储节点可检测特定数据页面的合并事件,并且作为响应针对特定数据页面执行合并操作。相比之下,典型的数据库系统可应用系统范围检查点,所述系统范围检查点以周期性间隔刷新将应用至所存储数据的所有所产生的重做日志,从而扰乱访问请求和由数据库系统执行的其他任务的处理。
[0106]尽管图8的方法可被描述为由日志结构化存储系统、如分布式数据库优化存储系统410的各种部件(例如,存储系统服务器节点430、440、450等)来执行,但是在一些情况下所述方法不需要由任何特定部件来执行。例如,在一些情况下,根据一些实施方案,图8的方法可由一些其他部件或计算机系统执行。或者,在一些情况下,数据库系统400的部件可以与图4的实例中所示不同的方式组合或存在。在各种实施方案中,图8的方法可由分布式数据库优化存储系统的一个或多个计算机执行,所述计算机中的一个被示出为图10的计算机系统。图8的方法被示出为用于系统范围检查点避免的方法的一种示例性实现方式。在其他实现方式中,图8的方法可包括另外的或比所示少的框图。
[0107]如810处所指示,可维持链接至存储用于数据库的特定数据页面的重做日志记录。这些重做日志记录(有时称为如以上所述的ULR)可描述用户数据的改变。重做日志记录可链接至用户数据的特定部分,如数据页面。例如,在一些实施方案中,重做日志记录可形成最终链接至特定数据页面的一连串重做日志记录,其中每个重做日志记录指向先前接收的数据页面的重做日志记录。使用这个实例,如果三个重做日志记录链接至特定数据页面,那么最近接收的重做日志记录将指向下一个最近接收的重做日志记录,所述下一个最近接收的重做日志记录又将指向第三个最近接收的重做日志记录,所述第三个最近接收的重做日志记录指向数据页面的最近保存状态。请注意,由指向前一重做日志记录的每个指针指示的重做日志记录的逻辑排序不暗示此类重做日志记录以这种顺序物理存储。如以上关于图6讨论的,在一些实施方案中,这些重做日志记录可与链接至用户数据的其他部分的其他重做日志记录交错。因此,先前实例不意图进行限制。
[0108]在各种实施方案中,可从可管理一个或多个数据库的数据库系统、如数据库引擎头节点420接收重做日志记录,用于所述一个或多个数据库的数据可存储在存储节点如存储节点430、440、450等处。然而,在至少一些实施方案中,存储节点可从一个或多个另外数据库系统或节点接收重做日志记录,存储节点存储用于另外数据库系统或节点的数据。这些其他数据库系统或节点也可发送链接至存储在存储节点处的用于其相应数据库的数据的特定部分的重做日志记录。
[0109]在一些实施方案中,随后可存储接收的重做日志记录。图6描述此类重做日志记录可在存储节点处被接收、处理并存储的方式的各种实施方案。可维持所存储重做日志记录的各种形式的元数据,如链接至特定部分数据(如数据页面)的重做日志记录的数目或计数。例如,如果像在以上给定的实例中,三个重做日志记录链接至特定数据页面,那么针对特定数据页面的重做日志记录计数可维持在三。可维持关于重做日志记录的其他元数据、如大小或物理位置,以及它们所链接至的数据的部分、如指向各个其他日志记录的指针或指向数据页面的最近保存状态的指针。
[0110]响应于重做日志记录自身的改变、它们所链接至的特定数据页面的改变、或通过利用重做日志记录执行的或关于重做日志记录的操作或其他方法或技术,可对所维持的所存储重做日志记录的元数据进行更新。例如,如果如830处所指示执行合并操作以应用链接至特定数据页面的一个或多个重做日志记录来产生数据页面的当前状态,那么重做日志记录计数可更新,以将那些所应用的重做日志记录从针对特定数据页面的重做日志记录计数移除。
[0111]在各种实施方案中,至少部分地基于链接至特定数据页面的一个或多个重做日志记录,可检测特定数据页面的合并事件,如820处所指示。检测到的合并事件可指示可针对特定数据页面执行合并操作。在至少一些实施方案中,检测特定数据页面的合并事件可独立于或不考虑所检测的其他数据页面的合并事件而发生。考虑其中特定数据页面可以是许多重做日志记录针对其被接收的“热”数据页面的情境。可极少地接收针对其他数据页面的重做日志记录。检测合并事件可基于链接至相应数据页面的重做日志记录的数目超过合并阈值,并且因此在这种情境下,与其他数据页面相比可更频繁地检测特定“热”数据页面的合并事件。
[0112]检测合并事件可作为存储节点监视部件或进程(其可作为后台进程运行)的一部分执行,其中处置读取、写入和其他访问请求的前台进程可先于(或迟于)检测合并事件执行。合并事件的检测可以周期性间隔或非周期性间隔发生,如在存储节点的工作负载小于工作负载阈值时。
[0113]可实施用于至少部分地基于链接至特定数据页面的重做日志记录检测合并事件的各种方法和技术。例如,在至少一些实施方案中,可利用合并阈值检测合并事件。合并阈值可限定在检测到合并事件之前可链接至特定数据页面的重做日志记录的数目。例如,如果特定数据页面具有11个重做日志记录,超过10个重做日志记录的合并阈值,那么可检测到合并事件。针对不同的数据页面可利用不同的合并阈值。例如,再次考虑接收链接至数据页面的频繁重做日志记录的“热”数据页面情境。与较不频繁地接收重做日志记录的数据页面相比,针对“热”数据页面可利用更高的合并阈值,从而减少针对“热”数据页面执行的合并操作的数目。可替代地,在一些实施方案中,可利用相同或类似的合并阈值。合并阈值也可与各种其他技术或部件结合。例如,使用其他部件来计算何时可超过合并阈值,以及设置计时器或其他部件以向执行合并事件检测的后台监视器或其他进程指示应检查针对特定数据页面的重做日志记录计数。
[0114]在至少一些实施方案中,可确定针对特定数据页面(或针对特定数据页面组)的合并阈值。例如在一些实施方案中,可根据用户限定的合并阈值来确定合并阈值。用户限定的合并阈值可为请求的、确定的或向来自数据库系统的存储节点(如数据库引擎头节点420)指示的合并阈值,或数据库系统的客户端可供应将用于检测合并事件的合并阈值。在一些实施方案中,合并阈值可基于存储节点的工作负载或性能来确定。例如,在一些实施方案中,如果工作负载或性能测量指示执行合并操作的能力低,那么可增加合并阈值,以使得存储节点在其当前工作负载下可处置所述数目的检测到的合并事件。在一些实施方案中,可计算针对特定数据页面接收重做日志记录的速率或频率,并且将其用于确定合并阈值。在至少一些实施方案中,各种其他特征可用于确定合并阈值,如重做日志记录的大小、重做日志记录在物理存储中的位置、可供用于存储重做日志记录的空间、和/或可执行合并操作以将重做日志记录应用至先前存储版本的数据页面的时间。
[0115]响应于检测特定数据页面的合并事件,可将链接至特定数据页面的一个或多个重做日志记录应用至先前存储版本的特定数据,以产生在它的当前状态下的特定数据页面,如830处所指示。在至少一些实施方案中,应用链接至特定数据页面的重做日志记录作为合并操作的一部分执行。如以上所述的合并操作或合并可将重做日志记录(如DULR)应用至更早版本的用户页面,以创建稍后版本的用户页面。在一些实施方案中,合并操作可包括定位最近的AULR(例如,先前存储版本的数据页面),以及依次应用任何随后的DULR而不跳过任何DULR。例如,如果3个DULR被接收并链接至AULR,将第一接收的DULR应用至AULR(从而将第一接收的改变应用至先前存储的数据页面)。随后,应用下一个接收的DULR,并且最后应用最近的DULR,从而以基于在存储节点处接收DULR所确定的顺序来应用DULR0在一些实施方案中,产生新的AULR以作为特定数据页面的当前状态。可更新以上讨论的元数据(如重做日志记录计数)以反映重做日志记录的应用,并且考虑到重做日志记录计数,从计数移除它们的数目。
[0116]在至少一些实施方案中,在检测合并事件(820处所指示)与应用重做日志记录(830处所指示)之间可存在或强制实施延迟。例如,执行所述检测和所述应用的存储节点的工作负载可确定执行应用重做日志记录与检测合并事件之间的延迟。类似地,响应于检测合并事件而应用重做日志记录可作为后台进程的一部分执行,后台进程被简化或仅当不执行前台进程、如处置各种访问请求(例如,读取请求或写入请求)时执行。可将延迟的合并操作或数据页面的重做日志的应用输入至数据结构中,如确定数据页面何时应应用重做日志记录的顺序、次序或时机的先进先出(FIFO)队列或优先队列。例如,如果像在以上描述的情境中,“热”数据页面具有检测到的合并事件,可更有效的是对“热”数据页面而不是另一数据页面执行应用重做日志。作为延迟或执行应用重做日志记录(作为后台进程)的结果,可接收链接至已经被检测到合并事件的数据页面的一个或多个另外重做日志记录。在至少一些实施方案中,当其他重做日志记录应用至先前存储版本的数据页面时,可应用这些另外重做日志记录。
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1