CN118140217A - 经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入 - Google Patents

经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入 Download PDF

Info

Publication number
CN118140217A
CN118140217A CN202280070777.8A CN202280070777A CN118140217A CN 118140217 A CN118140217 A CN 118140217A CN 202280070777 A CN202280070777 A CN 202280070777A CN 118140217 A CN118140217 A CN 118140217A
Authority
CN
China
Prior art keywords
data
buffer
page
memory
buffer pool
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202280070777.8A
Other languages
English (en)
Inventor
R·拉莫斯
K·A·戈劳布
C·戈蒂帕蒂
A·H·萨恩兹
R·K·丹迪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Priority claimed from PCT/US2022/041615 external-priority patent/WO2023075910A1/en
Publication of CN118140217A publication Critical patent/CN118140217A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的方法由计算系统执行。数据库系统中的计算节点插入、更新和查询存储节点中维护的数据页。经由在本地磁盘存储之前存储数据页的暂存缓冲区,将由计算节点缓冲池在本地高速缓存的数据页作为预拷贝提供给本地磁盘上的缓冲池扩展。数据页的加密发生在暂存缓冲区,这允许在复制过程中进行限制较少的更新锁存,页元数据在缓冲池扩展页表中被更新,其中进行中状态指示它尚未被写入本地磁盘。当暂存缓冲区已满时,数据页被写入缓冲池扩展,并且元数据在页表中被更新以指示可用/有效状态。暂存缓冲区中的数据页可以在写入本地磁盘之前被读取和更新。

Description

