云数据库节点间数据同步方法、装置及介质与流程
未命名
08-05
阅读:86
评论:0

云数据库节点间数据同步方法、装置及介质
1.相关申请案交叉申请
2.本发明要求2020年11月30日递交的发明名称为“云数据库节点间数据同步方法、装置及介质(method,apparatus and medium for data synchronization between cloud database nodes)”的第17/107,588号美国非临时申请案的在先申请优先权,该在先申请的内容以引入的方式并入本文。
技术领域
3.本发明涉及分布式数据库管理,尤其涉及云数据库节点间数据同步方法、装置及处理器可读介质。
背景技术:
4.云计算是一种基于网络的计算形式(例如,基于互联网的计算形式),它允许访问可配置计算资源和更高级别服务的共享池,这些资源和服务可以通过互联网以最少的管理工作量快速调配。云计算是继从基于大型机的计算向基于客户端-服务器的计算转变之后的另一行为方式的转变,并作为服务实现。云计算服务提供商通常通过按需创建虚拟机以供客户使用,来提供三种主要类型的服务(以下称为云计算服务):基础设施即服务(infrastructure as aservice,iaas)、平台即服务(platform as a service,paas)和软件即服务(software as aservice,saas)。iaas提供了可供客户租用和使用的计算基础设施。计算基础设施包括在客户之间共享的虚拟化物理计算资源(例如,处理器、内存、存储、服务器、网络组件等)。paas提供了一个平台,允许客户开发、运行和管理软件应用,而无需构建和维护计算基础设施。saas以订阅的方式通过互联网按需提供在计算基础设施上运行的软件应用。
5.通常,云计算服务提供商提供的一种云计算服务为数据库服务。数据库服务是一种paas,它使云计算服务提供商能够为客户提供安全和经济的企业级数据库。在数据库服务中,数据库可以由多个不同的实体(例如,不同的主服务器)修改(例如,使用写操作修改数据)。为了跟踪对数据库所做的更改,描述更改的信息通常作为重做日志记录存储在重做日志中。因此,重做日志包含描述对数据库内容所做的所有更改的历史的信息,可用于(例如,发生故障时)重构数据库内容。重做日志记录还可用于确保数据库的副本正确反映原始(或主)数据库中包含的数据。
6.应用重做日志记录来更新数据库副本上的数据时云数据库存在局限性。每个副本都需要支持只读事务,以访问从云存储检索到的数据库数据。然而,每个副本通常具有本地数据缓存(也称为缓冲池),用于在本地保存数据,以满足从客户端接收的读取请求。当数据库主服务器更新数据库数据时,副本缓冲池中的本地存储数据被认为过期或过时。为了使数据库副本能够读取更新后的数据,必须在数据库主服务器和数据库副本之间协调或同步数据。这种数据同步方法应能够实现三个不同的功能:首先,更新副本中的主服务器执行的事务列表;其次,使副本缓冲池中由于活动事务而过期的数据无效或弃用,从而使副本接收
到的读取请求不会导致访问数据的过时本地版本;最后,更新存储在副本上的索引值,该索引值指示数据库主服务器执行的哪些事务已由副本处理或注册(例如日志序号或lsn,如下所述)。通常,副本执行的数据同步方法包括:从主服务器接收重做日志记录,根据重做日志记录的内容弃用本地存储的数据,将重做日志记录应用于本地存储的数据以更新本地存储的数据,并更新本地存储的索引值,该索引值指示事务序列中的哪些重做日志记录已应用。在本地数据(例如数据页面)弃用之后但在其更新之前,副本收到的读取请求可能会导致滞后,这是因为副本正在等待本地数据更新,或者副本必须从远程存储中检索更新后的数据。
7.在执行上述数据同步方法时,可考虑两个性能指标。首先,应最大限度地减少主服务器和副本之间的数据可见性滞后(理想情况下)。数据可见性滞后表示主服务器对数据库数据进行更改并提交更改与副本注册更改以弃用其本地存储的数据之间的时间滞后。其次,应最大限度地提高副本的查询吞吐量。副本的查询吞吐量反映了副本在给定时间段内(例如,每秒)可以满足的读取请求的数量。在现有的主服务器与副本间数据同步方法中,当数据库主服务器有较重的写入更新工作负载(即给定时间段内,如每秒,处理和提交大量数据库数据更新)时,这两个指标都可能受到影响:数据可见性滞后可能会增加,查询吞吐量可能会下降。
8.数据库主服务器与数据库副本间数据同步一般采用两种方法:顺序应用重做日志记录和主动并行应用重做日志记录。在顺序应用重做日志记录的方法中,副本仅维护其缓冲池中每个数据页面的单个版本。副本接收到一组重做日志记录后,会对重做日志记录进行解析,以识别该组重做日志记录中包含在单个迷你事务(mini-transaction,mtr,详述如下)中的重做日志记录更新的所有数据页面。然后,副本获取副本缓冲池中存在的所有这些数据页面的排他锁。迷你事务中的重做日志记录并行应用于相应的本地存储(锁定)的数据页面,以生成这些数据页面的更新本地副本。本地数据页面更新后,副本释放这些页面的排他锁。然后,更新副本存储的活动事务列表,以指示哪些事务已处理(即应用于本地存储的页面)。
9.顺序应用重做日志记录的方法存在局限性。重做日志可能包含很多mtr,且mtr之间存在依赖关系。由于副本缓冲池中每个页面只有一个版本,为了保证一致性,副本必须按顺序处理每个mtr。这可能会增加数据可见性滞后,且由于争用页面锁而降低查询吞吐量。
10.在主动并行应用重做日志记录的方法中,副本缓冲池可以存储给定数据页面的多个版本。缓冲池中的每个数据页面都是只读的,这意味着页面一旦创建,就不会再修改。这允许对数据页面进行无锁读取访问。副本接收到一组重做日志记录后,会对重做日志记录进行解析,以识别在事务序列的某个点(例如,目标索引值,如目标lsn)之前包含在任何mtr中的重做日志记录更新的所有数据页面。然后,副本标识这组mtr中的所有数据页面。副本缓冲池中的每个这样的数据页面都用更新后的索引值标记,该索引值指示事务序列中该页面到期的点(例如,过期lsn)。无需锁定数据页面。接着,要应用于给定数据页面的重做日志记录应用于缓冲池中该数据页面的本地副本,以生成该页面的更新版本。注意,仅当数据页面的本地副本的过期lsn大于(例如,在序列中较后)或等于重做日志记录的起始lsn时,才可通过该重做日志记录更新该页面的本地副本(例如,仅当数据页面的本地副本的过期lsn为1000或更大时,才可通过lsn=1000和lsn=2000之间的一组重做日志记录更新该数据页面的本地副本)。通常,副本仅接收lsn范围从副本的可见lsn开始的记录;因此,仅当数据页
面的过期lsn等于副本的可见lsn(有时记为到期lsn=max)时,才可更新数据页面的本地副本。在这组mtr中,可以在多个数据页面上并行应用重做日志记录。应用重做日志记录后,更新副本存储的活动事务列表,以指示哪些事务已处理(即应用于本地存储的页面),并将可见索引值(例如,可见lsn)更新为目标索引值(例如,目标lsn)。当副本接收到的读取请求需要读取缓冲池中的数据页面时,使用可见索引值访问数据页面的正确版本,以保证一致性。
11.与顺序应用重做日志记录的方法不同,这种主动并行方法支持日志应用(即数据页面更新)和数据页面读取请求的无锁数据页面访问。通过在一定程度上实现重做日志记录并行应用,可以加快重做日志记录应用性能。然而,这种方法仍然存在局限性。第一,这种方法会为每个数据页面创建多个新版本,导致在副本缓冲池中生成和存储许多未使用的数据页面并存储在内存中。这些本地存储的副本占用缓冲池中的空间,增加了缓冲压力,从而降低吞吐量。第二,应用重做日志记录会消耗数据库副本服务器上的处理器资源(例如,cpu周期)。副本上的处理器资源受到限制;当处理器资源的使用达到最大时,例如在数据库主服务器的高事务量期间,重做日志记录应用进程无法赶上从数据库主服务器接收的更新速率。数据可见性滞后随着时间的推移而增长,不断增长的滞后也将降低副本的查询吞吐量。第三,在这种方法中,云存储的输入和输出负载可能非常高。仅当数据页面在应用重做日志记录时存在于副本缓冲池中,才可更新副本上数据页面的本地副本。如果数据页面不在缓冲池中,且需要对该数据页面的最后一个版本应用重做日志记录,则必须从远程云存储检索该数据页面,由于云存储系统被迫产生大量的小数据页面读取,增加了云存储的输入/输出压力。这可能会进一步降低副本的查询吞吐量。第四,这种方法可能会导致高数据可见性滞后。更新后的数据页面仅在应用该组mtr中的所有重做日志记录后对新读取请求可见,这可能会增加受该组mtr中重做日志记录影响的数据页面的任何读取请求的数据可见性滞后。
12.因此,需要提供一种用于通过应用重做日志记录来同步数据库副本上的数据的方法,以克服上述现有方法的一种或多种限制。
技术实现要素:
13.本发明描述了仅当向数据库副本请求页面的当前版本时,重做日志记录才应用于数据库副本上的页面的示例。此功能可以有助于减少内存资源和处理资源的消耗。
14.在一些示例中,数据库副本节点可以通过日志缓存来跟踪适用于给定页面的最近重做日志记录。当该页面的当前版本被请求时,可以应用日志缓存中存储的最近重做日志记录来按需更新该页面。通过仅应用适用于当前请求的页面的重做日志记录,处理资源只可用于生成当前所需的页面。处理资源可主要用于使频繁请求的页面保持最新,从而可以减少如果所有页面都更新(即使页面从未被请求)可能会产生的延迟。
15.如本文在重做日志记录背景下所使用的,术语“应用”可指使用重做日志记录的内容修改或更新数据库的数据页面的过程。一个或多个重做日志记录可以应用于数据页面的过期版本,以更新数据页面的内容,从而反映重做日志记录中记录的对数据库内容的更改。
16.如本文所使用的,术语“页面”指数据库的数据页面。
17.如本文所使用的,术语“数据库主服务器”应指云数据库中用于处理对数据库的修改的服务器或其他节点,对数据库的修改包括插入、更新或删除数据库记录的请求。术语“数据库副本服务器”应指云数据库中用于仅处理读取请求的服务器或其他节点,例如选择数据库记录的请求。数据库副本服务器可基于从数据库主服务器接收到的重做日志记录来维护数据库的部分或全部数据页面的副本,如本文中示例实施例所述。在一些配置中,云数据库可以是具有多个数据库主服务器的多主数据库;在这种情况下,每个附加的数据库主服务器可以参照数据库副本服务器实现本文所描述的一些重做日志按需应用技术,因此可以被认为属于所描述实施例的“数据库副本服务器”的定义范围。数据库主服务器和数据库副本服务器可以统称为“数据库服务器”。
18.在一些方面,本发明描述了一种用于同步云数据库的数据库副本服务器的数据的方法,云数据库包括存储在页面中的数据。所述方法包括:所述数据库副本服务器从客户端接收对数据库数据的期望页面的请求;响应于接收到对所述期望页面的请求,检索所述期望页面的存储版本,从日志缓存中检索与所述期望页面相关联的一个或多个重做日志记录,将所述一个或多个重做日志记录应用于所述期望页面的存储版本以生成更新后的期望页面,所述数据库副本服务器向所述客户端发送所述更新后的期望页面。
19.在一些方面,本发明描述了一种处理单元。所述处理单元包括处理设备和存储器。所述存储器存储指令,当所述指令由所述处理设备执行时,使得所述处理单元执行云数据库的数据库副本服务器的功能,所述云数据库包括存储在页面中的数据。所述数据库副本服务器用于从客户端接收对数据库数据的期望页面的请求;响应于接收到对所述期望页面的请求,检索所述期望页面的存储版本,从日志缓存中检索与所述期望页面相关联的一个或多个重做日志记录,将所述一个或多个重做日志记录应用于所述期望页面的存储版本以生成更新后的期望页面,向所述客户端发送所述更新后的期望页面。
20.在一些方面,本发明描述了一种计算机可读介质,其上存储将由云数据库中的处理设备执行的指令,所述云数据库包括存储在页面中的数据。当所述指令执行时,使得所述云数据库的数据库副本服务器执行如下操作:从客户端接收对数据库数据的期望页面的请求;响应于接收到对所述期望页面的请求,检索所述期望页面的存储版本,检索与所述期望页面相关联的一个或多个重做日志记录,将所述一个或多个重做日志记录应用于所述期望页面的存储版本以生成更新后的期望页面,向所述客户端发送所述更新后的期望页面。
21.在一些示例中,所述云数据库是多主云数据库;所述数据库副本服务器是数据库主服务器。
22.在一些示例中,所述日志缓存是所述数据库副本服务器的一部分。
23.在一些示例中,所述日志缓存是所述云数据库的一部分,与所述数据库副本服务器分离。
24.在一些示例中,所述数据库副本服务器从所述数据库副本服务器的缓冲池中检索所述期望页面的存储版本。
25.在一些示例中,所述数据库副本服务器从所述云数据库的页面存储中检索所述期望页面的存储版本。
26.在一些示例中,在检索与所述期望页面相关联的所述一个或多个重做日志记录之前,所述方法还包括:将多个重做日志记录存储至所述日志缓存。所述多个重做日志记录包括与所述期望页面相关联的所述一个或多个重做日志记录中的至少一个。
27.在一些示例中,数据库主服务器将所述多个重做日志记录存储至所述日志缓存。
28.在一些示例中,所述数据库副本服务器将所述多个重做日志记录存储至所述日志缓存。
29.在一些示例中,在将所述多个重做日志记录存储至所述日志缓存之前,所述方法还包括:确定所述日志缓存的可用内存不足以存储所述多个重做日志记录,剔除存储在所述日志缓存中的一个或多个重做日志记录。在一些示例中,所述多个重做日志记录中的每个重做日志记录与页面相关联;将所述多个重做日志记录存储至所述日志缓存包括:将所述多个重做日志记录中的每个重做日志记录与所述每个重做日志记录相关联的页面对应的查找表项关联存储在所述日志缓存的查找表中;从所述日志缓存中检索所述一个或多个重做日志记录包括:检索与所述期望页面对应的查找表项关联存储的一个或多个重做日志记录。
30.在一些示例中,所述期望页面的存储版本与日志序号相关联;检索所述一个或多个重做日志记录包括:检索与比所述期望页面的存储版本的日志序号大的日志序号关联存储的一个或多个重做日志记录。
31.在一些示例中,在检索与所述期望页面相关联的所述一个或多个重做日志记录之前,所述方法还包括:确定所述日志缓存的可用内存不足以存储所述多个重做日志记录,剔除存储在所述日志缓存中的一个或多个重做日志记录,将所述多个重做日志记录存储至所述日志缓存(所述多个重做日志记录包括与所述期望页面相关联的所述一个或多个重做日志记录中的至少一个),将所述数据库副本服务器的可见日志序号更新为与所述多个重做日志记录相关联的结束日志序号。
32.在一些示例中,所述处理单元包括所述日志缓存,当所述指令由所述处理设备执行时,还使得所述处理单元执行所述日志缓存的功能。
33.在一些示例中,所述日志缓存包括多个存储的重做日志记录(所述多个存储的重做日志记录中的每个存储的重做日志记录与页面对应的查找表项关联存储在所述日志缓存的查找表中);从所述日志缓存中检索所述一个或多个重做日志记录包括:检索与所述期望页面对应的查找表项关联存储的一个或多个存储的重做日志记录。
34.在一些示例中,当所述指令由所述处理设备执行时,还使得所述处理单元执行缓冲池的功能;所述期望页面的存储版本从所述缓冲池中检索到。
35.在一些示例中,所述期望页面的存储版本与日志序号相关联;检索所述一个或多个重做日志记录包括:检索与比所述期望页面的存储版本的日志序号大的日志序号关联存储的一个或多个重做日志记录。
36.在一些示例中,所述数据库副本服务器还用于在检索与所述期望页面相关联的所述一个或多个重做日志记录之前:确定所述日志缓存的可用内存不足以存储接收到的多个重做日志记录;剔除存储在所述日志缓存中的一个或多个存储的重做日志记录;将接收到的所述多个重做日志记录存储至所述日志缓存,所述多个重做日志记录包括与所述期望页面相关联的所述一个或多个重做日志记录中的至少一个;将所述数据库副本服务器的可见日志序号更新为接收到的所述多个重做日志记录相关联的结束日志序号。
附图说明
37.以下将通过示例的方式参考示出本技术的示例实施例的附图。
38.图1是根据本文所描述的示例实施例的用于提供云计算服务的云计算架构的框图;
39.图2是根据本文所描述的示例实施例的云数据库的示例架构的简化逻辑图;
40.图3是根据本文所描述的示例实施例的处理单元的简化示例的框图;
41.图4是根据本文所描述的示例实施例的处理重做日志记录的示例方法的流程图,该方法的执行主体为云数据库中的多个软件实体;
42.图5是根据本文所描述的示例实施例的通过日志缓存将存储在数据库副本服务器的缓冲池中的数据页面与数据库主服务器最近提交的事务同步的示例的框图;
43.图6a是根据本文所描述的示例实施例的通过数据库主服务器将重做日志记录注册到日志缓存的第一示例方法的流程图;
44.图6b是根据本文所描述的示例实施例的通过与日志缓存相关联的数据库副本服务器将重做日志记录注册到日志缓存的第二示例方法的流程图;
45.图7是根据本文所描述的示例实施例的数据库副本服务器通过按需应用重做日志记录来同步数据的示例方法的流程图。
46.不同的附图中可以使用类似的附图编号来表示类似的组件。
具体实施方式
47.本发明描述了在云计算背景下使用双活架构的示例。尽管示出并讨论了某些系统图和流程图,但这些仅为示例,并不旨在限制。
48.示例云计算架构
49.图1是可提供云计算服务的云计算架构的逻辑示意框图。云计算架构100(以下称为云100)的逻辑图通常包括基础设施平台102(例如,基础设施即服务(infrastructure as aservice,iaas)层)、应用平台104(例如,平台即服务(platform as a service,paas)层)和应用106(例如,软件即服务(software as a service,saas)层)。基础设施平台102包括物理硬件资源108和将物理硬件资源108的抽象呈现给应用平台104的虚拟化层110。虚拟化层110所呈现的抽象取决于应用平台104上托管的应用112的要求。物理硬件资源108包括物理机或服务器114和物理存储服务器116。物理机或服务器114包括物理处理资源114(例如,中央处理器(central processing unit,cpu)、图形处理器(graphic processing unit,gpu)、加速器和张量处理单元(tensor processing unit,tpu))。物理存储服务器116包括存储资源,如存储器(例如,静态随机存取存储器(static random access memory,sram)、动态随机存取存储器(dynamic random access memory,dram)、同步dram(synchronous dram,sdram)、只读存储器(read-only memory,rom)、永久性存储设备(例如,硬盘驱动器、光驱或其组合)以及通常驻留在数据中心内的网络资源(未示出)。如本领域所理解的,数据中心包括物理硬件资源108(通常以服务器的形式)的集合,这些物理硬件资源108可用作包括处理、存储和网络资源的集体计算资源。在数据中心内,多个服务器可以连接在一起提供计算资源池,虚拟化实体可以在该计算资源池上实例化。数据中心可以彼此互连以形成计算资源池,计算资源池中的计算资源通过连接资源相互连接。连接资源可以采取物理连接的形式,如以太网或光通信链路。
50.虚拟化层110通过提供iaas设施,为应用112提供灵活高效的多租户运行时和托管
环境。虚拟化层110包括虚拟化管理器或虚拟机监视器(未示出),其可以为应用平台104托管的每个应用112提供安全和资源“沙箱”。每个“沙箱”可以实现为虚拟机(virtual machine,vm)118,其可以包括适当的操作系统和对虚拟化存储资源120的受控访问。
51.虚拟化层110对物理硬件资源108的虚拟化被认为是云100的基础技术。虚拟化是一种允许创建虚拟计算资源池的技术,计算资源池中的计算资源(例如处理、存储和网络资源)通过连接资源相互连接。虚拟化可以采取实例化vm 118的形式,对于网络上的另一个实体和vm 118上执行的软件,vm 118无异于物理计算设备。vm 118具有自己的一套计算资源(例如,处理、存储和连接资源),可以在其上执行操作系统。vm 118可以具有虚拟网络接口,该虚拟网络接口可以被分配网络地址。在底层资源和vm 118之间,通常有虚拟机监视器(未示出)来管理资源隔离和网络交互。vm 118的作用之一是提供与在云100上运行的其他进程的隔离。最初开发时,vm 118的机制允许不同进程运行,而不用担心单个错误进程会导致整个系统崩溃。相反,错误进程会被包含在自己的vm 118中。这种隔离允许每个vm 118具有自己的一套网络接口。通常,单个底层计算资源可以支持多个虚拟化实体。
52.本领域技术人员将理解,最近的发展是使用容器来代替vm 118。如上所述,每个vm 118通常包括其自己的操作系统,这通常增加冗余计算、存储和连接资源的使用。容器允许单个操作系统(operating system,os)内核支持多个孤立的应用。单个os代替允许每个vm 118运行自己的操作系统的虚拟机监视器托管容器,这些容器负责执行vm 118提供的资源隔离。
53.应用平台104提供了托管应用112的能力,包括应用平台服务122。应用平台服务122向应用平台104上托管的应用112提供一套中间件应用服务和基础设施服务。应用平台104上托管的应用112可以在vm或物理机上运行。如图1所示,应用平台服务122包括用于内存数据存储的缓存服务124、用于应用的数据库服务126、用于向订阅客户发布消息的消息服务128以及使客户能够创建、发布和维护应用程序接口(application programming interface,api)以访问其他云服务的api网关服务130。本领域技术人员将理解,应用平台服务112可以向客户提供其他中间件应用服务,例如通知服务、运行时服务等。客户的应用112可以在相应的vm 118或物理机114内部署和执行。
54.数据库服务126可以通过云(或云原生)数据库架构来实现,下文将进一步讨论。下面介绍在本发明中使用的一些术语。
55.在本发明中,数据库指有组织的数据集合,通常通过计算机系统以电子方式存储和访问。
56.数据库管理系统(database management system,dbms)是“软件系统”,其使用户(例如数据库管理员)能够定义、创建和维护数据库及控制对数据库的访问。dbms是与终端用户(例如,客户端用户)、应用112和数据库交互以捕获和分析数据的“软件”。缩略词dbms有时会扩展为表示底层数据库模型,如rdbms表示关系数据库模型,oodbms或ordbms表示(面向)对象数据库模型,ordbms表示对象关系数据库模型。其他扩展可以表示一些其他特征,如ddbms表示分布式数据库管理系统。dbms提供的核心功能是数据存储、检索和更新。成熟的通用dbms通常提供以下功能:
57.·
数据存储、检索和更新
58.·
用户可访问的描述元数据的目录或数据字典
59.·
支持事务和并发
60.·
数据库损坏时恢复数据库的设施
61.·
支持数据访问和更新的授权
62.·
支持远程访问
63.·
强制约束以确保数据库中的数据遵守某些规则
64.数据库引擎(或存储引擎)是dbms用于从数据库中创建、读取、更新和删除(create,read,update and delete,crud)数据的底层软件组件。与数据库的外部交互可以通过与dbms连接的应用来实现。
65.数据库事务(也简称为事务)是dbms中执行的工作单元。
66.数据库页面(或简称为页面)是组织数据库文件中数据的内部基本结构。数据库页面是存储单元,其大小可以在系统范围、数据库范围或特定于集团的基础上进行配置。页面可以通过标识符来标识,例如页面标识符和空间标识符。
67.重做日志是记录对数据库所做的所有更改的历史的文件。重做日志(或更一般地,数据库日志)可以存储为文件。每个重做日志包含一个或多个重做日志记录(或更一般地,数据库日志记录)。重做日志记录,也称为重做条目或日志条目,保存一组更改向量,每个更改向量描述或表示对数据库中单个块或页面所做的更改。术语“重做日志”可以源于特定的dbms模型,但重做日志也可以通常以通用方式使用,以指代数据库日志。mysql
tm
是使用术语“重做日志”的示例数据库模型;mysql
tm
是可用于实现本文所描述的示例的示例数据库模型。应当理解,本发明可以同样适用于其他数据库模型。数据库模型是一种数据模型,它确定数据库的逻辑结构,并确定数据可以以何种方式存储、组织和操作。数据库模型的一个示例是关系模型,它使用基于表的格式来存储、组织和操作数据。
68.重做日志记录可以包括更多信息,例如标识重做日志记录适用的页面的页面标识。在一些实施例中,页面标识可以包括页面标识符(identifier,id)和空间id。重做日志记录还可以包括序号,例如日志序号(log sequence number,lsn),指示重做日志记录在重做日志中的位置。通常,lsn按照重做日志记录在gfb中输入的顺序分配给重做日志记录。gfb中的重做日志记录通常以递增的lsn排序。可以解析或处理日志记录以确定哪些日志记录将应用于哪个页面(例如,基于页面id)。在一些实施例中,可以解析日志记录,直到到达预定义边界(例如,如下所述的gfb边界)的末端。
69.云原生数据库(本文中称为云数据库)是一种可以通过云构建、部署和交付的数据库服务。作为paas,云数据库提供允许组织、终端用户及其各自的应用存储、管理和检索云中的数据的数据库。
70.示例云数据库架构
71.图2是云数据库200的架构的简化逻辑框图,其中计算层210和存储层230分离。图2中的云数据库200引入了分离计算层210和存储层230的附加层(即存储抽象层(storage abstraction layer,sal)220)。sal 220提供了抽象层,可以在抽象层中池化iaas层102提供的物理资源(例如,物理存储资源和物理处理资源),以服务于计算层210和存储层230。通过分离计算层210和存储层230和抽象物理资源(以及池化物理资源)可以实现更好的可扩展性和负载平衡。例如,计算层包括服务器(例如,主服务器和副本服务器)集群,存储层包括存储服务器集群。
72.计算层210包括数据库主服务器212(也简称为主服务器212)和一个或多个数据库副本服务器214(也简称为副本214)。数据库主服务器212和数据库副本服务器214可以统称为数据库服务器212和214。在一些示例中,数据库服务器212和214也可以称为云数据库200中的节点。例如,可以存在单个数据库主服务器212和一个或多个数据库副本服务器214。通常,数据库主服务器212处理对数据库的所有修改(包括插入、更新或删除数据库记录的请求),而数据库副本服务器214只处理读取请求(即选择数据库记录的请求)。数据库事务由计算层210中的数据库服务器212和214处理,包括插入、更新、删除、选择(即读取请求)等多个语句。需要说明的是,数据库服务器212和214可以不是物理硬件服务器,而是在云的物理处理资源上(即iaas层102中)运行的软件。数据库服务器212或214可以是在云的iaas层102提供的虚拟机118或容器上运行的软件(也称为数据库服务器212或214的实例)。通常,由于任何实例都是在物理机上实现的,数据库服务器212和214的实例可以被认为具有物理性。为了简单起见,数据库服务器212和214的实例在本发明中简称为数据库服务器212和214。
73.每个数据库服务器212或214通过各自的主存储抽象层(storage abstraction layer,sal)模块222或副本sal模块223与sal 220通信。参照图1,sal 220可以认为是跨越了数据库服务126和虚拟化存储资源120,提供了抽象层来池化物理资源,以服务于数据库服务126和虚拟化存储资源120。需要说明的是,sal 220不是传统数据库服务(例如,传统云服务提供商提供的数据库服务)的典型层。本文描述的云数据库200包括sal 220,可以使用sal 220来实现优于传统数据库服务的功能(如下文进一步讨论)。每个sal模块222或223可以是在sal 220中实现的软件实例。为了简单起见,sal模块222或223的实例在本文中可以简称为sal模块222或223。sal模块222或223提供逻辑sal 220的功能。在一些示例中,sal模块222或223的一个或多个功能可以在存储层230中实现。sal 220用于将面向客户端的前端(由计算层210提供)与组织和管理数据库的方式隔离。
74.数据(包括数据库的重做日志和页面,如下所述)存储在存储层230中。在本示例中,存储层230可通过网络访问,例如远程直接内存访问(remote direct memory access,rdma)网络。例如,存储层230可以是iaas 102中的虚拟化层120提供的分布式存储系统,其提供较快、可靠和可扩展的存储。存储层230包括存储包含数据的页面的一个或多个页面存储232以及存储一个或多个重做日志的一个或多个日志存储234。页面存储232服务于从数据库服务器212或214接收的读取请求(即从一个或多个页面读取数据的请求)。页面存储232可以重新创建数据库服务器212或214可能请求的页面的任何版本。在云数据库200中,页面存储232由存储资源集群(未示出)运行。每个页面存储232接收已经为该页面存储232负责的页面产生的所有重做日志记录,并将重做日志记录合并(或如果适用,通过冲突消解应用)到数据库页面。
75.虽然以上是在单个数据库的背景下描述的,但应当理解,在一些示例中,可以使用云数据库200来管理两个或更多个数据库(例如,逻辑分离各个数据库)。每个数据库划分为固定大小的小页面子集,这些子集可以称为切片。每个页面存储232管理相应的多个切片。单个页面存储232管理的切片可以包括不同数据库的页面的切片。页面存储服务器只接收属于该页面存储服务器管理的切片的页面的重做日志记录。通常,数据库可以具有多个切片,每个切片可以复制到多个页面存储232,以保证持久性和可用性(例如,如果某个页面存储232不可用,切片复制到的另一个页面存储232可用于继续服务于访问(即读取)或修改
only memory,rom)。一个或多个非瞬时性存储器314可以存储由一个或多个处理设备302执行的指令,例如,以执行本发明中描述的示例。例如,处理单元300用于实现sal模块222或223时,一个或多个存储器314可以存储用于执行sal模块222或223的功能和管理重做日志记录的指令,如下文进一步讨论。
84.一个或多个存储器314可以包括其它软件指令,例如用于实现操作系统和其它应用/功能的软件指令。在一些示例中,处理单元300可以附加或替代地执行来自外部存储器(例如,与处理单元300有线或无线通信的外部驱动器)的指令,或者可以由瞬时性或非瞬时性计算机可读介质提供可执行指令。非瞬时性计算机可读介质的示例包括ram、rom、可擦除可编程rom(erasable programmable rom,eprom)、电可擦除可编程rom(electrically erasable programmable rom,eeprom)、闪存、cd-rom或其它便携式存储器。
85.处理单元300还可以包括总线316,其提供处理单元300的组件之间的通信,包括上述组件。总线316可以是任何合适的总线架构,例如包括存储器总线、外围总线或视频总线。
86.继续参照图2。每当云服务提供商创建或扩展数据库时,主sal模块222选择与该数据库相关联的页面存储232(或者如果数据库是新创建的,选择任何合适的页面存储232),并在所选择的页面存储232上创建切片。数据库主服务器212在组刷新缓冲区(group flush buffer,gfb)中维护重做日志记录。任何记录云数据库客户端提交到计算层210的数据库事务的重做日志记录都可以存储在gfb中。存储在gfb中的重做日志记录可以刷新到主sal模块222,以在日志存储234中更新。从缓冲区传输重做日志记录并清除缓冲区的过程可以称为“刷新”缓冲区。主sal模块222将日志记录添加到当前活动的日志存储234中,以帮助确保重做日志记录的持久性。主sal模块222将所有传输的重做日志记录成功添加到所有日志存储234之后,重做日志记录的成功存储可以由主sal模块222确认到数据库主服务器212。在一些实施例中,可以在主sal模块222将重做日志记录添加到日志存储234之前,主sal模块222正在将重做日志记录添加到日志存储234的过程中,或者主sal模块222将重做日志记录成功添加到日志存储234之后,解析重做日志记录,然后分发到主sal模块222中的切片日志缓冲区(slice log buffer,slb)。每个slb对应一个或多个切片的集合(例如,slb可以对应单个日志存储234存储的切片),只保存与存储在其相应切片集合中的页面有关的日志记录(或部分日志记录)。每个slb可以在其满时和/或以预定义的时间间隔(例如,超时计数器到期时)进行刷新。
87.处理重做日志记录的示例方法
88.图4示出了处理重做日志记录的示例方法400,该方法的执行主体为云数据库200中的多个软件实体(例如,数据库主服务器212、主sal模块222和页面存储232的实例,如下所述)。应当理解,方法400提供了简化的概述,仅是示例。
89.步骤402:数据库主服务器212生成重做日志记录并将其添加(即写入)到gfb中。数据库主服务器212(通过主sal模块222)将存储在gfb中的重做日志记录刷新(或传输)到sal 220。例如,可以在达到一定的缓冲区大小(例如,gfb已满)时和/或以一定时间间隔刷新gfb。gfb包含来自数据库主服务器212的一组提交的重做日志记录(即记录云数据库200的客户端已提交的数据库事务的重做日志记录)。
90.步骤404:主sal模块222从gfb接收重做日志记录,解析重做日志记录,并将重做日志记录复制到合适切片对应的slb。例如,主sal模块222解析重做日志记录,以识别哪个数
据库页面受到给定重做日志记录的影响,从而确定哪个切片是给定重做日志记录应当应用到的合适切片。然后,主sal模块222将给定重做日志记录复制到合适切片对应的slb。
91.步骤406:页面存储232从合适的slb接收重做日志记录,解析重做日志记录,并使用重做日志记录更新相应数据库页面中存储的数据。例如,给定页面的页面存储解析应用于该给定页面的重做日志记录。将应用于给定页面的重做日志记录指示的所有数据更新进行应用,使得给定页面正确反映重做日志记录指示的修改。
92.重做日志记录可以是以多个迷你事务(mini-transaction,mtr)的形式。mtr是一个数据库术语,可用于描述不应分离的最小、不可分割的重做日志记录组,以保持数据库的一致性。数据库一致性指复制数据(包括副本页面存储232中的复制数据和副本日志存储234中的复制重做日志记录)正确反映计算层210中已提交的数据库事务。术语mtr可能常用于mysql
tm
的语境中;然而,在本发明中,术语mtr通常用于指重做日志记录的最小、不可分割的原子单位,而不限于任何特定的数据库实现。在本发明中,“原子单位”用于指为了正确反映存储在数据库中的数据(例如,为了副本页面存储232和副本日志存储234正确复制数据库主服务器212的数据库操作)而应当应用在一起的一组重做日志记录组。mtr是“原子单位”的一个示例。因此,例如,b+树包括根页面节点及其叶页面节点。当要执行树拆分或合并时,b+树数据结构可能需要同时更新几个b+树页面节点。所有这些页面更新包括在多个重做日志记录中,由于重做日志记录需要以原子方式应用(即作为一个不可分割的组),这些记录应分到一个mtr中。单个mtr内的重做日志记录组可以通过mtr边界来定义。因此,mtr边界可以是定义哪些日志记录应一起处理的隐式信息。数据库引擎可以实现算法来确定mtr的开始和结束。例如,mysql
tm innodb
tm
引擎生成mtr结束重做记录,以标识mtr边界;mtr结束重做记录指示下一条记录是新mtr的第一条记录。主sal模块222在解析重做日志记录时可以通过mt边界的这种隐式或显式指示符来确定mtr的开始和结束。
93.在传统的数据库服务中,gfb中的重做日志记录可以直接刷新到存储中。然而,在云数据库(即云原生数据库)200中,重做日志记录可以基于它们的切片分区发送到不同的页面存储232。一个数据库通常有几十个甚至几百个切片。每个切片都有对应的slb。给定切片的slb的内容(例如,重做日志记录)刷新到该切片对应的页面存储232。例如,可以在达到一定的缓冲区大小(例如,slb已满)时和/或以一定时间间隔刷新slb。
94.数据库服务器(主服务器212和副本214)通常需要访问mtr边界内的页面版本,以帮助确保页面处理过程中的数据库一致性。一个gfb中可以包含多个mtr,单个gfb中的重做日志记录可以由gfb边界定义。因此,访问gfb边界内的重做日志记录应确保遵守每个mtr边界。数据库主服务器212始终访问(即读取)页面的最新版本,最新版本在gfb边界内。数据库副本服务器214滞后于数据库主服务器212。当至少基于mtr边界完成对数据库页面的更新时,可以使得数据库副本服务器214可访问的页面版本是可访问的。也就是说,只有在处理完同一mtr边界内的所有重做日志记录后,数据库副本服务器214才可访问(即读取)更新后的页面版本(即已更新的页面的版本)。以这种方式遵守mtr边界有助于确保数据库一致性。然而,记录处理边界可以更大,例如单个gfb甚至一组gfb的gfb边界。
95.示例数据库副本同步方法
96.如上所述,存储在数据库副本服务器214的缓冲池中的页面的状态滞后于数据库主服务器212提交的最新事务。当至少基于mtr边界完成对数据库页面的更新时,可以使得
数据库副本服务器214可访问的页面版本是可访问的(即对读取请求可见)。在现有的重做日志记录应用方法中,如上文“背景技术”中所述,只有在处理完同一mtr边界内的所有重做日志记录后,数据库副本服务器214才可访问(即读取)更新后的页面版本(即已更新的页面的版本)。在某些情况下,如上所述,这可能导致数据库副本服务器214处的数据可见性滞后增长和/或查询吞吐量降低。
97.为了解决这些限制,本文所描述的示例性实施例可以仅在数据库副本服务器214的客户端请求存储在数据库副本服务器214的缓冲池中的页面时,才向该页面提供重做日志记录的按需应用。因此,数据库副本服务器214存储的特定页面可以与数据库主服务器212提交的最新事务同步,同时从正在进行的同步过程的关键路径中移除重做日志记录应用的步骤(例如,如上文“背景技术”中所述的顺序或主动并行重做日志记录应用),从而有可能避免数据可见性滞后随着时间的推移而增长的问题。不要求接收到重做日志记录时更新所有本地页面,而是描述了仅更新所请求页面的实施例。
98.在一些实施例中,数据库副本服务器214中的日志缓存可用于减少云存储(例如日志存储234和/或页面存储232)的输入/输出压力。在一些实施例中,日志缓存可用于跟踪来自数据库主服务器212的最新页面更新(例如,当前lsn),并提供查找接口以允许数据库副本服务器214获得适用于特定页键(例如,适用于所请求页面)和版本范围的重做日志记录。
99.与上文“背景技术”中描述的主动并行重做日志记录应用方法一样,本文所描述的各种实施例可能要求将页面的多个版本存储在数据库副本服务器214的缓冲池中。与现有方法一样,缓冲池中的每个页面可以指定为只读,这意味着页面一旦创建,就不会再修改。这可能会启用无锁读取访问页面,以响应读取请求。
100.图5是通过日志缓存1240将存储在数据库副本服务器214的副本缓冲池1214中的数据页面与数据库主服务器212最近提交的事务同步的示例的框图。
101.数据库主服务器212包括用于存储最新数据库页面的主缓冲池1212。主缓冲池1212中的数据库页面示为包含四个数据库页面的b+树结构:lsn=200对应的页面a 1222、lsn=120对应的页面b 1224、lsn=200对应的页面c 1226和lsn=200对应的页面d 1228。页面d新添加到b+树中。页面a、页面c和页面d需以原子方式更新,以保证一致性。因此,页面a从lsn 100向上移动到lsn 200,页面c从lsn 120向上移动到lsn 200,页面d添加到lsn 200。数据库主服务器212在单个mtr中生成页面a、页面c和页面d对应的重做日志记录。
102.数据库副本服务器214包括用于存储数据页面的本地版本的副本缓冲池1214。副本缓冲池1214中的本地存储页面示为包含三个页面的b+树结构:lsn=100对应的页面a 1232的本地版本、lsn=120对应的页面b 1234的本地版本和lsn=150对应的页面c 1236的本地版本。应当理解,页面a 1232和页面c 1236的本地存储版本相对于数据库主服务器214中lsn=200对应的页面a 1222和页面c 1226的最新版本已经过时。
103.日志缓存1240用于存储从主缓冲池1212刷新后的重做日志记录。在一些实施例中,日志缓存1240是数据库副本服务器214的一部分。在其他实施例中,它可以在云数据库200的其他地方实现,例如在副本sal 223内或作为单独的节点。日志缓存1240实现为与运行在单独物理设备上的数据库副本服务器214分离的逻辑进程,可以称为与数据库副本服务器214“分离”。日志缓存1240用于存储重做日志记录,重做日志记录例如经由图2中的箭头202直接从数据库主服务器212接收,或者例如经由图2中的箭头208从日志存储234接收。
在数据库主服务器212将页面a 1222、页面c 1226和页面d 1228(全部在lsn 200处)的最新版本对应的重做日志记录写入日志存储234(即图2中的箭头205)之后,在数据库副本服务器214上移其读视图并使修改对客户端的读取请求可见之前(即数据库副本服务器的可见lsn增加到200),数据库主服务器212或数据库副本服务器214将lsn=200处的页面a 1222、页面c 1226和页面d 1228对应的重做日志记录写入(即注册到)日志缓存1240。下面结合图6a和图6b更详细地描述将重做日志记录注册到日志缓存1240的示例方法。
104.日志缓存1240根据要通过重做日志记录更新的页面组织接收到的重做日志记录的内容。在一些实施例中,查找表1242,例如以页面标识符为密钥的哈希表,用于按预定页面组织重做日志记录。因此,查找表1242可以包含页面a查找表项1244、页面b查找表项1246、页面c查找表项1248和页面d查找表项1250,以及来自数据库主服务器212的重做日志记录中出现的其他页面的查找表项。日志缓存1240提供一个接口,其使数据库副本服务器214能够检索开始页面版本(例如,开始lsn)和结束页面版本(例如,结束lsn)之间的单个页面的重做日志记录列表。每个查找表项1244、1246、1248和1250具有一个或多个关联的重做日志记录,每个记录都与页面版本(例如,lsn)相关联。因此,页面a查找表项1244具有在lsn=200 1252处的第一重做日志记录和在lsn=100 1254处的第二重做日志记录,页面b查找表项1246具有在lsn=120 1256处的单个重做日志记录,页面c查找表项1248具有在lsn=200 1258处的第一重做日志记录和在lsn=150 1260处的第二重做日志记录,页面d查找表项1250具有在lsn=200 1262处的单个重做日志记录。因此,例如,查找表1242中的表项的键可以是页面标识符,但该表项对应的值可以是链接到与页面相关联的最近重做日志记录的链表。
105.日志缓存1240提供了供数据库副本服务器214使用的高效查找接口。对于给定页面标识符(例如“页面a”,或页面a对应的页面id)和页面版本范围(例如,开始lsn和结束lsn),日志缓存1240可返回相应查找表1242的表项中在该页面版本范围内的所有重做日志记录内容。例如,如果所示的日志缓存1240从数据库副本服务器214接收到lsn=130和lsn=230之间的页面a的所有版本的查找请求,则返回页面a查找表项1244在lsn=200处的第一重做日志记录1252。
106.在一些实施例中,数据库副本服务器214可通过日志缓存1240将重做日志记录(例如,重做日志记录1252和1258)按需应用到副本缓冲池1214中的本地存储页面(例如,页面a1232和页面c 1236)。下面结合图7更详细地描述按需应用重做日志记录的过程。
107.在一些实施例中,当日志缓存1240的可用内存不足时,可通过清理或剔除日志来刷新或清理日志缓存1240,以剔除历史重做日志记录版本。在一些实施例中,当没有可用内存来注册新的重做日志记录时,可通过清理来主动剔除重做日志记录(例如,最早的未应用的重做日志记录)。应当理解,可以在各个实施例中通过其他反应性和/或主动性方法来弃用、覆盖或刷新日志缓存1240的内容。
108.日志缓存1240可以在逻辑上独立于图2中所示的各个组件。日志缓存1240可以在与数据库副本服务器214的功能相同的逻辑进程内运行,作为数据库副本服务器214上的单独进程,或者甚至在图2或图1中的不同节点上运行,只要数据库副本服务器214配置为与日志缓存1240通信。在具有多个数据库副本服务器214的云数据库200中,每个数据库副本服务器214可以具有自己的日志缓存1240,或者单个日志缓存1240可以由多个数据库副本服
务器214共享。在多主数据库配置中,单个日志缓存1240还可以由多个数据库主服务器212共享,以支持这些数据库主服务器212在充当数据库副本服务器214时的数据页面同步功能。
109.在一些实施例中,日志缓存1240完全存储在内存中。在其他实施例中,日志缓存1240可以部分存储在内存中,部分存储在快速可访问外部存储中;或者完全存储在具有基于内存缓存的快速可访问外部存储中。
110.将重做日志记录注册到日志缓存的示例方法
111.当数据库主服务器212提交新事务时,相应的重做日志记录从主缓冲池1212刷新,且需注册到日志缓存1240。可以在数据库主服务器212将新重做日志记录写入云存储(例如,日志存储234和页面存储232)之后,在数据库副本服务器214使相应的修改对事务(即从客户端接收的读取请求)可见之前将新重做日志记录注册到日志缓存1240。在一些实施例中,数据库主服务器212可以在将重做日志记录写入云存储的同时将重做日志记录注册到日志缓存1240。然而,如果提交失败,使得修改没有写入云存储,则需通过回滚机制从日志缓存1240中删除未提交的重做日志记录。
112.下面介绍两种将重做日志记录注册到日志缓存1240的替代示例方法。图6a所示的第一示例方法通过数据库主服务器212将重做日志记录注册到日志缓存1240。图6b所示的第二示例方法通过与日志缓存1240相关联的数据库副本服务器214将重做日志记录注册到日志缓存1240。
113.图6a是通过数据库主服务器212将重做日志记录注册到日志缓存1240的第一示例方法1300的流程图。应当理解,在一些实施例中,涉及与数据库主服务器212通信的步骤可以由主sal 222执行;在一些实施例中,涉及与数据库副本服务器214通信的步骤可以由副本sal 223执行。
114.步骤1302:数据库主服务器212处理正在刷新的gfb以提取元数据。元数据可以包括更新后的事务列表,该列表包括直到gfb的结束lsn的顺序事务。更新后的事务列表可以包括在gfb窗口期间提交或回滚(即直到gfb的结束lsn)的事务。对于通过gfb的重做日志记录修改的每个页面,元数据还可以包括页面标识符(例如页面id)、上一页面lsn和新页面lsn。
115.步骤1304:数据库主服务器212将从gfb刷新的重做日志记录注册到(即存储至)日志缓存1240,并等待日志缓存1240的确认。在一些实施例中,该步骤可以与步骤1302并行执行。
116.步骤1306:数据库主服务器212响应于从日志缓存1240接收到确认,将元数据发送到数据库副本服务器214(例如,经由图2中的箭头202)。
117.步骤1308:数据库副本服务器214使副本缓冲池1214中标识为在元数据中更新的页面(例如,页面id出现在元数据中的页面)无效。
118.步骤1310:数据库副本服务器214将步骤1306中失效的每个页面的页面过期lsn设置为元数据中标识的相应页面的新页面lsn。在一些实施例中,步骤1308和1310是单个步骤,且通过将页面过期lsn设置为新页面lsn来使页面无效。通过将副本缓冲池1214中的页面的过期lsn从该页面的起始值(例如,max值,该值指示页面是最新的,过期lsn等于数据库副本服务器214接收的最后一组重做日志记录)更新为新页面lsn(例如,当前重做日志记录
集的gfb的结束lsn)来使该页面无效。若副本缓冲池1214中的页面的过期lsn小于max,则该页面不再是最新版本;存在较新版本的页面,用于更新该页面的重做日志记录的lsn等于该页面的过期lsn。
119.步骤1312:数据库副本服务器214更新其本地存储的事务列表以包括元数据中的更新后的事务列表。
120.步骤1314:数据库副本服务器214将其可见lsn增加到元数据中包括的gfb的结束lsn。可见lsn的新值允许数据库副本服务器214接收的读取请求访问通过接收的元数据更新的页面的新版本。
121.在一些实施例中,几个连续的gfb可以一起处理,以优化数据库副本服务器214对元数据的处理。如果两个gfb是连续的,则第一个gfb的最后一个重做日志记录和第二个gfb的第一个重做日志记录在全局重做日志记录序列中必须是连续的,这意味着这两个重做日志记录之间没有其他重做日志记录。在一些实施例中,这可通过全局lsn索引表示,使得如果第一个gfb的最后一个重做日志记录的lsn紧接在第二个gfb的第一个重做日志记录的lsn之前,则认为这两个gfb是连续的。
122.图6b是通过与日志缓存1240相关联的数据库副本服务器214将重做日志记录注册到(即存储至)日志缓存1240的第二示例方法1350的流程图。如在方法1300中,应当理解,在一些实施例中,涉及与数据库主服务器212通信的步骤可以由主sal 222执行;在一些实施例中,涉及与数据库副本服务器214通信的步骤可以由副本sal 223执行。
123.步骤1352:数据库主服务器212将gfb中的重做日志记录刷新到云存储,例如,页面存储232和日志存储234。
124.步骤1354:数据库主服务器212向数据库副本服务器214发送同步指令。同步指令可以包括刷新的重做日志记录在云存储中的位置,以及刷新的gfb内容的结束lsn。在替代方案中,在一些实施例中,同步方法可以包括刷新的gfb内容(即从gfb刷新的重做日志记录)。
125.步骤1356:数据库副本服务器214接收同步指令。
126.步骤1358:在同步指令不包括刷新的gfb内容的实施例中,数据库副本服务器214从云存储读取刷新的gfb内容。在同步指令包括刷新的gfb内容的实施例中,可以省略此步骤。
127.步骤1360:数据库副本服务器214处理gfb内容以从中提取元数据,如方法1300的步骤1302。元数据可以包括更新后的事务列表,该列表包括直到gfb的结束lsn的顺序事务。对于通过重做日志记录更新的每个页面,元数据还可以包括更新后的页面标识符(例如页面id)、上一页面lsn和新页面lsn。
128.步骤1362:数据库副本服务器214使副本缓冲池1214中标识为在元数据中更新的页面(例如,页面id出现在更新后的事务列表中的页面)无效。在一些实施例中,步骤1362可以与方法1300的步骤1308相同或等效。
129.步骤1364:数据库副本服务器214将步骤1306中失效的每个页面的页面过期lsn设置为元数据中相应事务列表项的新页面lsn。在一些实施例中,步骤1364可以与方法1300的步骤1310相同或等效。与方法1300的步骤1308和1310一样,在一些实施例中,步骤1362和1364可以是单个步骤,且可通过更新页面过期lsn来使页面无效。
130.步骤1366:数据库副本服务器214更新其本地存储的事务列表以包括元数据中的更新后的事务列表。在一些实施例中,步骤1362可以与方法1300的步骤1312相同或等效。
131.步骤1368:数据库副本服务器214将从gfb刷新的重做日志记录注册到(即存储至)日志缓存1240,并等待日志缓存1240的确认。在一些实施例中,该步骤可以与步骤1360至步骤1366并行执行。
132.步骤1370:数据库副本服务器214将其可见lsn增加到元数据中包括的gfb的结束lsn。可见lsn的新值允许数据库副本服务器214接收的读取请求访问通过接收的元数据更新的页面的新版本。在一些实施例中,步骤1362可以与方法1300的步骤1314相同或等效。
133.在一些实施例中,如在方法1300中,几个连续的gfb可以一起处理,以优化数据库副本服务器214对元数据的处理。
134.按需应用重做日志记录的示例方法
135.在一些实施例中,数据库副本服务器214响应于接收到读取请求,对本地存储(例如,缓冲池中)的页面按需应用重做日志记录。当从客户端接收到特定页面的读取请求时,数据库副本服务器214检索存储在副本缓冲池1214中的该页面的副本,在日志缓存1240的查找表1242中查找该页面,并应用与该页面的查找表项相关联的任何重做日志记录,这些重做日志记录将该页面的最后版本带入副本缓冲池1214。如果所请求的页面不存在于副本缓冲池1214中,数据库副本服务器214可以检索页面存储232中存储的该页面的最后版本。读取请求中所请求的页面可以称为“期望页面”。在一些实施例中,读取请求可以指定期望页面的版本(例如lsn);该页面的指定版本可以称为“期望版本”。
136.在一些实施例中,副本缓冲池1214可以存储页面的多个版本。例如,结合图5,由于存储在日志缓存1240的查找表1242中的页面a重做日志记录1252和1254应用于存储在副本缓冲池1214中的页面a的现有版本,可以生成页面a的多个版本并将其存储在副本缓冲池1214中。例如,图5中所示的页面a 1232的版本对应于lsn=100,或者更精确地,对应于lsn范围[100,200)(即从lsn 100(包含)到lsn 200(不包含))。一旦日志缓存1240中的第一页面a重做日志记录1252应用于页面a 1232的现有版本,则可以生成lsn范围[200,max)对应的页面a的第二版本(未示出)。对于每个页面版本,lsn范围示为左闭右开区间[开始lsn,过期lsn)。
[0137]
在描述的数据库副本服务器214的数据同步方法的实施例中,数据库副本服务器仅在客户端请求页面时才生成页面的更新版本。如果数据库副本服务器214正在处理的事务(即来自客户端的读取请求)不需要访问给定页面的更新版本,则不需要生成给定页面的更新版本。按需生成页面的更新版本可以减少不必要的缓冲池使用(即内存使用和/或内存输入和输出),还可以减少数据库副本服务器214的处理器资源(例如,cpu周期)使用。当数据库副本服务器214正在处理的一组事务(即读取请求)需要访问各个页面的更新版本时,多个事务线程可以并发生成每个期望页面的更新版本,而不约束重做日志记录应用的预定义线程数。不约束重做日志并发应用的线程数可将总体重做日志应用开销分散到各个事务。由于通过应用重做日志记录生成单个页面的更新版本仅需少量时间(例如,在一些实施例中,最多几十微秒),可归因于每个事务的额外开销可以忽略不计,因此事务响应时间不受影响。此外,由于重做日志记录的应用不是推进数据库副本服务器214的可见lsn的关键路径的一部分,因此数据可见性滞后减少。此外,通过日志缓存1240,由于页面存储232可不
需要应用当前接收的所有重做日志记录来生成页面的旧版本,当检索页面的旧版本时,可以减少云存储上的负载。出于同样的原因,也可以通过减少检索页面的旧版本的延迟来提高查询吞吐量。因此,与现有的数据库副本服务器的数据同步方法相比,本文所描述的示例实施例可以提供一致的高查询吞吐量和/或更小的数据可见性滞后。
[0138]
图7是数据库副本服务器通过按需应用重做日志记录来同步数据的示例方法1400的流程图。
[0139]
步骤1402:数据库副本服务器214从客户端接收读取请求。读取请求包括与期望页面相关联的标识符(例如,页面id),在此记为《page id》。在一些实施例中,读取请求包括期望页面(例如,日志序号)的版本标识符(例如,lsn),在此记为v(target),其标识所请求的期望页面的版本。
[0140]
步骤1404:数据库副本服务器214确定副本缓冲池1214中是否存在期望页面《page id》的请求版本v(target)。如果副本缓冲池1214中存在期望页面《page id》的版本v(target),则执行方法1400的步骤1424,否则执行方法1400的步骤1406。
[0141]
步骤1406:数据库副本服务器214确定副本缓冲池1214中是否存在期望页面《page id》的旧版本。若是,则执行方法1400的步骤1408,否则执行方法1400的步骤1416。
[0142]
步骤1408:数据库副本服务器214检索副本缓冲池1214中存在的期望页面《page id》的最新版本(例如,lsn)v(base),其中,v(base)低于v(target)。
[0143]
步骤1410:数据库副本服务器214从日志缓存中检索与期望页面《page id》相关联的一个或多个重做日志记录。在一些实施例中,日志缓存可以提供日志缓存软件接口,该接口接收页面标识符、开始版本标识符和结束版本标识符,并返回与由具有开始版本标识符和结束版本标识符之间版本标识符的页面标识符所标识的页面相关联的所有重做日志记录。因此,例如,数据库副本服务器214可以将参数(《page id》,v(base),v(target))传到日志缓存软件接口。作为响应,日志缓存软件接口可在查找表项中返回查找表1242中存储的所有重做日志记录,其中该查找表项的键《page id》的lsn值介于v(base)和v(target)之间。
[0144]
步骤1412:数据库副本服务器214确定日志缓存是否包括指定版本范围内的全部重做日志记录。在一些实施例中,可以参考数据库副本服务器214的可见lsn(或日志缓存1240中注册的最新页面版本的另一个指示符)来评估该条件;在这些实施例中,步骤1412可以在步骤1410之前执行。然而,在其他实施例中,该评估只能在步骤1410从日志缓存1240检索重做日志记录之后进行。如果日志缓存1240不包含足以将期望页面《page id》从版本v(base)更新到所请求的版本v(target)的重做日志记录,则执行方法1400的步骤1416,否则执行方法1400的步骤1414。
[0145]
步骤1414:数据库副本服务器214将从日志缓存1240检索到的重做日志记录应用于期望页面《page id》的检索到的存储版本v(base),以生成更新后的期望页面,即期望页面《page id》的请求版本v(target)。更新后的期望页面存储在副本缓冲池1214中。
[0146]
步骤1416:响应于确定(步骤1406)副本缓冲池1214不包含期望页面的任何版本,或确定(步骤1412)日志缓存1240不包含足以将期望页面《page id》的本地存储版本v(base)更新为所请求版本v(target)的重做日志记录,数据库副本服务器214从云存储(例如,页面存储232)检索期望页面的副本。在一些实施例中,通过向存储期望页面的页面存储
232发送页面读取请求,从存储中检索期望页面。页面读取请求包括参数(《page id》,v(cached),and v(target))。在一些实施例中,v(cached)是存储在查找表1242中的所有重做日志记录中的最低(即最早)版本(例如lsn)的重做日志记录,该重做日志记录与期望页面《page id》的查找表项相关联。在一些实施例中,为了更保守,v(cached)可以是较新(即更高)版本(例如,lsn),但在任何情况下,v(cached)需要小于或等于v(target)。
[0147]
响应于来自数据库副本服务器214的读取请求,页面存储232返回高于版本v(cached)且低于或等于版本v(target)的期望页面《page id》的版本。页面存储232返回的期望页面《page id》的版本记为v(retrieved),v(cached)<v(retrieved)≤v(target)。
[0148]
步骤1418:如步骤1410,数据库副本服务器214再次从日志缓存中检索与期望页面《page id》相关联的重做日志记录。与步骤1410不同,数据库副本服务器214寻求检索版本在v(retrieved)和v(target)之间的所有重做日志记录;因此,它可以将参数(《page id》,v(retrieved),v(target))传到日志缓存软件接口。作为响应,日志缓存软件接口可在查找表项中返回查找表1242中存储的所有重做日志记录,其中该查找表项的键《page id》的lsn值介于v(retrieved)和v(target)之间。
[0149]
步骤1420:如步骤1412,数据库副本服务器214确定日志缓存是否包括指定版本范围内的全部重做日志记录。如果日志缓存1240不包含足以将期望页面《page id》从版本v(retrieved)更新到所请求的版本v(target)的重做日志记录,则执行方法1400的步骤1422,否则执行方法1400的步骤1414。
[0150]
步骤1422:如步骤1416,数据库副本服务器214从云存储(例如,页面存储232)检索期望页面的副本。与步骤1416不同,从云存储请求的页面版本是版本v(target),因此,读取请求可以传递参数(《page id》,v(target),v(target))。这意味着不使用日志缓存1240;数据库副本服务器214等待云存储更新到期望页面的请求版本v(target)。云存储(例如,页面存储232)将期望页面《page id》的版本v(target)返回到数据库副本服务器214后,执行方法1400的步骤1424。
[0151]
步骤1424:数据库副本服务器214从副本缓冲池1214读取更新后的期望页面(即期望页面《page id》的版本v(target)),并将更新后的期望页面发送到客户端。
[0152]
上述按需应用重做日志记录的方法1400除了上述优点之外,还可以有其他优点。通过按需应用重做日志记录,所描述的实施例可以从数据库副本服务器的数据同步过程的关键路径中移除应用重做日志记录以更新页面的过程。因此,数据同步引入的滞后可以显著减少,从而缩短数据可见性滞后。因此,数据库副本服务器只需完成几个小步骤即可上移其可见lsn,这些步骤为:从数据库主服务器缓冲区刷新的重做日志记录中提取元数据,将刷新的重做日志记录注册到日志缓存,使缓冲池中的弃用或过时页面无效,设置无效页面的过期lsn,以及更新本地存储的事务列表。所有这些步骤都可以快速(例如,在一些实施例中,在几毫秒内)完成。
[0153]
在一些实施例中,可以通过按需应用重做日志记录来实现零可见性滞后的云数据库。数据库主服务器可配置为延迟向其客户端发送事务提交通知,直到数据库副本服务器完成数据同步。这可能会减慢数据库主服务器的事务提交过程,但可以带来如下优点:数据库副本服务器的事务在查看数据库主服务器的最新更新方面可能不会有任何延迟。此外,此功能可以针对每个事务启用或禁用,这样只有不需要滞后的客户端才能使用此功能。
[0154]
可以使用数据库副本服务器实现类似的功能,以实现相同的目标,即没有数据可见性滞后。当数据库副本服务器214从客户端接收到读取请求时,如果客户端要求或请求零数据可见性滞后,数据库副本服务器214可以延迟执行事务(即满足读取请求),并触发数据同步方法1300或1350以获取数据库主服务器212提交的最新重做日志记录。数据库副本服务器214可以等到可见lsn更新为数据库主服务器212提交的重做日志记录的最新lsn,再允许事务执行。
[0155]
综述
[0156]
虽然本发明描述了由某些组件和物理实体执行的功能,但应当理解,在分布式系统中,部分或全部进程可以分布在多个组件和实体,且进程的多个实例可以在分布式系统上执行。
[0157]
尽管本发明通过按照一定的顺序执行的步骤描述方法和过程,但是可以适当地省略或改变方法和过程中的一个或多个步骤。在适当情况下,一个或多个步骤可以按所描述的顺序以外的顺序执行。
[0158]
尽管本发明在方法方面至少部分地进行了描述,但本领域普通技术人员将理解,本发明也针对用于执行所述方法的至少一些方面和特征的各种组件,无论是通过硬件组件、软件还是其任意组合。相应地,本发明的技术方案可以通过软件产品的形式体现。合适的软件产品可以存储在预先记录的存储设备或其他类似的非易失性或非瞬时性计算机可读介质中,包括dvd、cd-rom、usb闪存盘、可移动硬盘或其他存储介质等。软件产品包括有形地存储在其上的指令,该指令使得处理设备(例如,个人计算机、服务器或网络设备)能够执行本文中公开的方法的示例。一般来说,软件以一种或多种方式改进硬件的操作。
[0159]
在不脱离权利要求书的主题的前提下,本发明可以通过其它特定形式实施。所描述的示例性实施例在各方面都仅仅是示意性的,而不是限制性的。可以组合从一个或多个上述实施例中选择的特征,以创建非显式描述的可选实施例,在本发明的范围内可以理解适合于此类组合的特征。
[0160]
还公开了所公开范围内的所有值和子范围。此外,尽管本文所公开和示出的系统、设备和流程可包括特定数量的元件/组件,但可以修改所述系统、设备和组件,以包括此类元件/组件中的更多或更少的元件/组件。例如,尽管所公开的任何元件/组件可以引用为单个数量,但是可以修改本文所公开的实施例以包括多个此类元件/组件。本文所描述的主题旨在覆盖和涵盖所有适当的技术变更。
技术特征:
1.一种用于同步云数据库的数据库副本服务器的数据的方法,其特征在于,所述云数据库包括存储在页面中的数据,所述方法包括:所述数据库副本服务器从客户端接收对数据库数据的期望页面的请求;响应于接收到对所述期望页面的请求:检索所述期望页面的存储版本;从日志缓存中检索与所述期望页面相关联的一个或多个重做日志记录;将所述一个或多个重做日志记录应用于所述期望页面的存储版本,以生成更新后的期望页面;所述数据库副本服务器向所述客户端发送所述更新后的期望页面。2.根据权利要求1所述的方法,其特征在于,所述云数据库是多主云数据库;所述数据库副本服务器是数据库主服务器。3.根据权利要求1或2所述的方法,其特征在于,所述日志缓存是所述数据库副本服务器的一部分。4.根据权利要求1至3中任一项所述的方法,其特征在于,所述日志缓存是所述云数据库的一部分,与所述数据库副本服务器分离。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述数据库副本服务器从所述数据库副本服务器的缓冲池中检索所述期望页面的存储版本。6.根据权利要求1至5中任一项所述的方法,其特征在于,所述数据库副本服务器从所述云数据库的页面存储中检索所述期望页面的存储版本。7.根据权利要求1至6中任一项所述的方法,其特征在于,在检索与所述期望页面相关联的所述一个或多个重做日志记录之前,还包括:将多个重做日志记录存储至所述日志缓存,所述多个重做日志记录包括与所述期望页面相关联的所述一个或多个重做日志记录中的至少一个。8.根据权利要求7所述的方法,其特征在于,数据库主服务器将所述多个重做日志记录存储至所述日志缓存。9.根据权利要求7所述的方法,其特征在于,所述数据库副本服务器将所述多个重做日志记录存储至所述日志缓存。10.根据权利要求7所述的方法,其特征在于,在将所述多个重做日志记录存储至所述日志缓存之前,还包括:确定所述日志缓存的可用内存不足以存储所述多个重做日志记录;剔除存储在所述日志缓存中的一个或多个重做日志记录。11.根据权利要求7所述的方法,其特征在于,所述多个重做日志记录中的每个重做日志记录与页面相关联;将所述多个重做日志记录存储至所述日志缓存包括:将所述多个重做日志记录中的每个重做日志记录与所述每个重做日志记录相关联的页面对应的查找表项关联存储在所述日志缓存的查找表中;从所述日志缓存中检索所述一个或多个重做日志记录包括:检索与所述期望页面对应的查找表项关联存储的一个或多个重做日志记录。
12.根据权利要求11所述的方法,其特征在于,所述期望页面的存储版本与日志序号相关联;检索所述一个或多个重做日志记录包括:检索与比所述期望页面的存储版本的日志序号大的日志序号关联存储的一个或多个重做日志记录。13.根据权利要求12所述的方法,其特征在于,在检索与所述期望页面相关联的所述一个或多个重做日志记录之前,还包括:确定所述日志缓存的可用内存不足以存储所述多个重做日志记录;剔除存储在所述日志缓存中的一个或多个重做日志记录;将所述多个重做日志记录存储至所述日志缓存,所述多个重做日志记录包括与所述期望页面相关联的所述一个或多个重做日志记录中的至少一个;将所述数据库副本服务器的可见日志序号更新为与所述多个重做日志记录相关联的结束日志序号。14.一种处理单元,其特征在于,包括:处理设备;以及存储指令的存储器,当所述指令由所述处理设备执行时,使得所述处理单元执行云数据库的数据库副本服务器的功能,所述云数据库包括存储在页面中的数据,所述数据库副本服务器用于:从客户端接收对数据库数据的期望页面的请求;响应于接收到对所述期望页面的请求:检索所述期望页面的存储版本;从日志缓存中检索与所述期望页面相关联的一个或多个重做日志记录;将所述一个或多个重做日志记录应用于所述期望页面的存储版本,以生成更新后的期望页面;向所述客户端发送所述更新后的期望页面。15.根据权利要求14所述的处理单元,其特征在于,所述处理单元包括所述日志缓存;当所述指令由所述处理设备执行时,还使得所述处理单元执行所述日志缓存的功能。16.根据权利要求14或15所述的处理单元,其特征在于,所述日志缓存包括多个存储的重做日志记录,所述多个存储的重做日志记录中的每个存储的重做日志记录与页面对应的查找表项关联存储在所述日志缓存的查找表中;从所述日志缓存中检索所述一个或多个重做日志记录包括:检索与所述期望页面对应的查找表项关联存储的一个或多个存储的重做日志记录。17.根据权利要求16所述的处理单元,其特征在于,当所述指令由所述处理设备执行时,还使得所述处理单元执行缓冲池的功能;所述期望页面的存储版本从所述缓冲池中检索到。18.根据权利要求17所述的处理单元,其特征在于,所述期望页面的存储版本与日志序号相关联;检索所述一个或多个重做日志记录包括:检索与比所述期望页面的存储版本的日志序号大的日志序号关联存储的一个或多个重做日志记录。
19.根据权利要求18所述的处理单元,其特征在于,所述数据库副本服务器还用于在检索与所述期望页面相关联的所述一个或多个重做日志记录之前:确定所述日志缓存的可用内存不足以存储接收到的多个重做日志记录;剔除存储在所述日志缓存中的一个或多个重做日志记录;将接收到的所述多个重做日志记录存储至所述日志缓存,所述多个重做日志记录包括与所述期望页面相关联的所述一个或多个重做日志记录中的至少一个;将所述数据库副本服务器的可见日志序号更新为与接收到的所述多个重做日志记录相关联的结束日志序号。20.一种计算机可读介质,其上存储将由云数据库中的处理设备执行的指令,其特征在于,当所述指令执行时,使得所述云数据库的数据库副本服务器执行如下操作:从客户端接收对数据库数据的期望页面的请求;响应于接收到对所述期望页面的请求:检索所述期望页面的存储版本;检索与所述期望页面相关联的一个或多个重做日志记录;将所述一个或多个重做日志记录应用于所述期望页面的存储版本,以生成更新后的期望页面;向所述客户端发送所述更新后的期望页面。
技术总结
本发明描述了云数据库中的方法、处理单元和计算机可读介质。仅当向数据库副本请求页面的更新版本时,重做日志记录才应用于数据库副本上的页面。数据库副本节点可以通过日志缓存来跟踪适用于给定页面的最近重做日志记录。当该页面的更新版本被请求时,可以应用日志缓存中存储的最近重做日志记录来按需更新该页面。通过仅应用适用于当前请求的页面的重做日志记录,处理资源只可用于生成当前所需的页面。本发明还描述了主服务器或副本服务器将重做日志记录注册到日志缓存的方法。日志记录注册到日志缓存的方法。日志记录注册到日志缓存的方法。
技术研发人员:陈翀 陈瑾 林舒 孙春生
受保护的技术使用者:华为云计算技术有限公司
技术研发日:2021.11.30
技术公布日:2023/8/4

版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/