经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入
背景技术
当本地缓冲池变满时,大型数据库实现中的计算节点被迫将数据页刷新到永久存储中。此外,修改本地缓冲池中的数据页的写入事务可能会导致缓冲池的填充速度快于数据可以被提交给永久存储的速度,并且这会导致事务完成期间的显著延迟和系统性能下降,因为写入事务、本地缓冲池和写锁在这个过程中是耦合的。类似地,如果本地缓冲池中的页发生改变,即页为脏,则在本地缓冲池充满时,这些页将从该本地缓冲池中被逐出。在这种情况下,页要么从存储器中被逐出,要么必须被更新,这可能会触发写入刷新,其中每个页都需要自己的独占锁存器、数据加密、数据写入、数据解密和页解锁。此外,如果实现共享锁存器,则获取独占锁存器需要耗尽所有共享锁存器,并且这进一步阻碍了系统性能。
发明内容
提供本发明内容是为了以简化的形式介绍以下在具体实施方式中进一步描述的概念的选择。本发明内容不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。
用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的方法由计算系统执行。计算节点和控制节点包括数据库系统的部分,该部分处理查询规划和分布或查询用于对由页服务器或数据文件中的存储节点维护的数据文件进行操作的功能。计算节点在页服务器/存储节点中维护的数据页上插入、更新和执行部分查询。数据页可以由缓冲池中的计算节点本地高速缓存,并且经由在本地磁盘存储之前存储数据页的暂存缓冲区作为预拷贝被提供给本地磁盘上的缓冲池扩展。也就是说,暂存缓冲区执行预写存储,该预写存储充当缓冲池存储器的出口,以减轻繁重的写入活动。数据页的加密发生在暂存缓冲区处而不是缓冲池中,这也允许在复制过程中进行限制较少的更新锁存,页元数据在缓冲池扩展页表中更新,其中进行中状态指示数据页尚未通过缓冲池扩展被写入本地磁盘。当暂存缓冲区已满时,数据页被写入缓冲池扩展,并且元数据在页表中被更新,以在对缓冲池扩展的写入完成时指示可用/有效状态。暂存缓冲区中的数据页可以在写入本地磁盘之前被读取和更新,就像缓冲池扩展中的数据页一样。
以下参考附图详细描述其他特征和优点以及各种示例的结构和操作。应当注意,这些思想和技术不限于本文中描述的具体示例。这样的示例在本文中仅出于说明目的而呈现。至少基于本文中包含的教导,附加示例对于相关领域的技术人员将是很清楚的。
附图说明
并入本文中并且构成说明书的一部分的附图示出了本申请的实施例,并且与说明书一起进一步用于解释实施例的原理,并且使得相关领域的技术人员能够制作和使用实施例。
图1示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的系统的框图。
图2示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的计算系统的框图。
图3示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的流程图。
图4示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的流程图。
图5示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的流程图。
图6示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的数据结构的图。
图7示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的扩展页文件的框图。
图8示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的系统的框图。
图9示出了可以用于实现实施例的示例计算设备的框图。
实施例的特征和优点将从下面结合附图阐述的详细描述中变得更加明显,在附图中,相同的附图标记自始至终标识对应元素。在附图中,相似的附图标记通常表示相同的、功能相似的和/或结构相似的元素。元素首次出现的图由对应附图标记中最左边的数字表示。
具体实施方式
Ⅰ.简介
以下详细描述公开了很多示例实施例。本专利申请的范围不限于所公开的实施例,还包括所公开的实施例的组合、以及对所公开的实施例的修改。
说明书中对“一个实施例”、“实施例”和“示例实施例”等的引用表明,所描述的实施例可以包括特定特征、结构或特性,但每个实施例不一定包括特定特征、结构或特性。此外,这样的短语不一定是指相同实施例。此外,当结合实施例描述特定特征、结构或特性时,认为结合其他实施例来影响这样的特征、结构或特性在本领域技术人员的知识范围内,无论是否明确描述。
在讨论中,除非另有说明,否则修饰本公开的实施例的一个或多个特征的条件或关系特性的诸如“基本上”、“近似地”和“大约”等形容词被理解为表示该条件或特征被定义为在其意图用于的应用的实施例的操作可接受的容限内。
如果操作的执行在本文中被描述为“基于”一个或多个因素,则应当理解,操作的执行可以仅基于(多个)这样的因素,或者可以基于(多个)这样的因素以及一个或多个附加因素。因此,如本文中使用的,术语“基于”应当理解为等同于术语“至少基于”。
此外,应当理解,本文中使用的空间描述(例如,“上方”、“下方”、“上”、“左”、“右”、“下”、“顶部”、“底部”、“垂直”、“水平”等)仅用于说明的目的,并且本文中描述的结构和附图的实际实现可以以任何取向或方式在空间上布置。此外,附图可以不按比例提供,并且附图的元素的取向或组织在实施例中可以变化。
在本文中的实施例的上下文中,例如,对于数据库,“数据集”或“数据文件”可以被存储为数据“表”,并且这些术语(“表”、“数据集”和“数据文件”)在说明书中可以互换使用。在实施例中,这样的术语也被设想为包括数据库或其部分。
以下描述了很多示例性实施例。注意,本文中提供的任何章节/小节标题均不具有限制性。在整个文档中描述了实施例,并且任何类型的实施例都可以被包括在任何章节/小节下。此外,在任何章节/小节中公开的实施例可以以任何方式与在相同章节/小节和/或不同章节/小节中描述的任何其他实施例相结合。
下面的第II节描述了用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的示例实施例。下面的第III节描述了可以用于实现本文中描述的实施例的特征的示例计算设备。下面的第IV节描述了附加的示例和优点,第V节提供了一些结论性意见。
II.用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的示例实施例
用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的方法由系统和设备执行。本文中的各种实施例涉及数据库系统,包括分布式数据库和计算中心,它们可以是基于云的,诸如但不限于数据仓库、用于“大数据”分析的系统、企业系统、存储数据集(包括非常大的数据集)的其他数据库系统等,尽管一些实施例是在分布式数据库实现中的计算节点的上下文中描述的,但实施例不限于此。所描述的实施例适用于任何类型的数据库服务器实现,诸如但不限于来自华盛顿州雷德蒙德的微软公司的SQL此外,例如,出于说明的目的,描述了用于各种实现的缓冲池存储器和缓冲池扩展存储器的实施例,然而,其他实现和架构也适用于所描述的技术,并且在本文中被考虑。
在实施例中,例如,分布式数据库系统或数据仓库系统可以包括多个计算池(例如,跨多个物理服务器,作为逻辑服务器内的虚拟数据仓库实例,等等)。计算池可以包括但不限于控制节点(即,前端节点)、分布式查询处理器(DQP)、一个或多个计算节点等。控制节点和相关联的DQP可以充当查询端点,该查询端点负责为传入查询产生分布式计划并且在计算节点池之间划分工作,其中每个计算节点可以负责分布式地处理来自一个或多个分布的数据,例如数据集或数据文件的部分或分布,其可以包括大的分布式数据表。所描述的实施例中的每个控制和计算节点可以被配置为运行/执行其自己的数据库服务器实例,每个数据库服务器可以被分配对整个系统唯一的资源管理器标识符。在实施例中,数据库服务器的实例可以包括各种控制和计算“节点”:(多个)节点的一部分、节点、多于一个节点等。
在实现中,计算池可以共享相同事务管理器节点来启动或提交事务。此外,考虑针对单个或多个数据库(DB)进行查询,这可以包括跨在逻辑服务器或包括相同事务管理器节点的物理服务器内的所有数据库进行写入。也就是说,跨DB查询支持可以隐含在所描述的实施例中。本文中的实施例还设想不同计算池能够在系统内的DB的相同表上操作,其中写入的数据页的本地存储可以由计算节点维护,用于针对不同DB执行功能。
在给定系统中,计算节点可以负责插入、更新和/或查询数据库(也是数据文件、数据集等)的数据。在一些实施例中,数据可以被组织为8千字节的数据页、或者本文中的“页”。数据库的页被维护在系统的存储节点中,在实施例中,存储节点可以是页服务器。计算节点可以将这些页中的一些高速缓存在诸如缓冲池等存储器中,并且还可以将页持久化在诸如固态驱动器(SSD)等本地磁盘中。计算节点可以利用存储器的缓冲池扩展部分来本地存储这些页,例如,经由用于SQL的某些实现的弹性缓冲池扩展(RBPEX)。缓冲池扩展存储器是弹性存储,并且在实施例中可以包括页文件(在本文中,或者扩展页文件、或者缓冲池扩展页文件),使得在计算节点进程重新启动时,缓冲池扩展存储器能够使用存储在其中的页并且避免对存储节点的更昂贵的网络请求。
当计算节点的缓冲池变满时,其页中的一些可以被逐出。如果那些要被逐出的页有未完成改变,例如,它们是“脏的”,并且它们也在缓冲池扩展中,那么它们要么需要在磁盘中更新,要么需要从永久存储中被逐出。在工作负载密集的数据库中,这会导致对本地磁盘的本地写入刷新,从而降低系统性能。此外,从缓冲池写入缓冲池扩展的“脏”页一次一个地被写入,除非这些页对于批写入是连续的,因为它们没有被连续存储在本地RBPEX文件中。
作为上述问题的一个示例,对于这些更新写入中的每个更新写入,对应页需要独占锁存器,需要对其内容进行加密,然后,在写入完成之后,需要解密其内容并且解锁页。为了获取独占锁存器,给定页上的所有共享锁存器都必须被耗尽,并且因此与允许存在共享锁存器的更新锁存器相比,获取独占锁存器需要更长的时间。独占锁存器还限制应当以更高速率执行的读取操作。在创建和初始化缓冲池扩展文件之后,这些问题会立即变得更加突出,这会导致写入速度减慢,这是由于负责将文件增长到其最终大小的初始化过程中出现的竞争条件造成的。此外,就地写入实现要求在相同位置重写缓冲池扩展中的更新页,这会使用于对文件进行写入的代码路径负重担,并且导致在文件的随机位置进行过小的写入操作。
本文中的实施例提供了方法和独特的系统存储器架构,其中要写入缓冲池扩展的页首先被复制到中间暂存缓冲区。也就是说,在从缓冲池写入之前,经由暂存缓冲区中的写入的预暂存来执行本地页写入。如本文所述,暂存缓冲区被配置为在页被写入本地磁盘用于持久性之前容纳很多数据页。此外,本文中的实施例使得能够在暂存缓冲区处执行加密过程,并且这允许在复制过程中的限制较少的更新锁存器,而不是在当前解决方案中的上述独占锁存器。暂存缓冲区还使得能够在新的空闲位置对数据页执行更新和新的写入,并且本文中的暂存缓冲区能够累积来自缓冲池的不连续页,其然后可以作为单批写入被写入缓冲池扩展。
应当注意,可能需要维护更新锁存器,直到页被完全复制,并且页的元数据在缓冲池扩展的内部页表或“页表”中被更新。页状态在表中被维护为“进行中”或“运行中”,这表示页尚未被写入磁盘(即,页当前存储在暂存缓冲区中)。在系统崩溃和恢复的情况下,“进行中”或“运行中”页可以被丢弃,以保持系统的正确性。当在各种描述的实施例的操作期间填充暂存缓冲区时,其中的数据可以被写入本地磁盘,从而在本地磁盘上被持久化,并且缓冲池扩展元数据表的另一更新将被进行以将页状态改变为“有效”和/或“可用”(或者对数据的磁盘写入完成的另一指示)。
根据实施例,当在暂存缓冲区中时,页可以从主存储器中的缓冲池中被逐出。在从缓冲池中逐出之后的稍后时间,可能再次需要页,并且为此,所描述的实施例允许在这些页尚未经由缓冲池扩展被写入本地磁盘的情况下从暂存缓冲区读取这些页。同样,在页在缓冲池中变得“脏”并且检查点或逐出正在进行并且暂存缓冲区中的页尚未经由缓冲池扩展被写入本地磁盘的情况下,这样的数据页也可以在暂存缓冲区更新。
在实施例中,暂存缓冲区可以用作或体现表示数据页被持久地存储在其中的本地存储器中的本地文件中的连续区域的段。一旦段已满,其就可以作为单个分批的写入操作被写入本地磁盘,并且对应页在缓冲池扩展元数据表中被标记为“有效”和/或“可用”。然后,新的段可以被选择来接收从缓冲池提供的下一新的数据页,并且因此,新的空闲连续区域必须在缓冲池扩展文件中被找到。被更新的页将其内容复制到存储器中的当前暂存缓冲区/段缓冲区。由于这样的页在磁盘上也具有与不同段相关联的先前位置,元数据文件/表更新将页从先前/旧的段分离,并且将页附加到仍在存储器中暂存的新/当前的段。当页移动到更当前段时,这可能会在存储在磁盘上的较旧段中产生漏洞,并且其中大部分页移动到其他段的段最终有较低占用率。
关于低占用率,根据实施例,每个数据页可以在缓冲池扩展元数据表中具有与其相关联的时间戳信息。当页被使用时(例如,从页中读取、对页进行更新、对页进行写入等),该时间戳用最近时间更新。当存储在段中的页更新其时间戳时,对应段将用其页中的最高值更新其时间戳。实施例还提供了在系统的后台(例如,在计算节点中)运行的逐出过程,该逐出过程被配置为标识使用最少的段,例如,具有最低段时间戳的段,和/或标识具有低占用率的段。这些标识的段中的页可以从缓冲池扩展元数据表中被逐出,导致页从其相应段分离。当段具有零个页与其相关联时,该段可以移动到空闲段列表,或者在空闲段列表中被指定/标识,该空闲段列表可以被用于正在刷新到缓冲池扩展存储器中的新页。
低占用率段中的页也可以具有最近时间戳。为了减轻逐出这些低占用段的“热”或频繁使用的页的影响,实施例提供了尝试将这样的页的内容写入存储器中暂存的最当前的打开的段。如果页仍在本地存储器中,则这可以快速执行,也可以通过本地磁盘读取操作来执行。在本地磁盘读取方案中,由于本地磁盘操作比内存中操作慢,因此这些读取可以基于最大努力来进行。
因此,本文中的实施例使得诸如分布式DB系统、数据仓库系统等系统能够以避免针对高容量写入的独占锁存所发生的效率降低的方式来执行和跟踪数据的本地写入操作。实施例提供了对用于元数据的内存中数据库事务表的利用,以跟踪页是否在运行中或可用,并且使用允许页高效地从一个段移动到另一段的无锁机制将页与段相关联。在向缓冲池扩展写入之前,即使运行中的页仍在暂存缓冲区中,这些页也可以被读取和更新。本文中描述的暂存缓冲区允许所有写入在等待写入本地磁盘时排队,并且如果该队列(即,(多个)暂存缓冲区)变得太长,则新的页写入可以被立即逐出。这使存储设备的最大吞吐量为可能,并且即使在最大吞吐量下,刷新缓冲池操作(诸如检查点和逐出)也不会受到惩罚。此外,如上所述,本文中描述的暂存缓冲区的特定利用对去往磁盘的页施加限制性小得多的更新锁存器,并且不需要独占锁存器。该暂存缓冲区实现还被配置为如果整个写入流水线变得太忙的,则回退到跳过写入。也就是说,计算节点能够在不支付高性能成本的情况下写入弹性高速缓存。在一些情况下,这允许计算节点避免将任何页写入磁盘,因为存储节点已经这样做了。此外,与缓冲池扩展存储/存储器的接口就像常规的读写文件操作一样,尽最大努力工作——也就是说,暂存缓冲区和对应元数据表更新在写入流水线内被处理,以使得在流水线之外只能看到性能改进。还应当注意,对缓冲池扩展的写入可能会使稍后可以以静默方式失败的操作排队,并且因此,如果目标页不在,则相关联的读取操作也可以失败,这将被解释为高速缓存未命中,并且该页可以从后端存储(例如,页服务器)被重试。
因此,本文中的实施例提供了对来自缓冲池的数据写入吞吐量、限制性锁存、以及通过唯一暂存缓冲区的运行中/处理中写入的数据操作,以及对运行中/处理中写入的元数据的跟踪的问题的解决方案。这些实施例和其他实施例将在以下在本章节中结合附图以及以下各章节/小节中进一步详细描述。
本文中的系统、设备和装置可以以各种方式被配置用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入,诸如分布式DB系统、维护大型数据库的数据仓库等。例如,现在将描述图1。图1示出了根据示例实施例的被配置用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的系统100的框图。
如图1所示,系统100包括用户设备102和数据系统104。在实施例中,用户设备102和数据系统104通过网络112彼此通信。应当注意,在各种实施例中,存在不同数目的用户设备和/或数据系统和/或其子组件。此外,根据实施例,图1所示的系统和/或组件的任何组合都存在于系统100中。
在实施例中,网络112包括连接设备、平台和主机/服务器的不同数目和/或类型的通信链路,诸如但不限于互联网、有线或无线网络及其部分、点对点连接、局域网、企业网络、云网络等。
不同实施例中,用户设备102是任何数目、类型或组合的计算设备或计算系统,包括终端、个人计算机、膝上型计算机、平板设备、智能电话、个人数字助理、(多个)服务器、游戏控制台等,包括内部/外部存储设备,其用于执行本文中描述的用于与数据库、数据仓库和/或数据库服务器交互的功能/操作,诸如提供针对表/数据集的查询。在实施例中,用户设备102还包括附加组件(为了简洁和说明性清楚而未示出),包括但不限于本文中的其他设备和/或系统的组件和子组件。在一些实施例中,用户设备102可以包括托管提供针对表/数据集的查询的服务或应用的计算设备/系统。
数据系统104可以是数据库系统,包括分布式实现、数据仓库等,并且包括一个或多个服务器计算机、计算系统和/或计算设备,在实施例中,其可以包括一个或多个分布式或“基于云”的服务器。在本文中设想的不同实现中,除了或代替基于云的服务器,数据系统104还可以包括一个或多个本地服务器。本文中的各种系统/设备(诸如数据系统104)被配置为提供由用户设备102所使用的服务,诸如涉及数据仓库、数据库托管等的业务服务和/或应用。例如,数据系统104包括一个或多个计算池108,如本文所述,每个计算池可以包括但不限于控制节点、DQP、一个或多个计算节点等。数据系统104还包括与(多个)计算池108相关联的事务管理器节点110、以及被配置为执行用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的功能的附加组件,如本文中进一步详细描述的,以及可以是数据集的一个或多个数据文件106(下文中的“数据文件106”),如上所述。
数据文件106包括数据库和/或包括数据表的数据库等,在实施例中,这些数据表可以是非常大的数据文件/集,诸如用于“大数据”分析和/或数据仓库。本文中设想,在实施例中,数据文件106中的一个或多个数据文件达到约千兆级或更大。数据文件106可以包括任何类型的数据,包括被组织为具有数据列的表的关系数据。
如上所述,除了或代替基于云的服务器,(多个)计算池108可以包括控制节点,该控制节点包括一个或多个服务器计算机、服务器系统和/或计算设备,诸如(多个)本地服务器。控制节点可以包括数据库服务器应用的实例,并且被配置为充当传入查询的查询端点,以结合DQP产生用于传入查询的分布式计划。在实施例中,计算节点和DQP可以在逻辑上和/或物理上分离,或者整体/部分地组合。分布式查询计划在(多个)计算池108的计算节点之间划分用于查询处理的工作。也就是说,根据实施例,控制节点和DQP被配置为经由计算节点接收传入查询并且将其转换为针对数据文件/数据集的分布(例如,并行地)来运行的查询集。
除了或代替基于云的服务器,计算节点每个可以包括一个或多个服务器计算机、服务器系统和/或计算设备,诸如(多个)本地服务器。计算节点每个还可以包括数据库服务器应用的实例,并且被配置为在执行由控制节点/DQP分配的查询执行任务时从大的表的一个或多个分布读取和/或处理数据。计算节点每个还可以包括用于在本地存储表的行或页的高速缓存,以便根据其上的事务操作的需要更快地对其访问。在本文中的实施例中,计算节点被配置为执行用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的功能和/或操作,如上所述。
事务管理器节点110可以被配置为驱动分布式系统中查询事务的版本化和语义。例如,事务管理器节点110被配置为版本化或唯一地标识改变或修改数据的传入查询(即,非只读的查询)以及由这样的查询改变/修改的数据。事务管理器节点110还被配置为监督和维护用于这样的查询的活动、提交和中止信息。
如上所述,在实施例中,数据系统104可以包括一个或多个分布式或“基于云”的服务器。也就是说,数据系统104可以是用于与网络架构/云平台中的托管数据库和/或数据仓库相关联的应用和/或服务的网络或“云”实现。根据实施例,云平台包括联网计算资源集,包括服务器、路由器等,其是可配置的、可共享的,提供数据安全,并且可以通过诸如互联网等网络访问。用于托管数据库和/或数据仓库的云应用/服务被配置为在这些计算资源上运行,通常在运行在这些资源上的操作系统(OS)/操作系统之上,用于跨本地和/或通过网络来访问应用/服务的实体。云平台被配置为支持如上所述的多租户,其中基于云平台的软件服务多个租户,每个租户包括共享对云平台的某些软件服务和应用的公共访问的一个或多个用户,如本文所述。此外,云平台被配置为支持被实现为硬件、软件和/或固件的管理程序,这些管理程序为租户运行虚拟机(模拟计算机系统,包括操作系统)。管理程序为租户提供虚拟操作平台。
尽管出于描述和说明的非限制性目的,在系统100中示出了数据库系统或数据仓库(例如,数据系统104),但是在各种实施例中,本文中还设想用于数据库托管等的备选的实现。
现在参考图2,示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的系统200的框图。示例性示出和描述的系统200被配置为图1中的系统100的数据系统104的实施例。也就是说,系统200被示出为被配置为至少基于本文中描述的技术来执行数据库系统、数据仓库等的操作。系统200描述如下。
系统200包括计算系统202,该计算系统是任何类型的服务器或计算系统,如本文其他地方所述,或如其他已知的,包括但不限于基于云的系统、本地服务器、分布式网络架构、数据仓库或其一部分等。如图2所示,计算系统202包括一个或多个处理器(“处理器”)204、存储器和/或其他物理存储设备(“存储器”)206中的一个或多个,以及一个或多个网络接口(“网络接口”)230。计算系统202还包括(多个)计算池208(在实施例中,其可以是任何数目的计算池,并且可以包括一个或多个服务器、数据仓库系统的虚拟数据仓库实例等)。应当注意,虽然为了简洁和说明性清楚而未示出,但是系统200还可以包括事务管理器或事务管理器节点、垃圾收集器、锁管理器服务,以及通常用于数据库和数据仓库实现的其他组件,如受益于本公开的相关领域的技术人员所理解的。还为系统200示出了一个或多个数据文件228(下文中也称为“数据文件228”),其可以是图1的数据文件106的实施例,并且可以包括针对其执行查询事务的用户数据的一个或多个用户表、数据集、数据文件等。
处理器204和存储器206可以分别是本文中描述的和/或受益于本公开的相关领域的技术人员所理解的任何类型的(多个)处理器电路/(多个)系统和存储器。处理器204和存储器206每个可以分别包括一个或多个处理器或存储器、不同类型的处理器或存储器(例如,用于版本控制和/或查询处理的(多个)高速缓存、临时数据库存储器等)、远程处理器或存储器、和/或分布式处理器或存储器。处理器204可以是被配置为并发地执行多于一个处理线程的多核处理器。处理器204可以包括被配置为执行计算机程序指令的电路系统,诸如但不限于(多个)计算池208的实施例,包括如本文中描述的其组件中的一个或多个组件,其可以被实现为计算机程序指令,或者备选地被实现为如本文中描述的硬件,并且存储在存储器206中。
在不同实施例中,存储器206包括诸如随机存取存储器(RAM)等易失性存储部分,和/或诸如磁盘/硬盘驱动器、非易失性RAM、高速缓存等持久存储部分,以存储或被配置为存储如本文中描述的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的计算机程序指令/代码,以及存储本公开中描述的其他信息和数据,包括但不限于数据集、与查询相关联的信息表、索引、数据版本信息的列表或表、不同类型的元数据(包括但不局限于全局元数据、页表等)、时间戳等。例如,计算系统202还包括页表224和数据文件224,它们可以存储在存储器206中,例如,如盘上存储、本文中描述的系统和/或组件的高速缓存等。在实施例中,这样的数据、元数据类型和/或信息可以存储在计算系统202外部的存储中,并且可以由计算系统202和/或其他系统(例如,计算/处理节点的多个池、外部系统等,如本文中描述的)经由网络或存储接口来共享/使用。在实施例中,存储器206可以包括内部和/或外部部分。
网络接口230可以是任何类型或数目的有线和/或无线网络适配器、调制解调器等,其被配置为使得包括计算系统202在内的系统200能够在系统内与其组件以及通过网络与其他设备和/或系统通信,诸如计算系统202与图1中的系统100的其他设备、系统、主机之间的通信,包括通过诸如网络112等网络存储数据集、用户设备、计算节点等的系统。
根据实施例,系统200还包括附加组件(为了简洁和说明性清楚而未示出),包括但不限于本文中的其他设备和/或系统的组件和子组件、(多个)操作系统和/或下面关于图9描述的那些。
如上所述,(多个)计算池208可以是图1中的(多个)计算池108的实施例。在所示的实施例中,(多个)计算池208包括控制节点210、分布式查询处理器(DQP)212和一个或多个计算节点214,尽管实施例在各种实现中设想了这些组件中的不同数目的一个或多个组件。同样地,(多个)计算池208中的一个或多个计算池可以存在于计算系统202中。
除了如上所述的处理器和存储器之外,控制节点210还可以包括任何数据库服务器应用,并且在实施例中作为接收来自用户设备、服务、应用等的查询的前端或查询端点来操作。控制节点210可以包括数据定义语言(DDL)引擎和查询优化器。DDL引擎被配置为执行语句以创建、修改和删除数据集/数据文件中的表、索引和关系,例如,至少基于传入查询。在实施例中,DDL引擎被配置为执行语句以创建、修改和/或删除在查询事务的执行时生成的表中的行、表本身、列表、阵列和/或其他数据结构。查询优化器被配置为至少基于传入查询和其他信息,例如基数估计等,生成用于针对表、数据集等执行传入查询的查询计划。为了开始查询执行,控制节点210可以与事务管理器节点(未示出)通信,并且提供与查询相关联的信息(例如,响应于接收到查询的应用程序编程接口(API)调用),使得事务管理器节点能够为查询分配事务开始标识符(即,开始序列号)。
在实施例中,DQP 212可以包括诸如解串器、有向非循环图(DAG)生成器、工作负载管理器等子组件,并且可以被配置为可靠地在千兆字节级跨大量(例如,数千个)计算节点编排查询任务DAG。解串器被配置为对从控制节点210接收的对数据集分布的分布式查询处理的请求进行解串,并且将其输出提供给DAG生成器,该DAG生成器轮流被配置为生成DAG,诸如概括用于在(多个)计算节点214中的计算节点处执行查询任务/事务的分布式执行的过程依赖性和操作的静态DAG。DAG从DAG生成器被提供给工作负载管理器,该工作负载管理器被配置为分配(多个)计算节点214中的计算节点来执行根据本文中的实施例的任务/事务,用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入。
控制节点210可以是与计算系统202的其他组件在逻辑上或物理上分离的实体,并且DQP 212可以是与计算机系统202的其他组件在逻辑或物理上分离的实体。例如,在一些实施例中,控制节点210和DQP 212可以在可通信链接的不同物理或逻辑服务器主机中实现。在这样的实施例中,DQP 212可以包括分离的服务器节点,而控制节点210包括其自己的服务器。
除了上述处理器和存储器之外,(多个)计算节点214还可以包括任何数据库服务器应用,并且在实施例中,作为从控制节点210和/或DQP 212接收分布式查询任务/事务的部分的后端来操作。在给定实施例中,可以存在一个或多个计算节点214,并且在如上所述的实施例中,(多个)计算节点214中的每个可以包括数据定义语言(DDL)引擎和查询优化器。如本文所述,(多个)计算节点214被配置为根据用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的实施例进行操作。如图所示,(多个)计算节点214包括多个硬件和/或软件组件:缓冲池216、文件控制块218、缓冲池扩展220(“缓冲区扩展220”)、扩展页文件222、页表224和暂存缓冲区226。在实施例中,(多个)计算节点214中的一个或多个计算节点可以分别包括这些组件中的一个或多个组件。
暂存缓冲区226可以包括内存中存储,诸如高速缓存或其他临时存储,并且被配置为从缓冲池216接收去往缓冲池扩展220的写入事务数据/数据页。如本文所述,诸如暂存缓冲区226等暂存缓冲区可以用作或体现表示数据页被持久地存储在其中的本地存储器中的本地文件中的连续区域的段。暂存缓冲区226被配置为使得能够对其进行未就位的写入,使得任何新的写入、插入、更新等被写入暂存缓冲区226的新位置。实施例还提供了暂存缓冲区226和/或其段的多个实例,如本文所述。在实施例中,暂存缓冲区226可以在逻辑上划分为段,段可以包含多个数据页,并且每个段的数据页的数目可以是2的任何因数,并且可以对应于下面描述的扩展页文件222的配置。
缓冲池216可以包括存储器组件,例如,诸如高速缓存等内存中组件,并且可以包括存储器206的一部分。缓冲池216可以被配置为临时存储或高速缓存由(多个)计算节点214执行的(多个)数据文件228的数据的写入事务,并且可以将与之相关联的写入数据提供给维护数据库的盘上持久存储,诸如存储(多个)数据文件228的页服务器等。在实施例中,如上所述,(多个)计算节点214中的计算节点可以本地存储/高速缓存经修改的/写入的数据,以便对其进行更快的访问。在这种情况下,经修改/写入的数据经由缓冲池扩展220存储在扩展页文件222中。
文件控制块218被配置为提供从缓冲池216指向缓冲池扩展220和/或(多个)数据文件228的读和写输入/输出(I/O)业务。
缓冲池扩展220可以在逻辑上附接到文件控制块218,以监测计算节点中的I/O业务,并且被配置为作为数据页的直写高速缓存来执行。在实施例中,扩展页文件222在逻辑上被划分为段,段可以包含多个数据页。在实施例中,每个段的数据页的数目可以是2的任何因数,并且段的大小可以针对不同实现或在不同实现中被配置和/或改变。因此,给定扩展页文件222中的偏移,可以直接计算它所属的段。
页表224可以将描述高速缓存在缓冲池扩展220和暂存缓冲区226中的数据页的元数据高速缓存或以其他方式存储在用于主数据库的存储器优化表中。页表224可以是完全成熟的表,其中对其完成的事务是原子的和持久的,在实施例中,这允许在缓冲池扩展220和暂存缓冲区226中进行页查找,这等效于页表224中的内存中索引查找。页表224也可以是持久的,并且因此,在服务器重新启动时,高速缓存的数据页的元数据不会丢失。通过使用存储器优化表来存储本文中的实施例的高速缓存数据页的元数据,访问和更新元数据的成本可以尽可能小,同时还提供元数据持久性。
本文中还设想,控制节点210、DQP 212和/或(多个)计算节点214中的一个或多个可以包括(多个)应用程序编程接口(API),以便访问/接收其中的信息、其间的信息和/或事务管理器节点的信息,以及执行诸如提交、中止等操作。
在本文中的实施例中提供了关于(多个)计算节点214的操作和配置的其他细节,包括在附图中示出的以及在其相关描述中讨论的那些细节。
图3示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的流程图300。至少基于以下描述,其他结构和操作示例对于相关领域的技术人员将是很清楚的。以下关于图2的系统200来描述流程图300。
流程图300开始于步骤302。在步骤302中,将与写入事务相关联的数据从缓冲池存储器提供给暂存缓冲存储器,并且在存储器处的数据结构中更新与写入事务相关联的表元数据。例如,如上所述,图2中的系统200的计算系统202被配置为执行将写入事务数据从缓冲池216复制到暂存缓冲区226,而不是立即将数据写入扩展页文件222。此外,针对写入事务更新页表224,以指示数据正在运行中或写入正在处理中。本文和附图中提供了关于这种性能的其他细节。
在步骤304中,将数据从暂存缓冲存储器写入扩展页文件,并且随后更新表元数据。例如,如上所述,在图2中的系统200的计算系统202中,暂存缓冲区226被启用并且被配置为将存储在其中的数据提供给扩展页文件222。此外,针对写入事务进一步更新页表224,以指示数据是有效的和/或可用的,即,对扩展页文件222的写入事务完成。本文和附图中提供了关于这种性能的其他细节。
现在将描述图4和图5。图4示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的流程图400。至少基于以下描述,其他结构和操作示例对于相关领域的技术人员将是很清楚的。流程图400可以是图3的流程图300的实施例,并且如以下关于图2的系统200所述。图5示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的流程图500。流程图500可以是图2和/或图4的实施例。
流程图400开始于步骤402。在步骤402中,将写入数据事务的数据存储在缓冲池存储器处。例如,如本文所述,图2的缓冲池216可以在其中存储对数据库的数据(例如,(多个)数据文件228的数据)执行的写入数据事务。写入数据事务可以用于新的写入、插入、更新等。参考图5的流程图500,在操作502中,文件控制块218可以接收对数据的写入请求的指示。(多个)计算节点214可以在上述将数据提供给暂存缓冲存储器之前,在缓冲池216中的数据页上放置锁。
当接收到写入请求时,将进行检查以确定数据页是否已经被高速缓存。如果是,则必须首先使数据页无效,以反映存在新版本的数据页。如果它不存在于页表224中,则创建新条目,并且相应状态列也被设置为“无效”。在这两种情况下,一旦对本地扩展页文件222的写入操作完成,状态列将再次设置为“有效”。
在步骤404中,在与缓冲池存储器相关联的数据结构中更新写入数据事务的状态以指示处理中状态。例如,还参考图5的流程图500,图2的文件控制块218和/或缓冲池扩展220可以确定在操作502中用于请求的数据将由(多个)计算节点214在本地存储。因此,为了伴随数据的本地存储,在操作504中,页表224应当被写入和/或更新以反映数据和数据写入事务的状态,因为暂存缓冲区226将在数据被提供给扩展页文件222之前首先接收并且预暂存数据。
在步骤406中,将数据从缓冲池存储器提供给暂存缓冲存储器以供其存储。例如,参考图5的流程图500,在操作506中,经由图2的文件控制块218,将数据提供给暂存缓冲区226,并且暂存缓冲区226在将数据写入扩展页文件222之前暂存数据。(多个)计算节点214可以确定向暂存缓冲区226提供数据已经完成,然后在确定存储条件已经满足之前基于该完成来释放锁,如下所述。
在步骤408中,确定暂存缓冲存储器的存储条件已经满足。例如,(多个)计算节点214可以经由缓冲池扩展220来确定暂存缓冲区226的一个或多个存储条件已经满足。在实施例中,存储条件可以是以下中的一项或多项:确定暂存缓冲区226已满,这也可以包括或引发确定用于接收后续写入数据事务的其他数据的暂存缓冲区226的另一实例和/或确定数据页已经在暂存缓冲区226中存储了预定的一段时间。
在步骤410中,至少基于存储条件将数据写入缓冲池扩展页文件以供其存储。例如,还参考图5的流程图500,流程图400的步骤408中的存储条件确定可以例如经由缓冲池扩展220促使将暂存缓冲区226中的数据写入扩展页文件222,如操作508中所示。在实施例中,在操作508中将数据写入扩展页文件222可以包括如上所述在向暂存缓冲区226提供数据之后在暂存缓冲区226处对数据进行加密。当读取数据时,可以随后在READ路径上对数据进行解密。
在步骤412中,在数据结构中以及在数据在缓冲池扩展页文件中的存储之后,更新针对写入数据事务的状态以指示完成状态和有效状态。例如,还参考图5的流程图500,当扩展页文件222接收到数据并且对其的数据写入完成时,如在操作508中,页表224被更新以在操作510中将写入事务的状态反映为“可用”和/或“有效”。在实施例中,如本文所述,写入扩展页文件222的数据由此被持久化,并且操作508可以是I/O操作。
在一些实施例中,并且在数据被提供给暂存缓冲区226和/或扩展页文件222之后,文件控制块218可以经由缓冲池216接收对数据的读取的请求。仍然参考图5和流程图500,在操作512中,可以确定暂存缓冲区226是否仍然存储数据。如果是,则可以在操作514中将数据返回到文件控制块218,并且随后在操作518中将数据提供给缓冲池216以完成事务。如果确定暂存缓冲区226不存储数据,则确定数据是否存在于扩展页文件222中,如果数据存在并且有效,则可以经由操作516并且然后经由操作518将其返回以完成读取事务。换言之,(多个)计算节点214被配置为接收指向数据的读取数据事务、确定数据的位置,并且至少基于数据位于暂存缓冲存储器中并且具有指示处理中状态的状态来从暂存缓冲存储器读取数据,或者至少基于数据位于扩展页文件中并且具有指示完成状态和有效状态的状态来从扩展页文件读取数据。
还应当注意,在执行操作508之前,可以随后执行操作506以更新暂存缓冲区226中的数据,其中经更新的数据被提供给暂存缓冲区226以“就地”存储/高速缓存。在实施例中,如果在将数据提供给扩展页文件222之后进行更新,则可能需要在暂存缓冲区226的不存储数据的先前版本的相同实例或另一实例处的新位置。
本文中的实施例还提供了在扩展页文件222的实例之间传输频繁使用的数据页。在一个示例中,可以确定扩展页文件222中存储的数据页的数目不满足或超过占用阈值,但是数据页被访问或更新的次数满足或超过访问阈值(即,数据页是“热的”或频繁使用的)。在这样的场景中,实施例允许在由缓冲池扩展220提供数据之前至少基于存储条件在无锁操作中将数据页提供给扩展页文件222的另一实例。
本文中的实施例还提供了用于数据页的不同逐出机制。在一个示例中,可以响应于将数据页提供给暂存缓冲区226或在将数据页提供给暂存缓冲区226之后将数据页从缓冲池216中逐出。因此,缓冲池216甚至在数据页被提供给缓冲池扩展220之前就减轻了维持数据页的负担。
此外,关于逐出,在页表224中找到的有效页可以被分配存储器中的易失性结构,例如“PageVolatile”指示符。该结构包括但不限于每当页被触摸时(例如,在缓冲池220中)被更新的时间戳。段对象还具有时间戳对象,每当与段相关联的页更新其相应时间戳时,该对象都会经由互锁的“最大”操作被更新。因此,段本身具有页组中最高的时间戳。这由逐出逻辑使用,该逐出逻辑在实施例中找到具有最低时间戳的段并且删除该段的页。当页与段相关联时,其段引用计数器递增。类似地,当页从段中被移除时,该计数器递减。这个过程最终使段引用计数器达到零,并且当计数器达到零时,段可以被移动到空闲段的列表中。
逐出逻辑还确定具有低占用率的段,并且可以删除这些段中的页以完全释放段。因为这些页中的一些可以被视为“热”,所以这些页可以被写回缓冲池的当前写入或暂存缓冲区中。在实施例中,这可以通过对与页键相关联的工作操作进行排队来执行,并且当工作操作被处理时,页在缓冲池中被搜索。如果找到,页将被插入缓冲池的当前写入或暂存缓冲区中。如果需要从低占用率段重新定位的页不在缓冲池中,则惰性读取页逻辑(例如,可以限制未完成读取次数的后台线程)将尝试将页读取到暂存缓冲区中,并且将其提交以写入当前写入/暂存缓冲区对象。
现在将在以上描述的上下文中参考彼此来描述图6和图7,该图6和图7中的每个用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入。图6示出了根据示例实施例的页表602A/602B和段对象604的数据结构600,并且图7示出了根据示例实施例的与数据结构600相对应的缓冲池的扩展页文件700的框图。至少基于以下描述,其他结构和操作示例对于相关领域的技术人员将是很清楚的。
在图6和数据结构600中,页表602A将数据库页键与图7的扩展页文件700中的字节偏移相关联,该数据库页键可以包括数据库标识符(ID)、文件ID和页ID。在引导时,段对象阵列被创建和初始化,并且页表602A被完全扫描。对于在页表602A中找到的具有“有效”状态的每个页,从其全局阵列中选择对应段,并且该页与其段相关联。如果页不处于“有效”状态,则该页从页表602A中被删除,如页表602B中所反映的。
在该过程结束时,有一组段正在使用,另一组段为“空闲”或“空”。未使用的段被添加到空/空闲段的列表中,例如作为链表。
在图6和图7所示的示例中,对于DB ID为“5”并且文件ID为“1”的数据库,在页表602A中有四个数据页。页键为{5,1,0x2}的数据页为“无效”,因此将在引导过程中被删除。DB ID为“5”并且文件ID为“1”的其他三个数据页与两个不同段:段0和段2相关联。在实施例中,每个段对象具有页键阵列和引用计数,该引用计数将被更新,如段对象604所示。也就是说,段ID“0”已经标识其单个数据页,并且对应引用计数为“1”;段ID“1”没有数据页(其唯一数据页为“无效”,并且因此被删除),并且对应引用计数为“0”;段ID“2”已经标识两个数据页,并且对应引用计数为“2”;段ID“3”没有标识任何数据页并且对应引用计数为“0”。
这进一步反映在图7和扩展页文件700中,该扩展页文件示出了存在单个数据页的段ID“0”、具有现已删除的数据页(用“X”示出)并且为空闲或空的段ID“1”、存在两个数据页的段ID“2”,以及没有数据页并且为空闲或空的段ID“3”。
现在转到图8,示出了根据示例实施例的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的系统800的框图。示例性示出和描述的系统800被配置为图2中的系统200的实施例。也就是说,系统800被示出为被配置为至少基于本文中描述的技术来执行数据库系统、数据仓库等的操作。系统800还继续图6和图7中所阐述的示例(其中页表806是图6的页表602B的实施例),并且描述如下。
系统800被示出为包括缓冲池216和暂存缓冲区226,如以上关于图2所述。在系统800的上下文中,当缓冲池216需要刷新其中维护的脏页802时,缓冲池216可以在与对应数据库和数据文件相关联的文件控制块218(未示出)的对象下调用缓冲池扩展220的写入功能。缓冲池扩展220将在当前空闲段对象中找到先前从空段列表中获取的空闲偏移,并且确定页表中是否存在该页。如果是,则页被标记为“运行中”或“处理中”,但如果不是,则页将插入“运行中”或“处理中”状态。在这两种情况下,页被分配给新偏移,并且在暂存缓冲区226中被复制到其新偏移的对应位置。新偏移可以基于与暂存缓冲区226相关联的段对象来计算。扩展页文件222可以被划分为相等部分,例如,每个部分映射到一个段,并且因此,在使用中或空闲中的每个段在扩展页文件222中具有已知偏移。在该段内,页偏移可以由段的偏移加上页在暂存缓冲区226内的位置来确定。
系统800示出了缓冲池216中的三个脏页802被写入缓冲池扩展220。脏页802被复制到由缓冲池216的暂存缓冲对象的实例维护的临时/写入缓冲区中,例如暂存缓冲区226。暂存缓冲区226与从空/空闲段列表中获取的段对象804相关联(这里段1在空段的列表的开头)。当脏页802被复制到暂存缓冲区226时,它们也与段对象804相关联。引用计数器对于每个页递增,并且一个额外临时引用属于暂存缓冲区226的对象。
在系统800中,脏页802中的一个已经存在于页表806中:页键{5,1,0x4}。该页先前在页文件中的位置0x2'2000处具有偏移,其对应于图7中的段2。图7中的段2具有与其相关联的两个页,然而,由于更新,图7中的段2将丢失一个页和一个引用计数。一旦段2的引用计数为零,其对象将被推到空段列表中。
如果暂存缓冲区226变满,则可以分配一个新的实例作为当前写入/暂存缓冲区,并且可以如本文所述,例如经由暂存缓冲区226将完整/满的缓冲区写入缓冲池扩展220。在经由暂存缓冲区226完成对扩展页文件222的写入操作之后,新事务将在页表806中将缓冲区中的对应脏页802的状态从“运行中”或“处理中”改变为“有效”。
III.示例计算设备实施例
本文中描述的实施例可以在硬件或与软件和/或固件相结合的硬件中实现。例如,本文中描述的实施例可以被实现为被配置为在一个或多个处理器中执行并且存储在计算机可读存储介质中的计算机程序代码/指令。备选地,本文中描述的实施例可以被实现为硬件逻辑/电路系统。
如本文所述,所描述的实施例(包括但不限于图1中的系统100、图2中的系统200和图8中的系统800,以及其任何组件和/或子组件,以及本文中描述的任何数据结构、操作和流程图/流程图的部分,和/或本文中描述的其他示例)可以在硬件或具有软件和/或固件的任何组合的硬件中实现,包括被实现为被配置为在一个或多个处理器中执行并且存储在计算机可读存储介质中的计算机程序代码,或者被实现为硬件逻辑/电路系统,诸如一起在片上系统(SoC)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可信平台模块(TPM)等中实现。SoC可以包括集成电路芯片,该集成电路芯片包括处理器(例如,微控制器、微处理器、数字信号处理器(DSP)等)、存储器、一个或多个通信接口、和/或用于执行其功能的其他电路和/或嵌入式固件中的一个或多个。
本文中描述的实施例可以在一个或多个计算设备中实现,该一个或多个计算设备类似于固定或移动计算机实施例中的移动系统和/或计算设备,包括本文所述的移动系统和/或计算设备的一个或多个特征,以及备选的特征。本文中提供的对计算设备的描述是为了说明的目的而提供的,并不旨在限制。实施例可以在其他类型的计算机系统中实现,如相关领域的技术人员所知。
图9描绘了可以在其中实现实施例的计算设备900的示例性实现。例如,本文中描述的实施例可以在类似于计算设备900的一个或多个计算设备或系统中实现,或者在固定或移动计算机实施例中在计算设备900的多个实例中实现,包括计算设备900的一个或多个特征和/或备选的特征。本文中提供的对计算设备900的描述是为了说明的目的而提供的,不旨在限制。实施例可以在其他类型的计算机系统、服务器和/或集群等中实现,如相关领域的技术人员所知。
如图9所示,计算设备900包括一个或多个处理器(称为处理器电路902)、系统存储器904和总线906,该总线将包括系统存储器904在内的各种系统组件耦合到处理器电路902。处理器电路902是作为中央处理单元(CPU)、微控制器、微处理器和/或其他物理硬件处理器电路在一个或多个物理硬件电路器件元件和/或集成电路器件(半导体材料芯片或管芯)中实现的电和/或光电路。处理器电路902可以执行存储在计算机可读介质中的程序代码,诸如操作系统930、应用程序932、其他程序934等的程序代码。总线906表示若干类型的总线结构中的任何一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及使用各种总线架构中的任何一种的处理器或本地总线。系统存储器904包括只读存储器(ROM)908和随机存取存储器(RAM)910。基本输入/输出系统912(BIOS)被存储在ROM 908中。
计算设备900还具有以下驱动器中的一个或多个:用于从硬盘读取和向其写入的硬盘驱动器914、用于从可移动磁盘918读取或向其写入的磁盘驱动器916,以及用于从诸如CD ROM、DVD ROM或其他光学介质等可移动光盘922读取或向其写入的光盘驱动器920。硬盘驱动器914、磁盘驱动器916和光盘驱动器920分别通过硬盘驱动器接口924、磁盘驱动器接口926和光盘驱动器接口928连接到总线906。驱动器及其相关联的计算机可读介质为计算机提供计算机可读指令、数据结构、程序模块和其他数据的非易失性存储。尽管描述了硬盘、可移动磁盘和可移动光盘,但是可以使用其他类型的基于硬件的计算机可读存储介质来存储数据,诸如闪存卡、数字视频盘、RAM、ROM和其他硬件存储介质。
很多程序模块可以存储在硬盘、磁盘、光盘、ROM或RAM上。这些程序包括操作系统930、一个或多个应用程序932、其他程序934和程序数据936。应用程序932或其他程序934可以包括例如用于实现本文中描述的实施例的计算机程序逻辑(例如,计算机程序代码或指令),诸如但不限于图1中的系统100、图2中的系统200和图8中的系统800,以及其任何组件和/或子组件,以及本文中描述的流程图/流程图的任何数据结构和操作(包括其部分),和/或本文中描述的其他示例。
用户可以通过诸如键盘938和定点设备940等输入设备将命令和信息输入到计算设备900中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏板、碟形卫星天线、扫描仪、触摸屏和/或触摸板、用于接收语音输入的语音识别系统、用于接收手势输入的手势识别系统等。这些和其他输入设备通常通过耦合到总线906的串行端口接口942连接到处理器电路902,但也可以通过其他接口连接,诸如并行端口、游戏端口或通用串行总线(USB)。
显示屏944也经由诸如视频适配器946等接口连接到总线906。显示屏944可以在计算设备900外部,或者被并入计算设备900中。显示屏944可以显示信息,并且是用于接收用户命令和/或其他信息(例如,通过触摸、手指手势、虚拟键盘等)的用户接口。除了显示屏944之外,计算设备900还可以包括其他外围输出设备(未示出),诸如扬声器和打印机。
计算设备900通过适配器或网络接口950、调制解调器952、或用于在网络上建立通信的其他部件连接到网络948(例如,互联网)。调制解调器952可以是内部的或外部的,可以经由串行端口接口942连接到总线906,如图9所示,或者可以使用包括并行接口在内的另一接口类型连接到总线906。
TPM 954可以连接到总线906,并且可以是任何TPM的实施例,如受益于本公开的相关领域的技术人员所理解的。例如,TPM 954可以被配置为执行用于本文中的各种实施例的TPM的一个或多个功能或操作。
如本文中使用的,术语“计算机程序介质”、“计算机可读介质”、“计算机可读存储介质”和“计算机可读存储设备”等用于指代物理硬件介质。这样的物理硬件介质的示例包括与硬盘驱动器914相关联的硬盘、可移动磁盘918、可移动光盘922、其他物理硬件介质(诸如RAM、ROM、闪存卡、数字视频盘、zip盘、MEM、基于纳米技术的存储设备),以及其他类型的物理/有形硬件存储介质(包括图9的存储器920)。这样的计算机可读介质和/或存储介质与通信介质和传播信号不同并且不重叠(不包括通信介质和传输信号)。通信介质在诸如载波等调制数据信号中体现计算机可读指令、数据结构、程序模块或其他数据。术语“调制数据信号”是指以在信号中对信息进行编码的方式设置或改变其一个或多个特性的信号。作为示例而非限制,通信介质包括无线介质(诸如声学、RF、红外和其他无线介质),以及有线介质。实施例还针对这样的通信介质,其与针对计算机可读存储介质的实施例不同并且不重叠。
如上所述,计算机程序和模块(包括应用程序932和其他程序934)可以存储在硬盘、磁盘、光盘、ROM、RAM或其他硬件存储介质上。这样的计算机程序也可以经由网络接口950、串行端口接口942或任何其他接口类型来接收。当由应用执行或加载时,这样的计算机程序使得计算设备900能够实现本文中讨论的实施例的特征。因此,这样的计算机程序表示计算设备900的控制器。
实施例还涉及包括存储在任何计算机可读介质或计算机可读存储介质上的计算机代码或指令的计算机程序产品。这样的计算机程序产品包括硬盘驱动器、光盘驱动器、存储器设备包、便携式记忆棒、存储卡和其他类型的物理存储硬件。
IV.附加示例和优点
如所描述的,体现本文中的技术的系统和设备可以以各种方式被配置和启用以执行其相应的用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的功能。在实施例中,本文中描述的任何流程图和/或流程图的一个或多个步骤或操作可以不执行。此外,除了或代替本文中描述的任何流程图和/或流程图表中的步骤或操作之外,可以执行其他步骤或操作。此外,在示例中,本文中描述的任何流程图和/或流程图表的一个或多个操作可以无序地、以备选的顺序,或者部分地(或完全地)彼此并行地或与其他操作并行地执行。
如本文所述,被配置为执行功能和/或操作的实施例的系统、设备、组件等也被设想为执行这样的功能和/或操作。
本文中的实施例使得计算节点数据库系统、数据仓库等能够避免通过使用暂存缓冲区将数据页从缓冲池刷新到永久存储。系统的存储节点在消耗由主计算节点生成的事务日志时执行对永久存储的写入。本文中描述的独特实施例允许在计算节点中本地写入数据页,而不会给工作负载带来负担,这为系统提供了显著的性能优势。因此,计算节点可以维护和利用弹性高速缓存,而无需按照系统资源、性能和效率为其使用付费。
本文中的实施例中的暂存缓冲区表示多个页的未完成缓冲区,从页累积在暂存缓冲区中的点开始跟踪页,然后将收集的页作为一个写入操作写入缓冲池扩展和扩展页文件。此外,实施例提供了在这些页完成时在页表中为这些页设置正确的元数据,并且当暂存缓冲区为空时,将它们的对象返回到空段的列表中以重复用于后续写入事务。在暂存缓冲区对象的生存期内,可以满足将页读取和写入暂存缓冲区的请求。例如,在缓冲池将页刷新到当前暂存缓冲实例中之后,缓冲池可以逐出该页。稍后,可能会再次需要该页,并且如果该页尚未写入磁盘,则它仍保留在暂存缓冲区中,等待写入或完成其处理,并且因此可以从那里被更新或读取。这样的读取可以经由获取暂存缓冲区中的页的额外引用计数来启用,以防止页被释放并且读出该页。该机制本质上操作读取文件操作,并且可以调用由上面的层实现的读取文件操作的完成回调函数。暂存缓冲区还跟踪用于填充其中的页的所有工作项对象。在事务成功完成之后,将释放被跟踪的工作项,从而触发相应完成回调函数。
以下描述提供了根据启用缓冲池扩展的实施例的可以用于写入和读取页的示例性SQL算法。还描述了用于在缓冲池扩展中高速缓存干净页的示例算法和用于逐出冷页的示例策略。以下描述本质上是通过示例的方式提供的示例性和说明性的,并且不被认为是限制性的。
实施例可以利用两个基本API来写入由文件控制块(例如,FCB对象)管理的文件,“FCB::AsyncWrite”和“FCB::GatherWrite”。所有其他API(例如,FCB::SyncWrite、FCB::WriteMisaligned等)都构建在这两个API之上。AsyncWrite用于将单个内存中缓冲区以调用方指定的偏移写入文件,而GatherWrite用于将多个内存中缓冲区以指定偏移写入文件的连续部分。这些API在内部使用FCBIoRequest对象向SQL OS发出执行对数据文件的异步写入的请求。这些API的调用方确保在调用它们之前,正在写入的页的缓冲区被正确地锁存。锁存仅在I/O完成时释放。
以下工作流程描述了当使用暂存缓冲区时(例如,在非覆盖段模式下)“WriteFile”到RBPEX的代码路径:
1.调用“RBPEXImpl::AsyncWrite”或
“RBPEXImpl::GatherWrite”,通常是从缓冲池刷新脏页机制,如检查点或惰性写入器。
2.在非覆盖段模式下,将从RBPEX“AsyncWrite”或
“GatherWrite”函数调用
“RBPEXImpl::QueueSegmentModeWorkItems”函数。它为正在写入的每个页创建类型为“rbpeWriteFile”的“RbpexWorkItem”
对象,并且使用“RBPEXImpl::PushWorkItemInSegmentMode”函数将它们入队到专用的完成端口句柄(参见
“m_segmentModeHost”的“m_completionPort”成员变量)中。
3.工作线程处理经由“PushWorkItemInSegmentMode”函数排队的“RbpexWorkItem”对象。线程数是可配置的,并且应当至少为2。“WorkerThread”函数将经由
“CollectWorkItemFromCompletionPort”函数将“RbpexWorkItem”
对象从“m_completionPort”中出队。这将拾取“rbpeOnLruRefresh”
和“rbpeWriteFile”类型的项,并且在函数
“WorkItemToProcess::ProcessWorkItem”中处理它们。
4.“NonCoveredRbpexSegmentModeHost::WorkerThread”在一个事务中处理若干“RbpexWorkItem”。但首先,它需要在
“m_currentWriteBuffer”指针中具有当前“RbpexWriteBuffer”
实例。这是由函数“StartNewWriteBufferOrResumePendingOne”设置的。该函数还启动事务(参见“RbpexWriteBuffer::StartTransaction”),并且通过经由“GetFreeSegmentLocator”函数获取可用的“SegmentLocator”对象来将写入缓冲区与空闲段定位器相关联。
5.段定位器指向RBPEX页文件中的物理偏移。它保存一定数量的页,并且“SegmentLocator”对象跟踪“PageTableRow”表中引用每个段定位器的行数。
6.“rbpeOnLruRefresh”类型的项包括页键(例如,:数据库ID、文件ID和页ID),并且因此需要将页搜索到缓冲池中,然后锁存页。如果页已经存在于“PageTableRow”RBPEX表中,则更新其在易失性信息结构中的时间戳。如果它不存在,则创建一个条目,并且将页8k缓冲区复制到“m_currentWriteBuffer”指针的下一可用插槽中。页必须干净(不脏)。当缓冲池驱赶脏页时,脏页将进入RBPEX。
7.“rbpeWriteFile”类型的项已经指向页数据。调用方是保存锁存器的一方。如果“PageTableRow”RBPEX表中不存在该页,则创建一个条目,该条目将指向新的易失性信息结构,该结构指向当前“m_currentWriteBuffer”指针的当前段定位器。
8.如果页已经存在,那么它指向易失性信息结构,该结构指向段定位器,可能与当前写入缓冲区对象使用的定位器不同。在这种情况下,会为“PageTableRow”条目的新版本分配另一易失性信息结构,该条目将指向当前“m_currentWriteBuffer”指针的当前段定位器。实际上,页的新版本将被写入文件的新位置。旧行将被垃圾收集,从而释放旧的易失性信息结构,该信息结构本身将释放旧段定位器上的页引用(参见“SegmentLocator::m_referenceCount”)。当它达到零时,“SegmentLocator”对象将入队到“m_fullyEmptySegments”中以进行重用。例如,参见“SegmentLocator::ReleaseRefCount”。单个逻辑页(例如,具有相同“pageId”)在“PageTableRow”表中有三个不同行,表示该逻辑页的三个版本。两个版本可以指代相同偏移,例如0x1000,第三版本可以指代不同偏移,例如0x2000。为了示例性描述,逻辑页的不同版本称为Page1、Page1'(Page1(素数))和Page1”(Page1)(双素数))。
Page1”版本是最新版本,而其他两个版本预计将由数据库系统进行垃圾收集。由于“PageTableRow”行被垃圾收集,因此会调用“pageTableFreeRowResources”回调,当页易失性引用计数达到零时,该回调会调用“PageVolatile::Release”,然后调用“PageVolatile::ReleaseResources”。后者将调用“RBPEXImpl::ReleasePageWithinSegmentLocator”,这将减少该段定位器内的页引用计数(“m_referenceCount”)。
继续上面的工作流程:
9.当页数据被复制到当前“RbpexWriteBuffer”(参见“m_currentWriteBuffer”)时,“PageTableRow”中的页的对应状态将改变为“psInFlight”。在段模式中,“psInFlight”状态用于“rbpeOnLruRefresh”和“rbpeWriteFile”两者,并且表示页已经停在“RbpexWriteBuffer”实例中,等待其填满,然后写入磁盘。只有在后一步骤完成时,它才会改变为“psValid”。
10.通过直接从“RbpexWriteBuffer”对象读取页,可以满足查找处于“psInFlight”状态的页的读取操作。这种情况发生在函数“RBPEXImpl::PopulateReadPageInfo”处,该函数将使用处于“psInFlight”状态的页的页易失性“Offset”字段来调用“RBPEXImpl::GetWriteBufferFromOffset”。该函数可以安全地找到与该偏移相对应的未完成的“RbpexWriteBuffer”指针,并且返回稳定的指针,添加引用,以供“AsyncRead”操作使用。“RbpexWriteBuffer”指针很容易找到,因为它在写入缓冲区运行时与对应的“SegmentLocator”对象相关联。
11.一旦当前写入缓冲区对象(RbpexWriteBuffer)已满或没有更多的工作项要处理,则提交当前事务。这是通过调用“RbpexWriteBuffer::CommitTransaction”来进行的。在提交完成之后,将调用“onTransactionComplete”回调,该回调调用“RbpexWriteBuffer::CommitPreparedTransaction”。后者将向上移动“m_pageCountSealed”,表示写入缓冲区中稳定的页数量,并且如有必要,可以经由“RBPEXImpl::AsyncRead”从中读取。它还将释放对应的“RbpexWorkItem”对象,这将导致顶部的层释放锁存器,并且甚至从缓冲池中逐出对应页。
12.上面的提交过程可以是急切的,也可以是惰性的。当至少有一个受影响的页处于“psValid”状态时,它是急切的。这表示,只有在事务的对应日志记录在存储(例如,SSD)中硬化之后,才会传送上面的层。注意,在等待硬化时,工作线程不会阻塞。这将阻止其有效处理未完成的“RbpexWorkItem”。如果需要急切提交,则使用“tpAsynchronous”选项调用“HkTransactionPrepare”,并且将惰性提交设置为“false”。在该配置中,只有在日志硬化之后才会调用“onTransactionComplete”。但这需要一些帮助才能实现,如本文所述:
a.“onCreateLogRecord”回调被设置为在日志一序列化就调用。
有关详细信息,可以参见“RbpexWriteBuffer::CommitTransaction”。由于在这一点上,事务不再有逻辑失败的可能性,并且因此可以释放到这一点为止获取的任何锁存器。
b.在异步模式下,系统不会尝试自己刷新日志。因此,在段模式下启动新线程来进行该刷新:NonCoveredRbpexSegmentModeHost::FlushThreadFn。“onCreateLogRecord”回调知道正在提交的事务的新“lastLSN”。它使用对“IcxMax”的原子操作并且读取它,经由成员变量“NonCoveredRbpexSegmentModeHost::m_lsn”将该信息传播到“FlushThreadFn”。然后,它将写入缓冲区对象入队到“m_writeBuffersWaitingHardening”中以等待硬化。
c.“NonCoveredRbpexSegmentModeHost::FlushThreadFn”将使用增加的“m_lsn”作为指导来硬化日志。然后,它将查找在“m_writeBuffersWaitingHardening”中等待的所有日志序列号(LSN)小于当前刷新的LSN的写入缓冲区对象,并且对与写入缓冲区相关联的事务调用“HkTransactionLogWriteCompletion”。这将最终调用“onTransactionComplete”回调。
13.返回从“onTransactionComplete”回调调用的“RbpexWriteBuffer::CommitPreparedTransaction”;在完成提交、释放工作项并且通知调用方之后,从技术上读取写入缓冲区以将其写入RBPEX文件。这是经由对“RbpexWriteBuffer::StartWriteFileOperationIfComplete”的调用来完成的。但该函数可能会决定缓冲区未满,并且现在进行写入还为时过早。在这种情况下,它会将“RbpexWriteBuffer”对象放在“m_rbpexWriteBufferPendingList”列表中,该列表由“StartNewWriteBufferOrResumePendingOne”(参见上面的第4项)用于获取新的空写入缓冲区或挂起的写入缓冲区。
14.如果“StartWriteFileOperationIfComplete”决定是时候将缓冲区写入存储了,那么它会将“RbpexWriteBuffer”对象入队到“m_writeBuffersWaitingWriting”列表中。这将被另一段模式线程消耗:NonCoveredRbpexSegmentModeHost::WriteFileThreadFn。该线程为该列表中找到的每个写入缓冲区调用“RbpeFCB::AsyncWrite”。在写入操作完成之后,将为每个“RbpexWriteBuffer”对象调用“onWriteBufferComplete”回调。
15.“onWriteBufferComplete”回调将调用“markPageAsValidAfterWriteCompletion”,它将执行另一事务,以将所有涉及的页行移动到“psValid”状态,或者在其被逐出例程标记时将其删除 ( 参见“ RBPEXImpl::DeleteRowsFromSegment” ) 。
“markPageAsValidAfterWriteCompletion”支持经由
“onWriteBufferCompleteTxComplete”提交完成回调而进行的重试。
16.“onWriteBufferCompleteTxComplete”是当
“markPageAsValidAfterWriteCompletion”使用的事务提交时调用的最后回调。最后一步将执行一些清理活动,并且使用正确的信息更新行页易失性对象。最后,“RbpexWriteBuffer”将被释放以供重用。
本节中描述的附加示例和实施例可以适用于本公开的任何其他章节或小节中公开的示例。
本说明书中的实施例提供了用于经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入的系统、设备和方法。例如,本文中描述了这样的系统。该系统包括存储程序代码的程序存储器,以及处理系统,该处理系统包括一个或多个处理器,该处理器被配置为从程序存储器接收程序代码,并且至少响应于接收到程序代码而执行功能和/或操作或者引起功能和/或操作被执行。这些功能和/或操作包括:将写入数据事务的数据存储在缓冲池存储器处、在与缓冲池存储器相关联的数据结构中更新写入数据事务的状态以指示处理中状态、将数据从缓冲池存储器提供给暂存缓冲存储器从而以供存储、确定暂存缓冲存储器的存储条件已经满足、至少基于存储条件将数据写入缓冲池扩展页文件从而以供存储,并且在数据结构中以及在数据在缓冲池扩展页文件中的存储之后,更新针对写入数据事务的状态以指示完成状态和有效状态。
在该系统的实施例中,数据是数据页,并且处理系统被配置为至少响应于接收到程序代码以在上述将数据提供给暂存缓冲存储器之前,在缓冲池存储器中的数据页上放置锁、确定上述将数据提供给暂存缓冲存储器已经完成,并且在上述确定存储条件已经满足之前基于完成释放锁。
在该系统的实施例中,处理系统被配置为至少响应于接收到程序代码以在上述将数据提供给暂存缓冲存储器之后在暂存缓冲存储器处对数据进行加密。
在该系统的实施例中,处理系统被配置为至少响应于接收到程序代码而执行以下中的至少一项:接收指向数据的读取数据事务、确定数据的位置,并且至少基于数据位于暂存缓冲存储器中并且具有指示处理中状态的状态,从暂存缓冲存储器读取数据,或者至少基于数据位于缓冲池扩展页文件中并且具有指示完成状态和有效状态的状态,从缓冲池页文件存储器读取数据;或者将后续写入数据事务的数据的更新版本存储在缓冲池存储器处,并且将经更新的数据提供给不存储数据的暂存缓冲存储器的实例。
在该系统的实施例中,数据是数据页,暂存缓冲存储器包括暂存缓冲存储器的第一实例,并且确定暂存缓冲存储器的存储条件已经满足包括以下中的至少一项:确定暂存缓冲存储器已满,并且确定用于接收后续写入数据事务的其他数据的暂存缓冲存储器的另一实例,或者确定数据页已经在暂存缓冲存储器中存储了预定的一段时间。
在该系统的实施例中,数据是数据页,并且暂存缓冲存储器包括暂存缓冲存储器的第一实例。在该实施例中,处理系统被配置为至少响应于接收到程序代码,以:在上述将数据提供给缓冲池扩展页文件之前,至少基于存储条件在无锁操作中将数据页提供给暂存缓冲存储器的另一实例。
在该系统的一个实施例中,处理系统被配置为至少响应于接收到程序代码,以响应于将数据提供给暂存缓冲存储器或在上述将数据提供给暂存缓冲存储器之后从缓冲池存储器中逐出数据。
本文中还包括一种由计算系统执行的方法。该方法包括将写入数据事务的数据存储在缓冲池存储器处、在与缓冲池存储器相关联的数据结构中更新写入数据事务的状态以指示处理中状态、将数据从缓冲池存储器提供给暂存缓冲存储器从而以供存储、确定暂存缓冲存储器的存储条件已经满足、至少基于存储条件将数据写入缓冲池扩展页文件从而以供存储,以及在数据结构中以及在数据在缓冲池扩展页文件中的存储之后,更新针对写入数据事务的状态以指示完成状态和有效状态。
在该方法的实施例中,数据是数据页,并且该方法还包括在上述将数据提供给暂存缓冲存储器之前,在缓冲池存储器中的数据页上放置锁、确定上述将数据提供给暂存缓冲存储器已经完成,以及在上述确定存储条件已经满足之前基于完成释放锁。
在实施例中,该方法还包括在上述将数据提供给暂存缓冲存储器之后在暂存缓冲存储器处对数据进行加密。
在实施例中,该方法还包括以下中的至少一项:接收指向数据的读取数据事务、确定数据的位置,并且至少基于数据位于暂存缓冲存储器中并且具有指示处理中状态的状态,从暂存缓冲存储器读取数据,或者至少基于数据位于缓冲池扩展页文件中并且具有指示完成状态和有效状态的状态,从缓冲池扩展页文件读取数据;或者将后续写入数据事务的数据的更新版本存储在缓冲池存储器处,并且将经更新的数据提供给不存储数据的暂存缓冲存储器的实例。
在该方法的实施例中,数据是数据页,暂存缓冲存储器包括暂存缓冲存储器的第一实例,确定暂存缓冲存储器的存储条件已经满足包括以下中的至少一项:确定暂存缓冲存储器已满,并且确定用于接收后续写入数据事务的其他数据的暂存缓冲存储器的另一实例,或者确定数据页已经在暂存缓冲存储器中存储了预定的一段时间。
在该方法的实施例中,数据是数据页,并且暂存缓冲存储器包括暂存缓冲存储器的第一实例。在该实施例中,该方法还包括在上述将数据写入缓冲池扩展页文件之前,至少基于存储条件在无锁操作中将数据页提供给暂存缓冲存储器的另一实例。
在实施例中,该方法还包括响应于上述将数据提供给暂存缓冲存储器或在上述将数据提供给暂存缓冲存储器之后从缓冲池存储器中逐出数据。
还提供了至少一种计算机可读存储介质,其上记录有程序代码,该程序代码在由至少一个处理系统执行时,执行方法。该方法包括将写入数据事务的数据存储在缓冲池存储器处、在与缓冲池存储器相关联的数据结构中更新写入数据事务的状态以指示处理中状态、将数据从缓冲池存储器提供给暂存缓冲存储器从而以供存储、确定暂存缓冲存储器的存储条件已经满足、至少基于存储条件将数据写入缓冲池扩展页文件从而以供存储,以及在数据结构中以及在数据在缓冲池扩展页文件中的存储之后,更新针对写入数据事务的状态以指示完成状态和有效状态。
在至少一种计算机可读存储介质的实施例中,数据是数据页,并且该方法还包括在上述将数据提供给暂存缓冲存储器之前,在缓冲池存储器中的数据页上放置锁、确定上述将数据提供给暂存缓冲存储器已经完成,以及在上述确定存储条件已经满足之前基于完成释放锁。
在至少一种计算机可读存储介质的实施例中,该方法还包括在上述将数据提供给暂存缓冲存储器之后在暂存缓冲存储器处对数据进行加密。
在至少一种计算机可读存储介质的实施例中,该方法还包括以下中的至少一项:接收指向数据的读取数据事务、确定数据的位置,并且至少基于数据位于暂存缓冲存储器中并且具有指示处理中状态的状态,从暂存缓冲存储器读取数据,或者至少基于数据位于缓冲池扩展页文件中并且具有指示完成状态和有效状态的状态,从缓冲池扩展页文件读取数据;或者将后续写入数据事务的数据的更新版本存储在缓冲池存储器处,并且将经更新的数据提供给不存储数据的暂存缓冲存储器的实例。
在至少一种计算机可读存储介质的实施例中,数据是数据页,暂存缓冲存储器包括暂存缓冲存储器的第一实例,并且确定暂存缓冲存储器的存储条件已经满足包括以下中的至少一项:确定暂存缓冲存储器已满,并且确定用于接收后续写入数据事务的其他数据的暂存缓冲存储器的另一实例,或者确定数据页已经在暂存缓冲存储器中存储了预定的一段时间。
在至少一种计算机可读存储介质的实施例中,该方法还包括响应于上述将数据提供给暂存缓冲存储器或在上述将数据提供给暂存缓冲存储器之后从缓冲池存储器中逐出数据;或者数据是数据页,暂存缓冲存储器包括暂存缓冲存储器的第一实例,并且该方法还包括在上述将数据写入缓冲池扩展页文件之前,至少基于存储条件在无锁操作中将数据页提供给暂存缓冲存储器的另一实例。
V.结论
尽管以上已经描述了所公开主题的各种实施例,但是应当理解,它们仅通过示例而非限制的方式来呈现。相关领域的技术人员将理解,在不脱离所附权利要求中限定的实施例的精神和范围的情况下,可以对其形式和细节进行各种改变。因此,所公开的主题的广度和范围不应受到任何上述示例性实施例的限制,而应仅根据以下权利要求及其等同物来限定。

Claims (15)

1.一种系统,包括:
存储程序代码的程序存储器;以及
处理系统,所述处理系统包括一个或多个处理器,所述一个或多个处理器被配置为从所述程序存储器接收所述程序代码,并且至少响应于接收到所述程序代码,以:
将写入数据事务的数据存储在缓冲池存储器处;
在与所述缓冲池存储器相关联的数据结构中,更新针对所述写入数据事务的状态以指示处理中状态;
将所述数据从所述缓冲池存储器提供给暂存缓冲存储器从而以供存储;
确定针对所述暂存缓冲存储器的存储条件已经满足;
至少基于所述存储条件将所述数据写入缓冲池扩展页文件从而以供存储;以及
在所述数据结构中以及在所述数据在所述缓冲池扩展页文件中的存储之后,更新针对所述写入数据事务的所述状态以指示完成状态和有效状态。
2.根据权利要求1所述的系统,其中所述数据是数据页;以及
其中所述处理系统被配置为至少响应于接收到所述程序代码,以:
在将所述数据提供给所述暂存缓冲存储器之前,在所述缓冲池存储器中的所述数据页上放置锁;
确定将所述数据提供给所述暂存缓冲存储器已经完成;以及
在所述确定所述存储条件已经满足之前基于所述完成释放所述锁。
3.根据权利要求1所述的系统,其中所述处理系统被配置为至少响应于接收到所述程序代码,以:
在所述将所述数据提供给所述暂存缓冲存储器之后在所述暂存缓冲存储器处对所述数据进行加密。
4.根据权利要求1所述的系统,其中所述处理系统被配置为至少响应于接收到所述程序代码以执行以下中的至少一项:
接收指向所述数据的读取数据事务,
确定所述数据的位置,以及
从以下读取所述数据:
至少基于所述数据位于所述暂存缓冲存储器中并且具有指示所述处理中状态的所述状态的所述暂存缓冲存储器,或者
至少基于所述数据位于所述缓冲池扩展页文件中并且具有指示所述完成状态和所述有效状态的所述状态的所述缓冲池扩展页文件;
或者
将针对后续写入数据事务的所述数据的更新版本存储在所述缓冲池存储器处,以及
将所述经更新的数据提供给不存储所述数据的所述暂存缓冲存储器的实例。
5.根据权利要求1所述的系统,其中所述数据是数据页;
其中所述暂存缓冲存储器包括所述暂存缓冲存储器的第一实例;以及
其中所述确定针对所述暂存缓冲存储器的所述存储条件已经满足包括以下中的至少一项:
确定所述暂存缓冲存储器已满,并且确定用于接收后续写入数据事务的其他数据的所述暂存缓冲存储器的另一实例;或者
确定所述数据页已经在所述暂存缓冲存储器中存储了预定的一段时间。
6.根据权利要求1所述的系统,其中所述数据是数据页;
其中所述暂存缓冲存储器包括所述暂存缓冲存储器的第一实例;以及
其中所述处理系统被配置为至少响应于接收到所述程序代码,以:
在所述将所述数据提供给所述缓冲池扩展页文件之前,至少基于所述存储条件在无锁操作中将所述数据页提供给暂存缓冲存储器的另一实例。
7.根据权利要求1所述的系统,其中所述处理系统被配置为至少响应于接收到所述程序代码,以:
响应于将所述数据提供给所述暂存缓冲存储器或在将所述数据提供给所述暂存缓冲存储器之后,从所述缓冲池存储器中逐出所述数据。
8.一种由计算系统执行的方法,所述方法包括:
将写入数据事务的数据存储在缓冲池存储器处;
在与所述缓冲池存储器相关联的数据结构中,更新针对所述写入数据事务的状态以指示处理中状态;
将所述数据从所述缓冲池存储器提供给暂存缓冲存储器从而以供存储;
确定针对所述暂存缓冲存储器的存储条件已经满足;
至少基于所述存储条件,将所述数据写入缓冲池扩展页文件从而以供存储;以及
在所述数据结构中以及在所述数据在所述缓冲池扩展页文件中的存储之后,更新针对所述写入数据事务的所述状态以指示完成状态和有效状态。
9.根据权利要求8所述的方法,其中所述数据是数据页;
所述方法还包括:
在将所述数据提供给所述暂存缓冲存储器之前,在所述缓冲池存储器中的所述数据页上放置锁;
确定将所述数据提供给所述暂存缓冲存储器已经完成;以及
在确定所述存储条件已经满足之前基于所述完成释放所述锁。
10.根据权利要求8所述的方法,还包括:
在将所述数据提供给所述暂存缓冲存储器之后在所述暂存缓冲存储器处对所述数据进行加密。
11.根据权利要求8所述的方法,还包括以下中的至少一项:
接收指向所述数据的读取数据事务,
确定所述数据的位置,以及
从以下读取所述数据:
至少基于所述数据位于所述暂存缓冲存储器中并且具有指示所述处理中状态的所述状态的所述暂存缓冲存储器,或者
至少基于所述数据位于所述缓冲池扩展页文件中并且具有指示所述完成状态和所述有效状态的所述状态的所述缓冲池扩展页文件;
或者
将针对后续写入数据事务的所述数据的更新版本存储在所述缓冲池存储器处,以及
将所述经更新的数据提供给不存储所述数据的所述暂存缓冲存储器的实例。
12.根据权利要求8所述的方法,其中所述数据是数据页;
其中所述暂存缓冲存储器包括所述暂存缓冲存储器的第一实例;以及
其中所述确定针对所述暂存缓冲存储器的所述存储条件已经满足包括以下中的至少一项:
确定所述暂存缓冲存储器已满,并且确定用于接收后续写入数据事务的其他数据的所述暂存缓冲存储器的另一实例;或者
确定所述数据页已经在所述暂存缓冲存储器中存储了预定的一段时间。
13.根据权利要求8所述的方法,其中所述数据是数据页;
其中所述暂存缓冲存储器包括所述暂存缓冲存储器的第一实例;
所述方法还包括:
在所述将所述数据写入所述缓冲池扩展页文件之前,至少基于所述存储条件在无锁操作中将所述数据页提供给暂存缓冲存储器的另一实例。
14.根据权利要求8所述的方法,还包括:
响应于所述将所述数据提供给所述暂存缓冲存储器或在所述将所述数据提供给所述暂存缓冲存储器之后,从所述缓冲池存储器中逐出所述数据。
15.至少一种计算机可读存储介质,其上记录有程序代码,所述程序代码在由至少一个处理系统执行时,执行根据权利要求8至14中任一项所述的方法。
CN202280070777.8A 2021-10-29 2022-08-26 经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入 Pending CN118140217A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202163273304P 2021-10-29 2021-10-29
US63/273,304 2021-10-29
US17/705,981 2022-03-28
US17/705,981 US11880318B2 (en) 2021-10-29 2022-03-28 Local page writes via pre-staging buffers for resilient buffer pool extensions
PCT/US2022/041615 WO2023075910A1 (en) 2021-10-29 2022-08-26 Local page writes via pre-staging buffers for resilient buffer pool extensions

Publications (1)

Publication Number Publication Date
CN118140217A true CN118140217A (zh) 2024-06-04

Family

ID=86145916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280070777.8A Pending CN118140217A (zh) 2021-10-29 2022-08-26 经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入

Country Status (3)

Country Link
US (2) US11880318B2 (zh)
EP (1) EP4423620A1 (zh)
CN (1) CN118140217A (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12013684B2 (en) * 2021-03-24 2024-06-18 Yokogawa Electric Corporation Commissioning devices to process automation systems using portable setup devices
US20220398232A1 (en) * 2021-06-14 2022-12-15 Microsoft Technology Licensing, Llc Versioned metadata using virtual databases
US11994989B2 (en) * 2022-08-17 2024-05-28 Dell Products L.P. Cache efficiency analysis based on in-depth metrics instrumentation
CN116760546B (zh) * 2023-08-18 2023-10-31 湖南省通信建设有限公司 基于云环境的模块化密码服务方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060195704A1 (en) * 2005-01-27 2006-08-31 Hewlett-Packard Development Company, L.P. Disk array encryption element
US7689607B2 (en) * 2005-04-15 2010-03-30 Microsoft Corporation Database page mirroring
KR100858527B1 (ko) * 2007-04-18 2008-09-12 삼성전자주식회사 시간적 인접성 정보를 이용한 캐쉬 메모리 시스템 및데이터 저장 방법
US9483512B2 (en) 2011-11-07 2016-11-01 Sap Se Columnar database using virtual file data objects
CA2761553C (en) * 2011-12-09 2019-03-05 Ibm Canada Limited - Ibm Canada Limitee Logical buffer pool extension
US9311376B2 (en) * 2012-05-02 2016-04-12 Microsoft Technology Licensing, Llc Performance service level agreements in multi-tenant database systems
US10114908B2 (en) * 2012-11-13 2018-10-30 International Business Machines Corporation Hybrid table implementation by using buffer pool as permanent in-memory storage for memory-resident data
US9558229B2 (en) 2013-11-26 2017-01-31 Sap Se Transaction private log buffering for high performance of transaction processing
US20160210044A1 (en) * 2015-01-15 2016-07-21 Commvault Systems, Inc. Intelligent hybrid drive caching
US10223301B2 (en) * 2016-11-29 2019-03-05 International Business Machines Corporation Pre-allocating memory buffers by physical processor and using a bitmap metadata in a control program
GB201709499D0 (en) * 2017-06-15 2017-08-02 Microsoft Technology Licensing Llc Memory management in non-volatile memory
US10802766B2 (en) * 2017-09-29 2020-10-13 Oracle International Corporation Database with NVDIMM as persistent storage
US10732836B2 (en) 2017-09-29 2020-08-04 Oracle International Corporation Remote one-sided persistent writes
US11520611B2 (en) * 2018-08-20 2022-12-06 Intel Corporation Secure public cloud using extended paging and memory integrity
KR20200082323A (ko) * 2018-12-28 2020-07-08 에스케이하이닉스 주식회사 반도체 메모리 장치의 컨트롤러 및 그 동작 방법
US10922159B2 (en) * 2019-04-16 2021-02-16 International Business Machines Corporation Minimally disruptive data capture for segmented applications

Also Published As

Publication number Publication date
US11880318B2 (en) 2024-01-23
US20230140121A1 (en) 2023-05-04
EP4423620A1 (en) 2024-09-04
US20240126706A1 (en) 2024-04-18

Similar Documents

Publication Publication Date Title
US11755481B2 (en) Universal cache management system
EP3207471B1 (en) High performance transactions in database management systems
US10216629B2 (en) Log-structured storage for data access
US11080260B2 (en) Concurrent reads and inserts into a data structure without latching or waiting by readers
Levandoski et al. High performance transactions in deuteronomy
US11880318B2 (en) Local page writes via pre-staging buffers for resilient buffer pool extensions
US11567921B2 (en) Rowgroup consolidation with global delta accumulation and versioning in distributed systems
US11132350B2 (en) Replicable differential store data structure
US8700585B2 (en) Optimistic locking method and system for committing transactions on a file system
Levandoski et al. LLAMA: A cache/storage subsystem for modern hardware
US11645241B2 (en) Persistent memory file store for directly mapped persistent memory database
CN101556559A (zh) 利用虚拟存储器的事务型存储器执行
US11803314B2 (en) Techniques for performing metadata updates
WO2023075910A1 (en) Local page writes via pre-staging buffers for resilient buffer pool extensions
Kodandaramaih et al. Concurrent updates to pages with fixed-size rows using lock-free algorithms
WO2022212026A1 (en) Rowgroup consolidation with global delta accumulation and versioning in distributed systems
CN116263765A (zh) 一种数据管理性能优化系统和方法
BR112017005899B1 (pt) Sistema e método implementado por computador para transações de alto desempenho em sistemas de gerenciamento de banco de dados

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination