CN110520845B - 更新硬件事务内存(htm)用户异常中止元数据的方法及系统 - Google Patents

更新硬件事务内存(htm)用户异常中止元数据的方法及系统 Download PDF

Info

Publication number
CN110520845B
CN110520845B CN201780089495.1A CN201780089495A CN110520845B CN 110520845 B CN110520845 B CN 110520845B CN 201780089495 A CN201780089495 A CN 201780089495A CN 110520845 B CN110520845 B CN 110520845B
Authority
CN
China
Prior art keywords
htm
transaction
database
value
transactions
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.)
Active
Application number
CN201780089495.1A
Other languages
English (en)
Other versions
CN110520845A (zh
Inventor
希勒尔·阿维尼
阿哈龙·埃威佐
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN110520845A publication Critical patent/CN110520845A/zh
Application granted granted Critical
Publication of CN110520845B publication Critical patent/CN110520845B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • 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/2308Concurrency control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (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

一种用于管理内存数据库的硬件事务内存(Hardware Transactional Memory,简称HTM)事务的异常中止事件的系统,包括:处理器,用于控制并发保存到共享内存数据库的多个数据库事务的多个异常中止事件,其中所述多个数据库事务中的每一个被划分为原子地执行的HTM事务,以访问数据库的多个行中的一行,其具体方法如下:分析与每个潜在异常中止事件相关联的元数据记录,所述元数据包括由异常中止HTM事务和其它HTM事务并发访问的所述行中的某一行的行标识ID值和行版本值;比较所述行ID值和所述行版本值与所述异常中止HTM事务的本地ID值和本地版本值;确定所述异常中止HTM事务与所述其它HTM事务之间的竞争条件。

Description

更新硬件事务内存(HTM)用户异常中止元数据的方法及系统
技术领域和背景技术
在一些实施例中,本发明涉及管理内存数据库的数据库事务异常中止事件,更具体地但不完全地,涉及管理内存数据库的被划分为多个硬件事务内存(HardwareTransactional Memory,简称HTM)事务的数据库事务的异常中止事件。
特别地,通过结合在一个或多个处理器的一个或多个核心上运行的多个线程利用的多处理,计算能力不断提高和发展,从而允许并发执行多个过程。
类似地,存储技术和架构也在不断发展,特别是结合高密度(容量)和高速动态随机存取存储器(Dynamic Random Access memory,简称DRAM)利用的系统存储器。
不断发展的高密度高速存储器方法允许在所述易失性DRAM中存储更多数据,以支持加速访问和减少时延,从而确保提高性能。用于此类实现方式的一个示例可以是内存数据库,其中数据库和/或其一部分可以存储在由所述DRAM使用的所述系统存储器中。通过由所述多个线程执行的多个并发过程启动对所述内存数据库的多个并发访问(数据库事务),可以进一步加速对所述数据库的访问。
发明内容
根据本发明的第一方面,提供了一种用于管理内存数据库的硬件事务内存(Hardware Transactional Memory,简称HTM)事务的异常中止事件的系统,包括:处理器,用于控制并发保存到共享内存数据库的多个数据库事务的多个异常中止事件,其中所述多个数据库事务中的每一个被划分为原子地执行的多个HTM事务,以访问数据库的多个行中的一行,其具体方法如下:
-分析与多个潜在异常中止事件中的每一个相关联的元数据记录,所述元数据记录包括由一个或多个异常中止HTM事务和一个或多个其它HTM事务并发访问的所述多个行中的某一行的行标识(identification,简称ID)值和行版本值;
-比较所述行ID值和所述行版本值与所述异常中止HTM事务的本地ID值和本地版本值;
-确定所述一个或多个异常中止HTM事务与所述一个或多个其它HTM事务之间的竞争条件。
标识并发HTM事务之间的冲突和潜在竞争条件是根据标识信令系统来完成的,在所述标识信令系统中,每个线程用唯一ID值和自增版本值进行唯一地标识。这允许启动数据库事务的每个线程有效地标识其它并发写入事务是否正前往相同数据库行,由此标识可能需要异常中止的并发HTM事务之间的潜在冲突(竞争)。此外,这允许每个线程相对于所述内存数据库的所述行的所述版本在本地维护其版本。只有在并发HTM事务之间存在潜在冲突的情况下,所述相应线程才可以同步其本地值与存储在由所有线程共享的中央位置(资源)中的全局值。这可以防止所述多个线程并发且频繁地访问所述全局值中央位置可能引起的瓶颈。
根据本发明的第二方面,提供了一种管理内存数据库的硬件事务内存(HardwareTransactional Memory,简称HTM)事务的异常中止事件的方法,包括:
-监测并发保存到共享内存数据库的多个数据库事务的多个潜在异常中止事件,其中所述多个数据库事务中的每一个被划分为原子地执行的多个HTM事务,以访问数据库的多个行中的一行;
-分析与所述多个潜在异常中止事件中的每一个相关联的元数据记录,所述元数据记录包括由一个或多个异常中止HTM事务和一个或多个其它HTM事务并发访问的所述多个行中的某一行的行标识(identification,简称ID)值和行版本值;
-比较所述行ID值和所述行版本值与所述异常中止HTM事务的本地ID值和本地版本值;
-确定所述一个或多个异常中止HTM事务与所述一个或多个其它HTM事务之间的竞争条件。
在所述第一和/或第二方面的另一种实现方式中,所述多个HTM事务中的每一个事务的大小适于所述处理器的单个缓存行。这可以允许克服所述处理器缓存行容量限制,可以显著减少数据库事务异常中止事件的数目,因为违反所述缓存大小容量限制是导致所述数据库事务的所述异常中止事件的主要因素。此外,这允许利用处理器的固有硬件缓存一致性机制,所述机制十分高效,从而显著提高所述数据库事务的性能和总体数据库访问性能。
在所述第一和/或第二方面的另一种实现方式中,所述元数据记录包括所述HTM事务的类型。所述类型属于由读取HTM事务和写入HTM事务组成的组的一部分。这允许所述线程标识并发访问所述数据库的同一行的所述HTM事务的所述类型,以便确定所述并发HTM事务是否存在冲突。
在所述第一和/或第二方面的另一种实现方式中,所述本地ID值唯一地标识并发启动包括所述HTM事务的所述多个数据库事务的多个线程中的每一个;所述本地版本值是一个自增值,在每次成功提交所述多个数据库事务中的一个事务之后按所述每个线程递增。所述行ID值是最近成功提交所述某一行的所述多个线程中的一个相应线程的ID值;所述行版本值是最近成功提交时的所述相应线程的版本值。该标识信令机制可以允许高效地标识所述并发HTM事务之间的潜在冲突。
在所述第一和/或第二方面的另一种实现方式中,所述本地ID值和所述本地版本值分别是全局ID值和全局版本值的本地副本,所述全局ID值和所述全局版本值存储在由所述多个线程共享的共享记录中,其中所述多个线程中的每一个维护由所述每个线程专门使用的所述本地ID值和所述本地版本值的专用副本。这允许每个线程相对于所述内存数据库的所述行的所述版本在本地维护其版本,同时避免在访问由全部所述线程共享的中央位置(资源)以存储所有线程的所述版本时存在瓶颈。
在所述第一和/或第二方面的另一种实现方式中,在疑似竞争的情况下,启动所述HTM事务的相应线程分别根据所述全局ID值和所述全局版本值更新所述相应的本地ID值和所述本地版本值。在保持其所述版本值的本地副本的同时,在并发HTM事务之间存在潜在冲突的情况下,所述相应线程可以同步其本地值与存储在所述中央位置中的所述全局值。
在所述第一和/或第二方面的一种可选实现方式中,增加所述元数据记录的大小以包含较大ID值,从而支持增加并发启动所述多个数据库事务的多个线程的数目。增加所述元数据记录大小可以允许更多线程并发访问所述内存数据库。
在所述第一和/或第二方面的另一种实现方式中,在所述处理器确定可能的竞争条件的情况下,所述异常中止HTM事务被重新启动,直至超出定义预定义重试次数的重试阈值。为了减少异常中止事件,可以在异常中止之前将写入HTM事务重新启动预定义次数,以检查所述并发写入事务是否已经完成。
在所述第一和/或第二方面的另一种实现方式中,在所述HTM事务的启动周期数目超出所述重试阈值之后,相应的数据库事务异常中止。这对于防止并发数据库事务之间的死锁可能是必要的。
在所述第一和/或第二方面的另一种实现方式中,对于应用指示的异常中止事件,不增加所述重新启动的计数。应用指示的异常中止事件(用户异常终止)并非归因于由冲突引起的自然异常中止事件,因此所述冲突(异常中止)管理机制不会将此类异常中止事件计算在内。
在所述第一和/或第二方面的另一种实现方式中,一个或多个所述异常中止HTM事务和所述其它HTM事务被强制应用全局锁来串行化对所述某一行的所述访问。为了确保在异常中止事件之后正确执行,所述存在冲突的数据库事务中的一个事务可能需要利用全局锁定机制来获得对所述行的排他性访问,并通过串行化执行流来完成所述执行,从而防止并发事务访问同一行。
除非另有定义,否则本文所用的所有技术和科学术语都具有与本领域普通技术人员公知的含义相同的含义。尽管与本文所描述的方法和材料类似或者相同的方法和材料可以用于本发明实施例的实践或测试,但下文只描述示例性的方法和/或材料。若存在冲突,则以包括定义在内的专利说明书为准。另外,材料、方法以及示例都只是用于说明,并非必要限定。
本发明实施例提供的方法和/或系统的实现方式可以涉及手动、自动或其组合执行或完成所选择的任务。此外,根据本发明的方法和/或系统实施例的实际仪器和设备,可以通过操作系统利用硬件、软件、固件或其组合完成多个选择的任务。
例如,本发明实施例提供的用于执行所选择的任务的硬件可以实现为芯片或电路。对于软件,本发明实施例提供的所选择的任务可以实现为由计算机使用任何合适的操作系统执行的多个软件指令。在本发明的示例性实施例中,本文描述的示例性方法和/或系统实施例提供中的一个或者多个任务由数据处理器执行,例如用于执行多个指令的计算平台。可选地,所述数据处理器包括用于存储指令和/或数据的易失性存储器和/或用于存储指令和/或数据的非易失性存储器,例如硬磁盘和/或可移动介质。可选地,还提供了一种网络连接。可选地,还提供了显示屏和/或用户输入设备,例如键盘或者鼠标。
附图说明
此处仅作为示例,结合附图描述了本发明的一些实施例。现在具体结合附图,需要强调的是所示的项目作为示例,为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。
在附图中:
图1是本发明的一些实施例提供的使用分离事务执行(Split TransactionExecution,简称STE)方法访问内存数据库的示例性过程的流程图;
图2是本发明的一些实施例提供的一种用于使用分离事务执行(SplitTransaction Execution,简称STE)方法访问内存数据库的示例性系统的示意图;
图3是本发明一些实施例提供的由多个线程维护的示例性全局和本地最后提交版本阵列(Last Committed versions Array,简称LCA)的示意图;
图4是本发明的一些实施例提供的并发HTM事务的示例性STE执行的示意图;
图5是本发明的一些实施例提供的示出最小化竞争窗口的代码摘录的捕获;
图6A、图6B、图6C和图6D是本发明的一些实施例提供的为比较当前现有方法与一种用于访问内存数据库的分离事务执行(Split Transaction Execution,简称STE)方法而执行的TPC-C基准的实验结果的性能对比图;
图7A、图7B、图7C和图7D是本发明的一些实施例提供的为比较当前现有方法与一种用于访问内存数据库的分离事务执行(Split Transaction Execution,简称STE)方法而执行的雅虎云服务基准(Yahoo!Cloud Serving Benchmark,简称YCSB)的实验结果的性能对比图。
具体实施方式
在一些实施例中,本发明涉及管理内存数据库的数据库事务的异常中止事件,更具体地但不完全地,涉及管理内存数据库的被划分为多个硬件事务内存(HardwareTransactional Memory,简称HTM)事务的数据库事务的异常中止事件。
根据本发明的一些实施例,提供了用于利用HTM的方法、系统和计算机程序产品,所述HTM支持通过由多个线程并发启动的多个数据库事务来访问内存数据库的原子HTM事务。所述多个线程可以在一个或多个处理器的一个或多个核心上运行。
为了实现服务并发访问所述数据库的多个线程的高性能内存数据库,存在若干需要克服的挑战和需要解决的问题。所述内存数据库包括多个行,位于系统存储器中,所述系统存储器通常由DRAM利用,特别地,由所述多个线程共享的HTM利用。因此,所述数据库的分段(例如,所述数据库的行)通常可以被缓存在对所述线程可用的一个或多个缓存中,例如,1级(Level 1,简称L1)缓存、2级(Level 2,简称L2)缓存和/或3级(Level 3,简称L3)缓存。这强加了几条限制,例如,所述缓存行通常限制在相对较小的尺寸,例如64字节。因此,数据库事务通常可能不适合缓存行。另一限制是由于需要维护缓存,因为多个线程可能会访问同一行。这意味着(临时)存储在所述缓存中的数据需要以其最新版本呈现给可能会并发访问所述数据库的所述多个线程中的每一个。另一要求是防止所述数据库中的竞争,所述竞争可能是由访问所述数据库中的相同数据的多个线程引起的。这可能需要每个数据库事务原子地完成,即不需要另一事务改变由某个数据库事务访问的所述行的数据内容。此外,所述限制可以相互依赖,也可以相互影响。
所述内存数据库实现的挑战可以通过本发明中描述的分离事务执行(SplitTransaction Execution,简称STE)来解决。所述STE提出了一种利用硬件机制的新方法,所述硬件机制可以有效地控制对所述数据库的访问,以实现高性能数据库访问,同时解决前述问题。特别地,所述STE利用所述HTM能力来确保每个HTM事务的原子性。在所述HTM事务正在进行的同时,所述多个HTM事务中的每一个以原子方式执行,而没有其它HTM事务干扰(相对于相同数据)。所述HTM可以由例如Intel HTM利用,所述Intel HTM由Intel IA指令集事务同步扩展(Transactional Synchronization Extension,简称TSX)支持以支持所述HTM事务。所述STE还利用硬件平台(即处理器)可用的硬件缓存一致性控制机制。
使用所述STE算法,由所述线程中的一个启动的每个数据库事务首先被划分为多个HTM事务。每个所述HTM事务可适用于访问所述内存数据库的单个行(适合所述缓存行),因此所述HTM事务适合所述缓存行。所述STE可以提供应用编程接口(ApplicationProgramming Interface,简称API),以允许启动数据库事务的一个或多个软件模块(例如,实用程序、脚本、插件等)以使用所述STE实现方式。
使用高效的现实机制来控制所述HTM事务,所述机制用于检测和防止由所述线程启动的并发数据库事务之间的竞争,同时以最小时延来服务数据库事务。所述现实实现方式依赖于组合用于读取HTM事务的乐观并发控制与用于写入HTM事务的悲观并发控制。自然地,当两个或多个并发HTM事务访问所述数据库中的同一行时,特别是在一个写入HTM事务(写后读)或两个并发写入HTM事务之后(基本上同时)的读取HTM事务时,出现竞争问题。
所述乐观并发控制意味着对于读取HTM事务,很少发出事务异常中止。首先,对于两个读取HTM事务没有竞争问题,每个所述读取HTM事务可以不间断地进行。在所述读取HTM事务期间,检查所访问的行以确定另一写入HTM事务当前是否访问同一行(即所述行处于活动状态)。在不存在并发写入HTM事务的情况下,所述读取HTM事务通常继续进行以提交所述HTM事务。在检测到并发写入HTM事务的情况下,所述读取HTM事务获取所述行的内容的先前版本。在提交所述读取HTM事务之前,立即重新检查所述行的状态。在所述行仍然处于活动状态的情况下,所述读取HTM事务与所述获取的所述行的先前版本一起提交。如果所述行不再处于活动状态,即所述并发写入HTM事务已完成,则所述读取HTM事务重新启动以提取由所述并发写入HTM事务更新的所述行的所述内容。
所述悲观并发控制意味着对于写入HTM事务,通过检查所述行是否处于活动状态在启动时立即完成对并发写入HTM事务的检查。在不存在并发写入HTM事务的情况下,所述写入HTM事务通常继续进行以提交所述HTM事务。在检测到并发写入HTM事务的情况下,所述写入HTM事务立即异常中止以避免处理后续写入HTM事务,从而防止可能丢失的冗余处理工作,因为所述写入HTM事务可能最终异常中止。可选地,将所述写入HTM事务重新启动预先确定的次数(根据预定义重试阈值),以检查所述并发写入HTM事务是否完成。在异常中止之后,所述写入HTM事务可以应用全局锁定来串行化对所述行的所述访问并获得对所述行的排他性访问。
通过一种新颖的标识信令方法来维护所述访问的行的状态以及所述同一数据库事务的所述HTM事务的同步。表述标识系统包括分配给每个所述线程的唯一标识符(identifier,简称ID)值和与每个所述线程相关联的版本值。所述版本值是一个自增值,在每次成功提交数据库事务之后按所述相应线程递增。可以创建全局结构,例如,全局最后提交版本阵列(Last Committed version Array,简称LCA),在所述结构中为每个所述线程分配时隙。每个时隙可以存储所述相应线程的所分配的ID值和所述当前版本值。根据启动所述数据库事务的所述相应线程的所述ID值和所述相应线程的所述当前版本值来标识每个数据库事务。所述数据库中的每个所述行也分配有反映对所述行执行最近成功提交的所述相应线程的所述ID值的行ID值和指示在所述成功提交时所述相应线程的所述版本值的行版本。
在对所述数据库的行的每个HTM事务期间,比较所述行ID和行版本值与包括所述相应HTM事务的所述数据库事务的所述ID和版本值。基于所述比较,可以通过标识并发写入HTM事务当前是否正前往所述同一行来确定竞争概率。可能有几种可能的场景。
假设对某一行启动读取HTM事务,所述读取HTM事务标识对所述同一行的并发写入HTM事务。在第一种场景下,所述读取HTM事务和所述写入HTM事务可能是同一数据库事务的一部分。此类写后读操作是允许的,因为所述某一行的数据包含在所述同一数据库事务的上下文中,因此所述读取HTM事务可以正常进行。在第二种场景下,所述并发写入HTM事务是另一数据库事务的一部分。在此类情况下,所述读取HTM事务获取由所述并发写入HTM事务创建的所述行内容(数据)的先前版本,可能作为所述写入HTM事务的撤消集的一部分。在针对作为单独HTM事务的所述读取HTM事务执行的验证和提交操作期间,在所述提交之前,所述验证和提交HTM事务立即检查所述写入HTM事务是否完成。在所述写入HTM事务没有完成的情况下,所述验证和提交HTM事务与所述获取的所述行数据的先前版本一起提交。在所述并发写入HTM事务完成的情况下,可以重新启动所述读取HTM事务以获取由所述并发写入HTM事务写入的所更新的行内容。
假设对某一行启动写入HTM事务,所述写入HTM事务标识已访问所述同一行的并发写入HTM事务。标识所述并发写入HTM事务的所述写入HTM事务立即异常中止,以避免处理最终异常中止的所述写入HTM事务的冗余处理。可选地,在检测到所述并发写入HTM事务时,所述写入HTM事务重新启动预定义次数(根据预定义阈值),以检查所述并发写入HTM事务是否完成。一旦超出所述阈值,所述写入HTM事务就会异常中止以防死锁,所述数据库事务可以重启。与所述读取HTM事务相反,在获得对所述行的访问之后,立即在所述写入HTM事务内(就地)完成所述验证和提交操作,以便最小化所述竞争窗口。由所述写入HTM事务对所述数据库行进行的实际内存访问可以在所述提交操作之前立即完成。这可以显著缩小所述竞争窗口,因为所述写入HTM事务实际上处理所述行的时间段和另一HTM事务在该最小化竞争窗口访问所述同一行的概率可能会显著减少。
访问所述数据库并更新其版本值的所述线程需要不断地更新所述全局LCA,以使其版本值彼此同步,从而保持所述竞争检测机制的完整性。这可能导致访问所述全局LCA的瓶颈,因为所述多个线程可能需要频繁地访问所述全局LCA,因此可能防止将所述STE扩展到并发访问所述数据库的大量线程。为了消除该瓶颈并允许扩展,每个线程可以维护由每个线程专门使用的本地LCA(缓存的LCA)。只有当检测到潜在竞争时,即所述行ID和行版本ID与存储在所述本地LCA中的所述ID值和版本值不同时,所述本地LCA才可以与所述全局LCA同步。
与用于控制数据库事务的现有方法相比,所述STE可能体现显著的优点。
所述现有方法中的一些可能不会利用由诸如所述HTM的现代内存技术支持的HTM事务。因此,为了防止并发数据库事务的竞争,可能需要复杂的软件机制来确保所述数据库事务的原子性。由于所述数据库事务的所述串行化,此类实现方式可能导致高性能损失。此外,所述数据库事务所访问和/或需要的数据段可能违反所述缓存行大小,从而降低所述缓存的效率,并将其暴露于频繁的异常中止事件。此外,所述数据库事务的原子执行可能会进一步增加数据库事务异常事件的数量,因为所述数据库事务的粒度较粗,这是因为每个数据库事务可以访问所述数据库的多个行。这可能需要缓存大段所述存储器,从而增加访问所述数据库的相同分段的并发数据库事务之间的竞争可能性,即使不访问完全相同的行也是如此。通过将所述数据库事务划分为HTM事务,所述STE可以避免用于确保原子性的软件实现的机制,利用保证原子性的所述高效HTM硬件机制来保持对所述数据库的高性能访问。此外,将所述数据库事务划分为所述HTM事务,每个HTM事务适于访问单行,可以确保所述HTM事务遵守所述缓存行大小限制,从而显著提高所述缓存的有效性,同时显著提高数据库访问性能。此外,通过所述HTM事务访问所述数据库,由于每个HTM事务只访问其所需的实际行,同时避免缓存可能不需要的相邻行,因此所述缓存中缓存的所述存储器分段的粒度显著增加。这可能会显著减少所述数据库事务异常中止事件,这又可以显著提高数据库访问性能。
另一方面,所述现有方法中的一些可以利用HTM事务,例如,在Leis,V.、Kemper,A.和Neumann,T.的“将HTM支持的数据库事务扩展至许多核心”出版物中描述的时间戳排序(Time Stamp Ordering,简称TSO)算法,所述出版物的公开内容以引入的方式并入本文。然而,所述TSO算法使用由全部所述线程共享的全局时间戳机制,因此可能导致防止所述TSO算法扩展到大量线程的瓶颈。与此相反,所述STE可以通过使用所述全局LCA(缓存的LCA)的本地副本来防止瓶颈,其中每个线程专门使用其本地LCA,从而消除访问所述全局LCA的瓶颈。
此外,通过对所述读取HTM事务应用所述乐观并发控制并对所述写入HTM事务应用所述悲观并发控制,所述STE可以显著提高所述数据库访问和处理性能。由于两个写入HTM事务之间的竞争可以在所述事务早期(即在启动阶段)检测到,在并发写入事务的情况下异常中止所述写入HTM事务,因此可以避免冗余处理工作以处理可能最终异常中止的写入HTM事务。另一方面,读取HTM事务,特别是写后读HTM事务的性能可以显著提高,因为所述乐观并发控制可以确保由并发读取和写入HTM事务导致的最少异常中止事件。
此外,在单独的HTM事务中执行所述验证和提交操作可以允许保持遵守所述缓存行大小限制,同时利用所述HTM的所述原子性属性。因此,即使对于过多的数据库事务,特别是对于大量读取数据库事务,也保持遵守所述缓存行大小限制。此外,在所述验证和提交HTM事务期间缩小所述STE完成的竞争窗口可以进一步有助于减少所述HTM事务异常中止事件,这转化为减少数据库事务异常中止事件的数量,因此可以显著提高所述STE的性能。
在详细解释本发明的至少一个实施例之前,应当理解,本发明不必将其应用限于下面描述中阐述的和/或在附图和/或举例中说明的部件和/或方法的结构和布置的细节。本发明可以有其它实施例或可以采用各种方式实践或执行。
本发明可以是系统、方法和/或计算机程序产品。所述计算机程序产品可以包括具有计算机可读程序指令的一个(或多个)计算机可读存储介质,所述指令用于使处理器执行本发明的各个方面。
所述计算机可读存储介质可以是有形设备,所述有形设备可以保存和存储指令执行设备使用的指令。例如,所述计算机可读存储介质可以是但不限于电子存储设备、磁性存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任意合适组合。计算机可读存储介质的更具体示例的非详尽列表包含以下各项:便携式计算机磁盘、硬盘、随机存取存储器(random access memory,简称RAM)、只读存储器(read-only memory,简称ROM)、可擦除可编程只读存储器(erasable programmable read-only memory,简称EPROM,或闪存)、静态随机存取存储器(static random access memory,简称SRAM)、便携式只读光盘(compact disc read-only memory,简称CD-ROM)、数字多功能光盘(digital versatiledisk,简称DVD)、存储棒、软盘、诸如在其上记录有指令的凹槽中的穿孔卡片或凸起结构之类的机械编码设备或前述的任意合适组合。此处使用的计算机可读存储介质不应理解为本身瞬时的信号,例如,无线电波或其它自由传播的电磁波、通过波导或其它传输介质(例如,通过光缆的光脉冲)传播的电磁波,或通过电线传输的电信号。
可以从计算机可读存储介质中将此处描述的计算机可读程序指令下载到各个计算/处理设备上,或通过网络下载到外部计算机或外部存储设备上,所述网络如因特网、局域网、广域网和/或无线网。所述网络可以包括铜传输电缆、光学传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或网络接口从所述网络中接收计算机可读程序指令,并转发所述计算机程序可读程序指令,以存储在所述相应计算/处理设备中的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可为汇编指令、指令集架构(instruction-set-architecture,简称ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设定数据或者以一种或多种编程语言的任何组合撰写的源代码或目标代码,所述编程语言包含面向对象的编程语言(例如,Smalltalk、C++等)和常规程序化编程语言(例如,“C”编程语言或类似编程语言)。
所述计算机可读程序指令可以完全在用户电脑上执行或部分在用户电脑上执行,或作为独立的软件包,部分在用户电脑上执行部分在远端电脑上执行,或完全在远端电脑或服务器上执行。在后一种场景中,远端电脑可以通过任何类型的网络与用户电脑连接,包括局域网(local area network,简称LAN)或广域网(wide area network,简称WAN),或者可以(例如,使用因特网服务提供方提供的因特网)在外部电脑上建立所述连接。在一些实施例中,包括可编程逻辑电路、现场可编程门阵列(field programmable gate array,简称FPGA)或可编程逻辑阵列(programmable logic array,简称PLA)等的电子电路可以利用计算机可读程序指令的状态信息执行所述计算机可读程序指令以个性化所述电子电路,以便执行本发明的各方面。
此处,结合本发明实施例的方法、装置(系统)以及计算机程序产品的流程图和/或框图描述本发明的各方面。应当理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。
附图中的流程图和框图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。此时,流程图或框图中的每个框都可以代表一个模块、分段或部分指令,所述部分指令包括一个或多个用于实现特定逻辑功能的可执行指令。在一些可替代实现方式中,所述框中提出的功能可不按图中提出的顺序进行。例如,事实上,连续展示的两个框可以大体上同时执行,或者有时候可以按照相反的顺序执行,这取决于所涉及的功能。还应注意的是,框图和/或流程图中每一个框以及框图和/或流程图中框的组合可以由基于专用硬件的系统执行,所述系统执行指定的功能或动作,或者执行专用硬件和计算机指令的组合。
现参考附图,图1示出了本发明的一些实施例提供的使用分离事务执行(SplitTransaction Execution,简称STE)方法访问内存数据库的示例性过程的流程图。可以执行示例性过程100以利用支持原子HTM事务的HTM来实现内存数据库,所述内存数据库服务在一个或多个处理器的一个或多个核心上运行的多个线程。应用STE执行方法,其中每个数据库事务被划分为多个HTM事务,每个HTM事务访问单行。所述STE实现了一种现实的并发控制,其中,对读取HTM事务应用乐观并发控制,对写入HTM事务应用悲观并发控制。通过标识信令机制检测、控制和防止并发HTM事务之间的竞争,所述标识信令机制显著提高所述内存数据库的访问和/或执行性能。所述标识信令包括使用ID值和版本值来标识所述数据库中的每一个数据库事务以及每一行,所述ID值和版本值指示启动所述数据库事务的所述线程,所述数据库事务在所述提交操作时将所述最近内容(数据)提交给所述行和所述版本的所述线程。
现参考图2,图2是本发明的一些实施例提供的一种用于使用分离事务执行(SplitTransaction Execution,简称STE)方法访问内存数据库的示例性系统的示意图。示例性系统200可以执行所述STE过程,例如所述100,以利用支持原子HTM事务的HTM来实现内存数据库,所述内存数据库服务在一个或多个处理器的一个或多个核心上运行的多个线程。所述系统200包括计算节点201,例如计算机、服务器、计算节点集群和/或任何计算设备。所述计算节点201可以包括处理器202、存储器204和程序存储器206。
所述处理器202(同构或异构)可用于并行处理,用作处理器集群和/或一个或多个多核处理器。所述处理器202可以支持超线程,使得所述处理器202的每个核心可以执行多个线程208,每个线程208独立地执行,同时共享所述处理器202的资源和/或所述计算节点201的资源,例如计算资源、内存资源、存储资源等。所述处理器202还可以包括缓存203,例如L1缓存、L2缓存、L3缓存等,它们可以由一个或多个所述线程208专门使用或者在多个所述线程208之间共享。
所述存储器204可以包括一个或多个易失性设备,例如DRAM组件等。所述存储器204还可以包括高速永久存储器,例如非易失性双列直插内存模块(non-volatile dualin-line memory module,简称NVDIMM-N)组件等。特别地,所述存储器204包括HTM,例如所述Intel HTM等,其支持通过例如所述Intel IA指令集TSX扩展的原子HTM事务。所述存储器204,特别是所述HTM,可以存储包括多个行的内存数据库212。
所述存储器206可以包括一个或多个计算机可读介质设备,用于一种或多种目的,例如,存储程序代码、存储数据、存储中间计算产品等。所述存储器206可以包括一个或多个永久存储器设备,例如闪存阵列、固态磁盘(Solid State Disk,简称SSD)等,用于存储程序代码。
每个所述线程208可以执行一个或多个软件模块,例如过程、应用、代理、实用程序、脚本、插件等。其中,软件模块可以包括多个程序指令,所述程序指令存储在诸如所述存储器204和/或所述程序存储器206的瞬时性介质中,由诸如所述线程208的线程执行。例如,每个线程208可以执行用于应用所述STE来访问所述内存数据库212的访问代理210的实例。所述访问代理210可以提供API,以允许启动数据库事务的一个或多个软件模块与所述访问代理210交互,以便使用所述STE实现方式。
所述访问管理器210可以使用一个或多个数据结构,例如表格、列表、阵列等,特别是存储在所述存储器204中的全局最后提交版本阵列(Last Committed versions Array,简称LCA)214,用于标识并发HTM事务之间的竞争条件。为每个所述线程208分配唯一ID(tid)和本地单调自增版本计数器(tv)。为所述全局LCA(lca)214中的每个所述线程208分配时隙,所述全局LCA(lca)214将每个所述线程208的版本值存储在根据所述tid值标识的所述相应时隙中。虽然所述全局LCA 214可以由全部所述线程208共享,但每个所述线程208维护所述全局LCA 214的本地副本(cached_lca),其可由所述相应线程208专门使用。在每次成功提交数据库时,所述相应线程208将其当前版本值tv写入所述全局LCA 214中的所述相应时隙中,即lca[tid]←tv。成功提交的所述线程208随后更新所述本地LCA(cached_lca),即本地递增tv。下文将描述所述全局LCA 214和所述本地LCA副本的使用。
现参考图3,图3是本发明一些实施例提供的由多个线程维护的示例性全局和本地最后提交版本阵列(Last Committed versions Array,简称LCA)的示意图。诸如所述系统200的示例性系统包括四个线程,例如线程208、线程T1 208A、线程T2 208B、线程T3 208C和线程T4 208D。为所述线程208A至208D中的每一个分配全局LCA(例如,所述全局LCA 214)中的时隙。每个时隙由所述相应线程208的所述唯一tid标识,存储所述线程的所述当前版本tv。每个所述线程208A至208D维护所述全局LCA 214的本地副本,使得所述线程T1 208A维护本地LCA 214A,所述线程T2 208B维护本地LCA 214B,所述线程T3 208C维护本地LCA214C,所述线程T4 208D维护本地LCA 214D。
再次参考图1和图2。
如102所示,所述STE过程100开始于所述访问代理210将每个数据库事务T划分为多个HTM事务,使得每个HTM事务适于访问所述数据库212中的单行,因此大小适合所述缓存203的单个缓存行。通过使所述HTM事务适于所述缓存行大小限制,可能会鲜少出现因缓存行容量限制而导致的HTM事务异常中止。所述访问代理210分析所述数据库事务以标识由所述数据库事务访问的所述数据库212的行,同时相应地将所述数据库事务划分为所述多个HTM事务。
每个数据库事务T根据启动所述数据库事务的所述相应线程208的唯一ID值和版本值集进行标识。所述数据库2121中的每一行还具有属性行ID值(rid)和行版本值(rv),它们是写入所述行的所述内容(数据)的所述最后数据库事务T的所述ID和版本。
如104所示,所述访问代理210启动根据划分所述数据库事务创建的所述多个HTM事务。
每当写入HTM事务将访问某一行(经启动并获得对所述行的访问)时,所述某一行都会标记为活动状态,创建并存储所述行的先前内容(数据)的副本(prev),即所述prev在所述写入HTM事务开始改变所述行之前存储所述行的最近成功提交的内容。所述prev包括最近提交的所述行的(先前)内容以及执行所述最近成功提交的所述数据库事务的所述rid和所述rv。这意味着只有在活动状态写入数据库事务T写入(访问)所述行时才会设置所述prev链路。可选地,所述prev指向当前写入所述行的写入HTM事务的所述活动状态数据库事务T的所述撤消集。
如106所示,对于每个HTM事务,所述访问代理210分析潜在异常中止事件的元数据记录以标识潜在竞争条件,其中当前由所述HTM事务访问的所述行由另一写入HTM事务并发访问。所述元数据记录,例如结构、列表、变量的集合等,包括所述行ID值(rid)、所述行版本值(rv)、所述HTM事务的所述ID值(tid)和所述HTM事务的所述版本值(tv),其中所述HTM事务的所述tid和所述tv是所述数据库事务T的所述tid和所述tv。
如108所示,所述访问代理210通过比较从所述元数据记录中检索的rid、rv、tid和tv来标识所述HTM事务的潜在竞争场景。所述访问代理210可以使用以下述伪代码摘录l呈现的用于执行所述访问(读取和写入)HTM事务的访问函数Access()。所述访问代理210可以提供所述Access()函数作为其API的一部分。
伪代码摘录1:
Figure GDA0003455982140000101
如伪代码摘录1中的前提条件所表示的,从所述HTM事务内调用所述Access()函数。所述Access()函数接收所述访问的行(row)和所述HTM事务的所述类型(type)作为参数。首先,如行2所示,所述Access()函数通过比较所述rid和rv与所述当前本地值tv tid来检查所述访问的行是否已由所述(同一)执行数据库事务T写入。在所述HTM事务是所述同一数据库事务T的另一写入HTM事务之后的访问的情况下,所述行可以重新用于所述当前HTM事务,不会在读取集(对于读取HTM事务)或撤消集(对于写入HTM事务)中记录任何内容。该实现方式通过避免冗余处理(工作)以在不必要的情况下创建所述读取集或所述撤消集来证实所述STE的已降低的开销。在所述HTM事务并非在所述同一数据库事务T的另一写入HTM事务之后的情况下,所述Access()函数划分为两条不同的路径:一条路径用于读取HTM事务(行5至13),另一条路径用于写入HTM事务(行14至30)。
如110所示,对于读取HTM事务,所述访问代理110应用乐观并发控制。如行6所示,所述Access()函数检查所述访问的行是否提交,或者所述访问的行当前是否正由并发写HTM事务写入。在所述行已提交的情况下,如行7所示,所述Access()函数将所述行的所述当前rv和rid以及指向所述行本身的指针添加到所述读取集(rs),所述当前行由所述读取HTM事务使用。然而,在所述行当前正由另一数据库事务的所述并发写入HTM事务写入的情况下,如行9至11所示,所述Access()函数获取在所述最近成功提交期间(在所述并发写入HTM事务访问所述行之前)提交的所述行的所述内容的先前版本。如行10所示,所述Access()函数使用所述prev链路将所述行的所述内容的所述先前版本添加(获取)到所述读取集(rs)。所述Access()函数还添加(检索)与所述行的所述内容的所述先前版本相关联的所述相应rid和rv,即对所述行进行所述最近成功提交的所述数据库事务的所述tid和tv。这意味着从所述行内容的所述先前版本的所述副本读取(获取)所述数据。如伪代码摘录1所示,在所述读取HTM事务的情况下,所述读取HTM事务通过附加验证和提交HTM事务(即在完成实际读取所述行之后)在外部提交所述Access()函数(没有_xend提交函数调用)。
如112所示,对于写入HTM事务,所述访问代理110应用悲观并发控制。如行16所示,类似于在行6中对所述读取HTM事务所做的操作,所述Access()函数检查所述访问的行的所述rid和rv,以标识所述行是否处于活动状态,即并发写入HTM事务是否将写入所述行。所述Access()函数在所述HTM事务启动时立即进行该检查,以尽可能早地标识所述潜在竞争条件以及立即执行异常中止,而不需要耗费诸如处理资源、处理时间、内存资源等计算资源,以便处理最终无论如何都会异常中止的所述写入HTM事务。如果所述行并非处于活动状态的情况下,即将没有并发写入HTM事务访问所述行并且所述行的所述内容被提交,如行17所示,所述Access()函数针对所述写入HTM事务创建撤消集。如行18至20所示,所述Access()函数针对所述访问的行和包括所述写入HTM事务的所述撤消集的所述rid和rv的链路prev创建所述先前副本prev。如行21所示,在这种情况下,在获得对所述行的排他性访问之后,所述Access()函数立即提交,从而通过发起所述xend提交函数调用原地执行提交。然而,如行23至29所示,在所述Access()函数检测到如行24所示的并发写入HTM事务(活动状态行)的情况下,所述Access()函数立即结束如行27所示的写入HTM事务,执行如行28所示的异常中止,以破坏对称性并避免并发写入HTM事务之间的死锁条件。可选地,所述Access()函数重新启动所述写入HTM事务,以允许所述写入HTM事务在截至目前完成的所述并发写入HTM事务的情况下获得对所述访问的行的访问。可以预定义重试阈值,以指示所述重试周期的数目,例如10。因此,所述Access()函数可以重新启动如行25所示的写入HTM事务,直至所述重试周期的数目超出所述预定义阈值水平。
如114所示,所述访问管理器110启动所述HTM事务的验证和提交操作。在所述验证和提交操作期间,所述访问管理器110验证所述读取HTM事务,即验证所述读取HTM事务;建立所述行数据的有效快照;提交写入数据以使所述写入HTM事务进入已提交状态。在所述同一HTM事务中执行所述验证操作和所述提交操作。所述访问代理210可以使用以下伪代码摘录2中呈现的ValiidateCommit()函数,用于通过附加HTM事务来执行所述验证和提交操作。所述访问代理210可以提供所述ValidateCommit()函数作为其API的一部分。
伪代码摘录2:
Figure GDA0003455982140000121
所述ValidateCommit()函数接收所述数据库事务T作为参数,使得作为所述数据库事务T的一部分的每个HTM事务(从所述数据库事务T中划分)得到验证和提交。如行3至26所示,所述ValidateCommit()函数启动并执行附加HTM事务。
如行4至22所示,对于所述读取HTM事务,所述ValidateCommit()函数验证所述访问的行的所述内容有效并且是最近成功提交的数据,同时验证较新数据未被后续并发写入HTM事务(在所述读取HTM事务获取所述访问的行的内容之后)写入所述访问的行。该验证可以通过三步验证来完成。
首先,如行5所示,所述ValidateCommit()函数检查所述并发写入HTM事务是否具有与所述当前数据库事务T相同的tid。如行6所示,在所述读取HTM事务和所述并发写入HTM事务是所述同一数据库事务T的一部分的情况下,所述读取HTM事务可以继续进行(继续)。由于所述读取HTM事务可以从所述数据库事务T的上下文中获取由所述(自行)并发写入HTM事务提交的所述访问行数据的最新内容,所述数据库事务T对于所述同一数据库事务T的HTM事务可能是公共的,因此允许在所述同一数据库事务T内执行此类写后读操作。
然后,如行8所示,所述ValidateCommit()函数检查在所述Access()函数(从所述数据库事务T的所述读取集(rs)中检索)期间由所述读取HTM事务记录的所述行rid值和rv值是否与所述当前行rid值和rv值相同。如行9所示,在所述行rid值和rv值相同的情况下,所述读取HTM可以继续进行(继续)。
如行11所示,所述ValidateCommit()函数检查所述并发写入HTM事务是否完成,即所述行rv值是否大于在所述Access()函数期间(从所述数据库事务T的所述读取集(rs)中检索)由所述读取HTM事务记录的所述行rv值。如行12所示,所述读取HTM事务异常中止,因为在所述Access()函数期间获取的所述行内容(从所述prev链路中获取)并非是最近成功提交的数据。
如行15所示,所述ValidateCommit()函数检查后续并发写入HTM事务是否访问了所述行(在所述HTM读取事务已获取所述行数据之后)。此类场景可以由不同于所述行rv值(在e.row.prev中)的所述行rv值(在e中)来表示。如行16所示,所述读取HTM事务异常中止,因为在所述Access()函数期间获取的所述行内容(从所述prev链路中获取)并非是最近成功提交的数据。
如行23至24所示,对于在所述访问的行中成功提交数据的所述写入HTM事务,所述ValidateCommit()函数使用所述数据库事务T的所述tid和tv来更新所述全局LCA 214(lca)。如行25所示,更新所述全局LCA 214(lca)之后,所述ValidateCommit()函数增加所述本地LCA 214(cached_lca)中的所述本地版本值(tv)。如行26至27所示,在所述写入HTM事务未成功提交所述访问的行中的数据的情况下,所述数据库事务被回退并且异常中止。
现参考图4,图4是本发明的一些实施例提供的并发HTM事务的示例性STE执行的示意图。示例性STE执行流402使用诸如所述过程100的过程,向诸如所述数据库212的内存数据库呈现示例性SQL数据库事务的简化高级视图,在所述数据库中,并发读取HTM事务和写入HTM事务可能会发生冲突。椭圆404A、404B和404C中的每一个都保持SQL语句,所述SQL语句适于在单个HTM事务的上下文中执行的单个划分,其中所述椭圆404A利用读取HTM事务,所述椭圆404B利用写入HTM事务,所述椭圆404C利用验证和提交HTM事务。粗体代码是调用相关STE API的所述相应SQL语句的示例性C代码实现方式,例如,诸如所述访问管理器110的访问管理器的所述Acecss()函数和所述ValidateCommit()函数以及明码是由所述访问管理器110实现的示例性STE实现方式。如上所述,用于访问所述数据库212中所述行的所述Acecss()函数和用于验证和提交在所述Acecss()函数期间访问的数据的所述ValidateCommit()函数作为原子HTM事务执行。
如在读取HTM事务404A和写入HTM事务404B中所示,在索引搜索(IndexSearch())之前启动所述HTM事务,以促进基于HTM的并发索引。然而,基于HTM的索引不在本发明的范围内,因此不讨论相关问题,例如插入和/或删除操作以及特定数据结构。在所述索引搜索之后,在所述同一HTM事务404A内,调用所述管理器110的所述Acecss()函数来执行所述数据访问。引入可以例如在所述访问管理器110内实现的两个示例性辅助函数:IsCommitted(),用于读取HTM事务和写入HTM事务;SetUncommitted(),用于所述写入HTM事务。通过假设每个HTM事务一次访问一行来简化所述执行流402,因此所述SetUncommititted()函数和所述IsCommiitted()函数可能不知道所述执行事务。此外,所述Acecss()函数可以添加对所述读取集(在读取HTM事务的情况下)或撤消集(在写入HTM事务的情况下)的访问并进行其它计算,为简洁和清楚起见,本文不作描述。在所述(乐观)读取HTM事务404A期间,可以使用所述IsCommitted()函数来确定是使用所述行(内容)的当前版本还是先前版本。这可以完全在所述HTM事务上下文中完成,因此仅可在用户事务从所述行中获取所述内容(数据)之后而不是在所述Acecss()函数中调用提交所述访问(读取或写入)HTM事务的所述-xend()指令。然而,如针对在所述Acecss()函数中获得排他性访问的所述成功悲观读取HTM事务404B所示,可以在所述写入HTM事务的上下文中提交(写入所述行)所述数据(row=Access(Write,row))。提交所述写入HTM事务之前,链接所述行的先前内容的副本(最近成功提交的所述行的版本)(row.prev=copy(row))。如上所述,所述副本(prev)可以位于所述写入数据库事务的所述撤消集中。所述SetUncommitted()函数准许对所述写入HTM事务的排他性访问,因此,如果所述IsCommitted()函数返回FALSE,则所述写入HTM函数失败(异常中止)。
如所述过程100中所描述的,所述STE执行设计和实现用于解决本文上述HTM事务的两个主要限制,所述两个主要限制是用于访问所述内存数据库212的实现方式所固有的。第一限制是所述缓存行大小限制和关联性,通过将所述数据库事务划分为适于缓存行的多个HTM事务来解决该限制(步骤102)。第二限制涉及对冲突的过度反应,即潜在竞争条件,其中并发HTM事务访问同一行,因此通常是至少一个所述HTM事务写入所述行的所述同一缓存行。本领域中已知的当前现有方法通常可以在检测到所述冲突时异常中止所述数据库事务,因为所述并发事务可以彼此异常中止,直至所述并发事务中的一个被强制使采取全局锁定。因此,减少与所述数据库事务异常中止有关的异常事件的数目是一项主要挑战,由使用所述过程100的所述STE高效解决,其中所述数据库异常中止因所述数据库层面的潜在冲突而被软件触发,可以命名为显式异常中止。所述STE应用两个主要机制来减少异常中止事件的数目-缓存所述全局LCA 214(lca),以便为每个所述线程208维护本地LCA副本(cached_lca),最小化所述竞争(冲突)窗口。这些机制可以在所述过程100的一个或多个步骤106、108、110、112和114期间应用,现进行更加详细地描述。为了使用所述显式异常中止的所述软件触发,所述STE可以使用其它硬件机制,例如,Intel TSX块的受限事务内存(Restricted Transactional Memory,简称RTM)模式,而不是可由所述现有方法用于访问所述数据库212的硬件锁省略(Hardware Lock Elision,简称HLE)模式。
可以对所述全局LCA 214(lca)进行缓存,以消除可能由所述线程208需要对全局LCA 214(lca)进行的频繁和异步访问和更新引起的潜在瓶颈,以便保持所述访问的行的内容(数据)的有效性、一致性和/或完整性。如伪代码摘录1中所示,通过执行所述Access()函数来启动对所述数据库212的某一行的HTM事务的线程208t1需要访问所述全局LCA 214(lca)以读取与线程208t2相关联的时隙,所述线程208t2并发写入所述同一行。所述全局LCA214(lca)中的所述线程208t2的所述时隙可以由所述线程208t2频繁、异步更新。这些更新操作可以使得由所述线程208t1启动的所述HTM事务异常中止,因为由所述线程208t1启动的所述HTM事务实际上封装由所述线程208t2启动的所述并发写入HTM事务的所述访问执行(Access()函数)。
为了减少所述线程208对所述全局LCA 214(lca)进行的访问的次数,每个线程208维护所述全局LCA 214(lca)的本地副本,即所述cached_lca,如上所述。所述cached_lca可能部分过时,因此在下文所述的关键时期,所述线程208可能需要访问所述全局LCA 214(lca),以同步其本地cached_lca与所述全局LCA 214(lca)。因此,所述访问管理器110通常可以使用所述cached_lca本地副本,仅当可能由于不安全的cached_lca本地副本(即过时的cached_lca本地副本)引起疑似冲突时才访问所述全局LCA 214(lca)。这可以显著减少对所述全局LCA 214(lca)进行的访问的次数,从而消除潜在瓶颈。
如行6(对于读取HTM事务)和16(对于写入HTM事务)所示,在所述访问的行处于活动状态的情况下,所述状态根据比所述HTM事务的所述tid和tv更新的所述访问的行的所述rid值和rv值标识,执行所述Access()函数的所述线程208可以使用所述cached_lca而不是所述全局LCA 214(lca)。然而,在所述Access()函数确定所述行处于活动状态的情况下,这可能是由于所述cached_lca中的过时cached_lca[id]引起的。在此类情况下,当疑似并发HTM事务正在进行中时,所述Access()函数可以使用利用所述访问的行的所述rid值和所述并发HTM事务的所述类型来触发所述HTM事务的异常中止,以便允许所述线程208更新其cached_lca[id]。为了触发所述HTM事务异常中止,所述Access()函数可以使用下述代码摘录1中呈现的效用函数htm_ste_abort。
代码摘录1:
Figure GDA0003455982140000151
Figure GDA0003455982140000161
如代码摘录1中所示,用于异常中止所述HTM事务的实际异常中止触发是所述Intel IA指令集TSX扩展的固有_xabort(code)。然而,由于所述固有_xabort(code)需要即时参数,因此可以对每种情况(场景)使用单独的条件。这可以通过行3中切换条件下的跳转表高效完成。这意味着可以将所述tid限制为126,因为所述固有_xabort()code参数被限制为提供用于即时值的高位字节(8位),保留一位用于标识所述访问类型。所述code参数的提醒专用于回退锁。为了支持超出126个线程,可能需要在所述同一code参数上过载多个tid,这样的效率较低并且可能将所述STE的可扩展性限制为超出126个线程208。为了确保提高可扩展性,可以将更多异常中止信息传输至显式HTM事务异常中止的htm_ste_abort()异常中止处理程序。这可以通过一种或多种技术、方法和/或实现方式来实现,例如:
通过新ISA实现非事务写入和/或分配专用地址范围;
允许对HTM异常中止时未恢复的(处理器)硬件寄存器进行写操作。此类寄存器可以存在,但当前在HTM事务中写入它们会触发强制性异常中止。这种方法可能需要对本领域中已知的所述处理节点201的基本输入/输出系统(Basic Input/Output System)的简单补丁;
在所述用户异常中止代码被多路复用的情况下,_xbegin()的返回值具有16个保留位,可用于将所述异常中止信息传输至所述htm_ste_abort()异常中止处理程序。
如上所述,可以使用支持所述HTM事务的所述Intel IA指令集TSX扩展来为所述Intel HTM实现所述STE。所述STE可以使用下述代码摘录2中呈现的示例性ste_begin函数来控制所述HTM事务。
代码摘录2:
Figure GDA0003455982140000162
Figure GDA0003455982140000171
Figure GDA0003455982140000181
如果所述HTM事务成功启动,则所述ste_begin函数返回TRUE;如果由于导致潜在竞争条件的冲突HTM事务而需要数据库事务异常中止,则返回FALSE。如行28所示,启动HTM事务上下文(-xbegin))。如行32所示,所述HTM事务获得对所述行的访问,即fallback_lock=locked,并且可以成功地启动,因此所述ste_begin函数返回TRUE。在由于并发HTM事务而导致冲突或容量异常中止的情况下,所述ste_begin函数跳转以执行行37至80。如行33所示,所述HTM事务可以被重新启动预定义数目的重试周期,直至超出预定义重试阈值htm_retry(例如,预定义为10),所述预定义重试阈值htm_retry是针对所述HTM事务的每次失败启动在行72处递增的计数器。一旦达到所述重试阈值(如行75所示),所述ste_begin函数就会中断(如行77所示)。中断之后,所述HTM事务可能会转移至回退模式,在行84中进行全局锁定并串行执行。一旦所述HTM事务进行所述fallback_lock,所有其它HTM事务将在检查行32中的锁定条件时异常中止。这种串行化可能会导致访问所述数据库212的主要性能损失,并证明了避免所述STE所做的此类冲突的益处。如行43至68所示,在所述HTM事务异常中止事件由应用触发的情况下(用户异常中止),即所述异常中止事件是显式异常中止,所述HTM事务执行不计为重试周期。
在所述ste_begin函数检测到所述访问的行的潜在不安全rid和rv的情况下,所述ste_begin函数可能会触发显式异常中止,其中所述疑似并发HTM事务的所述rid和所述访问类型(读取或写入)作为所述显式异常中止处理程序的参数。如行40所示,所述HTM事务异常中止处理程序可以标识所述异常中止事件是用户触发的异常中止(用户异常中止);如行46所示,所述ste_begin函数可以将所述潜在并发写入HTM事务的所述tid提取到uid,试图将所述uid从所述全局LCA 214(lca)更新为所述cached_lca。在所述cached_lca[uid]已更新的情况下(如行50所示),所述ste_begin函数可以重试所述HTM事务,假设所述rv和uid组合在所述重试周期期间可能是安全的。然而,如果所述cachea_lca[uid]未更新,则意味着所述rv和uid将所述行标识为处于活动状态并由并发写入HTM事务访问。在此类情况下,所述ste_begin函数可以执行如下操作:
-对于读取HTM事务:根据所述访问数据库事务uid的所述uid,将所述访问的行标记为处于活动状态,如行58所示。如果所述ste_begin函数在所述访问的行的所述rid中标识相同的ID值并且所述访问的行的所述rv保持相同,则可以指示不存在数据库事务异常中止。在此类情况下,所述HTM事务将获取(读取)所述行的内容(最近成功提交的数据)的所述先前版本,如所述伪代码摘录1中行10所示。
-对于写入HTM事务:如行64所示,所述必须截然不同的tid和uid由所述ste_begin函数用于破坏所述执行的对称性。所述ste_begin函数可以通过返回FALSE(如所述代码摘录2中行65所示)确定异常中止所述数据库事务以避免死锁。在不超出所述重试阈值的情况下,所述ste_begin函数可以启动重试周期以重试启动所述HTM,直至使用所述uid标识的所述数据库事务提交或异常中止。
因此,缓存所述全局LCA 214(lca)并使用本地副本cached_lca可以显著减少由于读取并发访问线程208的实际最后版本tv而引起的冲突异常中止,同时所述并发访问线程208将频繁更新所述相应tv。
然而,在各种工作负载中,可能存在实际竞争条件,即多个线程208重复写入同一行,因此由所述线程208启动的所述数据库事务可能彼此异常中止,直至一个或多个所述线程208被强制采用串行回退路径。为了减少所述冲突并因此减少因所述并发数据库事务重复访问所述同一行导致的所述潜在竞争条件,所述STE使用一个或多个机制来最小化所述竞争窗口,在所述竞争窗口中,所述线程208可能彼此异常中止。
所述STE实现方式可以遵循例如Intel的“Intel 64和IA-32架构优化参考手册,2016年”出版物中所描述的Intel的优化手册所规定的准则,所述出版物的公开内容以并入的方式引入本文。遵循这些准则,所述STE可以将所述实际冲突内存访问移向所述HTM事务的关键部分的末端。实际上,所述冲突写入访问可以紧接在所述HTM提交指令之前。因此,由并发访问所述同一行的另一线程208引起的(缓存)窥探事件异常中止所述HTM事务的所述提交指令的概率非常低。
现参考图5,图5是本发明的一些实施例提供的示出最小化竞争窗口的代码摘录的捕获。代码段502表示在读取HTM事务TR期间执行的内存访问,代码段504表示在并发写入HTM事务TW期间使用如伪代码摘录1中所描述的Access()函数写入同一行执行的内存访问。所指示的代码行(在矩形中)示出了称为竞争窗口的时间窗口,其中所述写入HTM事务TW易受攻击,即由所述并发读取HTM事务TR引起的窥探可能导致所述写入HTM事务TW异常中止的时间。所述竞争窗口从第一共享写入完成时的周期开始,直至所述-xend完成为止。由于所述-xend在所述线程208内部并且可能需要非常少的机器周期(所述处理器202),同时由于所述rv和rid通常在启动所述写入HTM事务TW的所述线程208的所述缓存中,写入rv和rid通常可以持续一个机器周期。因此,所述竞争窗口可能非常短,仅持续几个机器周期。
因此,所述STE显著减少了所述HTM事务的异常中止事件的数目,因此所述数据库事务的异常中止事件的数目显著提高了对所述数据库212的访问性能。然而,所述STE可以通过减少和/或消除用于访问所述数据库212中同一行的相同HTM事务的连续异常中止事件的概率来进一步减少读取或写入HTM事务的HTM事务异常中止事件的数目。
所述读取HTM事务TR可以使用所述cached_lca,因此所述读取HTM事务TR从存储器中读取的唯一共享数据(与所述并发写入HTM事务共享)是所述访问的行标识信息。具体地,所述访问的行的所述rid值和rv值是唯一变量,通过所述写入HTM事务TW的所述写入访问写入,经访问以由所述读取HTM事务TR读取。因此,消除了所述读取HTM事务TR与所述写入HTM事务TW之间竞争的概率,因为所述写入HTM事务TW写出所述HTM事务的所述rid和rv。在所述写入HTM事务TW写入所述rid值和rv值的情况下,在所述读取HTM事务TR读取它们之前和在所述读取HTM事务TR被提交之前,所述读取HTM事务TR将异常中止。然而,在所述写入HTM事务TW已提交的情况下,然后仅在启动所述写入HTM事务TW的所述数据库事务提交或异常中止之后,另一写入HTM事务才能够再次写入所述行rid和rv。因此,所述读取HTM事务TR将再次异常中止的概率约等于导致所述读取HTM事务TR首先异常中止的所述写入HTM事务TW将异常中止和重试的概率,将与所述读取HTM事务TR并发再次写入所述同一行。
由写入某一行的所述写入HTM事务TW执行的步骤的序列如针对伪代码摘录1中的所述Access()函数所述:
(1)读取所述访问的行的所述rid和rv;
(2)检查启动包括所述写入HTM事务TW的所述数据库事务的所述相应线程208的所述cached_lca中的所述rid;
(3)将所述访问的行的所述内容复制到本地撤消集条目;
(4)更新(写入)所述访问的行的所述rid和rv;
(5)提交所述写入HTM事务TW
在所述写入HTM事务TW导致所述读取HTM事务TR异常中止的情况下,这在步骤4发生,其中所述写入HTM事务TW入行信息rid和rv,这限于几个机器周期并且在所述提交操作之前发生。因此,仅在另一HTM事务在所述写入HTM事务TW执行步骤5之前读取或写入所述访问的行的所述rid和rv的情况下,所述写入HTM事务TW在导致所述读取HTM事务TR异常中止之后才可能异常中止。如针对伪代码摘录1中的所述Access()函数所示,通过写入一个缓存行来利用步骤4,紧接着的指令是步骤5,因此发生此类情况的概率非常低。
所述STE可以对所述验证和提交HTM事务应用相同的实现方式。如伪代码摘录2所示,使用所述ValidateCommit()函数的验证和提交HTM事务TC在行21中写入所述全局LCA214(lca)。行23中的以下指令将提交所述HTM事务,因此仅在由另一线程208启动的HTM事务引发窥探并且同时检查所述访问的行的所述版本(rid)以确定所述访问的行的内容(数据)是否提交的情况下,才可能发生冲突。由于所述提交指令只需几个机器周期,因此发生此类情况的概率较低。然而,由从所述全局LCA214(lca)读取引起的缓存窥探可能导致所述验证和提交HTM事务TC异常中止。所述从所述全局LCA 214(lca)读取可以源自获得所述先前值的用户异常中止的读取HTM事务和/或源自访问所述全局LCA 214(lca)的并发验证和提交HTM事务TV,以便确定所述未提交的行是否仍未提交。
在源自所述用户异常中止的HTM事务的窥探的情况下,所述读取HTM事务获取所述行的所述先前内容(最近成功提交的数据),因此可能不会重试。因此,所述读取HTM事务可能不会导致对所述验证和提交HTM事务TC的其它异常中止。
在源自所述并发验证和提交HTM事务TV的窥探的情况下,存在两种可能的场景。在第一场景中,所述并发验证和提交HTM事务TV成功完成,因此不会再次异常中止所述验证和提交HTM事务TC。在第二可能的场景中,在所述并发验证和提交HTM事务TV提交之前,所述验证和提交HTM事务TC重试并更新(写入)其在所述全局LCA214(lca)中的时隙,从而导致所述并发验证和提交HTM事务TV异常中止。在这种情况下,由于所述并发验证和提交HTM事务TV在写入所述全局LCA 214(lca)(仅需要几个机器周期)之后立即提交,因此在所述竞争窗口内,所述并发验证和提交HTM事务TV再次重试的概率非常低。
所述验证和提交HTM事务可能较大,但通常是只读访问,直至对所述全局LCA 214(lca)的最终写入访问更新所述相应线程208的所述相应时隙,然后紧跟着所述提交操作。由于所述STE可以使用所述Intel HTM和所述Intel IA指令集TSX扩展,因此所述较大只读访问可能不会出现问题。这是由于所述Intel HTM可以使用较大布隆过滤器来检测冲突,同时允许从所述缓存203中逐出读取集条目,而不异常中止所述HTM事务。这允许所述HTM适应非常大的读取集,因此可能较大的只读前缀是可以容忍的。
可以分析方式证明和验证所述STE实现方式的正确性,即保持串行化和避免死锁。
首先,验证所述STE的安全性,即所述HTM事务的串行化,以遵循由所述执行流规定的顺序。数据库事务Ti是在提交操作ci之后的一组读取ri(x)和写入wi(x),其中x是数据库的行,所述数据库包含多个行X,使得x∈X。如本领域中已知的,如果两个操作都针对同一数据项进行并且其中至少一个是写入访问,则所述两个操作称为冲突。据说,如果oj(x)是读取访问并且oi(x)是写入访问,并且所述读取操作oj(x)读取(获取)所述写入操作oi(x)写入的数据,或者如果oi(x)和oj(x)都是写入操作并且所述行x的最终值由所述写入操作oj(x)写入,则在冲突条件下,操作oi(x)先于操作oj(x)。
执行的串行化图是有向图,其节点是提交的事务,其边缘是所述数据库事务Ti→Tj(i≠j),使得Ti的其中一项操作优于Tj的其中一项操作并与之冲突。可串行化定理在当且仅当执行创建非循环串行化图时确保所述执行保持可串行化。
辅助定理1:如果Ti和Tj是使用STE划分的两个数据库事务并且(i≠j),则ci和cj具有可串行化特性。
证明:由于ci和cj都在HTM事务中执行,即伪代码摘录2中的行3至行23,以及由于HTM实现方式具有单个全局锁语义,ci→cj或cj→ci。因此,在STE执行中,数据库事务具有固有顺序;据说,如果ci先于cj,则Ti先于Tj
辅助定理2:如果两个操作oi(x)和oj(x)冲突,当且仅当Ti先于Tj时,oi(x)才会先于oj(x)。
证明:矛盾假设在冲突条件下oj(x)先于oi(x),Ti先于Tj。如果所述操作oi(x)从所述写入操作oj(x)向其写入的同一行x读取(在oi(x)是读取操作的情况下)或向所述同一行x写入(在oi(x)是写入操作的情况下),如所述伪代码摘录1中行6或行16所示,Ti在所述全局LCA 214(lca)中标识Tj的所述tv,这意味着Tj已提交,Ti仍处于活动状态(正在访问所述行),如所述伪代码摘录2中行21所示。
根据辅助定理1和2可以得出以下结论,即在所述串行化图中存在从Ti到Tj的边缘的情况下,i<j并且因此所述图是无循环图。这样,根据所述可串行化定理,遵循所述STE算法的数据库事务T具有可串行化特性。
现在验证所述STE的进程,即避免死锁,以确保执行进程。STE中的每个事务Ti具有唯一tid,如伪代码摘录1中行24所示,所述tid用于破坏对称性并避免死锁。因此,在wi(x)和wj(x)冲突并且Ti的所述tid大于Tj的所述tid的情况下,wj(x)可以等待Tj提交或异常中止,而在wi(x)标识Tj的所述tid的情况下,它会异常中止以避免死锁。由于所述tid是唯一的数字,因此恰好一个数据库事务可以在所述冲突中幸存,可以避免所述死锁。所述进程的另一方面是:在Ti对Tj读取的行进行写入并且Tj对Ti读取的行进行写入的情况下,Ti和Tj都可能异常中止并进入活锁。然而,这是不可能的,因为Ti可能导致Tj仅在Ti提交的情况下异常中止,如伪代码摘录2中行12所示,因此进程得以维持。
虽然所述STE可以在不利用所述HTM并将所述数据库事务划分为HTM事务的情况下实现,但是这样做呈现出明显的优势、优点和益处。这可以通过以下方式证明,即分析实现伪代码摘录1和2中分别呈现的所述Access()函数和ValidateCommit()函数的所述STE,所述STE可以在不使用所述HTM事务的情况下实现最接近、最高效的潜在实现方式。所述HTM的一个优点是其能够适应高效并发索引操作。然而,比较分析集中于所述STE的所述实现方式,而不是在可能有利于任何实现方式的HTM特征上。特别地,分析所述访问以及验证和提交操作,以便比较具有和不具有所述HTM事务的所述STE。
首先分析和讨论具有和不具有HTM的STE的所述访问(Access())泛函性。在避免HTM事务时,写入数据库事务可能需要在访问所述行之前锁存所述访问的行,然后设置rid、rv和prev字段,最后释放所述行的所述锁存。由于STE以悲观写入并发控制为目标,因此可以在创建所述访问的行的数据的副本之前和之后(即在锁存周期之外)使用采样(读取)的所述行版本rid和rv来创建所述撤消集。然而,为了设置实际行版本值,需要锁存所述行。锁存的使用不仅可以阻止其它写入数据库事务,而且可以阻止读取数据库事务。然而,除了等待所述锁存之外,假设所述读取数据库事务不会锁存用于读取的所访问的行(该操作会导致大量开销),相反对所述访问的行的所述版本值进行采样,使用所述数据,然后验证所述版本值没有改变,则所述读取数据库事务可能遇到以下冲突:
(1)在没有并发写入数据库事务(所述访问的行未处于活动状态)的情况下,所述读取数据库事务可以使用实际数据。然而,在所述并发写入数据库事务开始写入所述访问的行的同时所述读取数据库事务正在使用所述行的数据的情况下,所述读取数据库事务可能使用不一致数据,因此可能遇到错误,例如无限循环、除以零等。
(2)在所述读取数据库事务读取所述实际数据完成之后,所述读取数据库事务再次对所述访问的行的所述版本值rv进行采样(读取),以确定所述rv没有改变。然而,在STE中,由于所述写入数据库事务使用悲观并发控制,写入数据库事务可能并发写入所述访问的行,但是异常中止和恢复所述访问的行的所述版本值rid和rv。在这种情况下,所述读取数据库事务可能无法检测不一致(不安全)版本值。为了防止这种情况,所述写入数据库事务可能需要向所述行的版本值添加一些异常中止计数机制,这可能进一步降低所述数据库访问的性能。
(3)所述Access()函数还可以使用所述HTM作为沙盒。使用所述prev字段的读取数据库事务可以从所述并发写入数据库事务撤消集中读取条目。在并发写入数据库事务完成其执行的情况下,所述写入数据库事务可能循环使用保存所述撤消集的缓冲区,这可能导致所述读取数据库事务查看和/或使用不一致的数据。在另一场景中,所述写入数据库事务可以释放保存所述撤消集的所述缓冲区并且可以导致所述读取数据库事务遇到分段错误。为解决此问题,可能需要为所述撤消集实现一些垃圾回收机制,这可能需要附加开销。
因此,访问(Accss())泛函性的无HTM事务实现方式不仅可能更加复杂并且涉及附加开销,而且还允许降低访问所述数据库212的所述多个数据库事务的并行度。在写入数据库事务锁定用于写入的所访问的行时,访问所述同一行的读取数据库事务都不会取得进展。另一方面,在使用所述HTM事务的所述STE中,读取数据库事务始终可以取得进展。在读取HTM事务获得冲突异常中止的情况下,这意味着并发写入HTM事务将新内容(数据)写入所述访问的行,所述提交的数据在所述行的内容的所述先前版本的所述副本row.prev.data中已可用于所述读取HTM事务。
首先分析和讨论具有和不具有HTM的STE的所述验证和提交(ValidateCommit())泛函性。由于所述STE不会针对读取HTM事务锁定所访问的行,因此数据库事务T1可以在并发数据库事务T2向所述同一行写入的同时读取所述访问的行的提交版本。在不具有所述HTM的对称实现方式的情况下,所述数据库事务T1可以看到由所述并发数据库事务T2写入的所述访问的行的先前提交版本(rid和rv),反之亦然,所述数据库事务T2可以看到由所述数据库事务T1写入的另一(不同)所访问的行的先前提交版本。在此类情况下,只有所述数据库事务T1和T2中的一个可以幸存,另一个可能被强制异常中止。否则,所述数据库事务T1可以在所述数据库事务T2之前串行化,所述数据库事务T2可以在所述数据库事务T1之前串行化,这是无效的情况。另一方面,在基于HTM的STE中,所述提交HTM事务验证读取所述访问的行版本值的较新(最近)写入HTM事务处于活动状态并已提交,因此所述数据库事务T1和T2中只有一个可以提交。
利用基于锁的STE,即没有HTM STE,在提交时,所述数据库事务T1必须锁定其自身版本,然后验证所有其它写入数据库事务(包括所述数据库事务T2)处于活动状态且未锁定并已提交。如果所述数据库事务T1获知所述数据库事务T2处于锁定状态,则所述数据库事务T1必须异常中止,因为它无法验证所述数据库事务T2已获知所述数据库事务T1处于锁定状态。然而,如果所述数据库事务T2确实获知所述数据库事务T1处于锁定状态,则所述数据库事务T2也必须异常中止,这可能导致活锁。这种情况不能发生在基于HTM的STE中,在这种情况下,无论是所述数据库事务T1还是所述数据库事务T2都可以提交,因此在高竞争条件下,所述基于HTM的STE可以呈现显著提高的并发性。
通过几个实验来证明使用本发明的一些实施例中所呈现的所述STE方法来增强对所述内存数据库212的事务的方法、过程和系统的性能、益处和/或优点。执行所述实验,以使用流行的基准和工作负载模拟真实世界场景。使用包括Intel Core i7-47703.4GHzHaswell处理器的硬件平台执行实验,所述处理器具有4个核心,每个核心具有两个超过程,用于总共多达8个线程。每个所述核心具有专用L1和L2缓存,其大小分别为32KB和256KB。还存在由全部所述核心共享的8MB L3缓存。
在所述实验期间,比较所述过程100中描述的STE算法(HTM_STE)的性能和操作特性与多个现有数据库事务执行算法。特别地,比较所述STE算法与以下算法:
■HTM_TSO:时间戳排序(Time Stamp Ordering,简称TSO)算法,其中每个线程维护本地版本计数器。然而,安全阵列具有全局特性,读取器以Leis,V.、Kemper,A.和Neumann,T.的“将HTM支持的数据库事务扩展至许多核心”出版物中描述的TSO样式在节点中设置其版本,所述出版物的公开内容以引入的方式并入本文。
■HTM:如Intel架构指令集扩展编程参考中所述的普通Intel HTM算法。
■2PL:采用死锁检测算法的两相锁定,所述死锁检测算法使用Tu,S.、Zheng,W.、Kohler,E.、Liskov,B.和Madden,S.的“多核内存数据库中的快速事务”出版物中描述的悲观并发控制,所述出版物的公开内容以引入的方式并入本文。
■SILO:所述悲观并发控制算法以Tu,S.、Zheng等人的“多核内存数据库中的快速事务”出版物中描述的最佳性能模式运算。
使用DBx1000数据库模型(例如,本领域已知的数据库212,其是可扩展的单节点联机事务处理(On-Line Transaction Processing,简称OLTP)数据库管理系统(DatabaseManagement System,简称DBMS))针对若干基准和工作负载以及工作负载变化执行所述实验。
现参考图6A、图6B、图6C、图6D、图7A、图7B、图7C和图7D,这些图是本发明的一些实施例提供的为比较当前现有方法与用于访问内存数据库的所述分离事务执行(SplitTransaction Execution,简称STE)方法而执行的实验结果的性能对比图。
第一实验工作量是本领域已知的TPC-C基准,目前被视为用于评估OLTP系统的标准基准。所述TPC-C由九个表格组成,模拟以仓库为中心的订单处理应用。然而,本文描述的实验集中于所述TPC-C的五种数据库事务类型中的两种-支付事务和新订单事务,其中工作量由所述两种事务类型中的每一种的50%组成。这两种事务类型构成默认TPC-C组合的大约88%,在用于评估所述STE方法的复杂度方面最为有趣。针对所述TPC-C数据库事务对四种不同变化进行了模拟和实验:
TPC-C(1):在高竞争条件下的读取和写入-仅具有两个仓库的新订单事务。图602A、602B、602C和602D呈现了所述TPC-C(1)工作负载变化的实验结果。
TPC-C(2):在低竞争条件下的读取和写入-仅具有八个仓库的新订单事务。图602E、602F、602G和602H呈现了所述TPC-C(2)工作负载变化的实验结果。
TPC-C(3):在高竞争条件下的写入-仅具有两个仓库的支付事务。图602I、602J、602K和602L呈现了所述TPC-C(3)工作负载变化的实验结果。
TPC-C(4):在低竞争条件下的写入-仅具有八个仓库的支付事务。图602M、602N、602O和602P呈现了所述TPC-C(4)工作负载变化的实验结果。
第二实验工作负载是本领域已知的雅虎云服务基准(Yahoo!Cloud ServingBenchmark,简称YCSB),可以代表大规模联机服务。每个查询访问基于齐普夫分布的单个随机元组,所述齐普夫分布具有控制所述基准中的竞争级别的参数(θ-Z)。针对所述YCSB基准对四种不同变化进行了模拟和实验,其中每种变化由十个访问请求组成:
YCSB(1):在低竞争条件下的读取一在低竞争条件下的只读和统一访问分布(θ=0)。图702A、702B、702C和702D呈现了所述YCSB(1)工作负载变化的实验结果。
YCSB(2):在低竞争条件下的写入-在低竞争条件下的只写和统一访问分布(θ=0)。图702E、702F、702G和702H呈现了所述YCSB(2)工作负载变化的实验结果。
YCSB(3):大部分写入和高竞争-高写入竞争,其中所有查询中的75%访问10%行的热点(θ=0.9),90%的所述访问是写入。图702I、702J、702K和702L呈现了所述YCSB(3)工作负载变化的实验结果。
YCSB(4):大部分读取和高竞争-高读写竞争,其中θ=0.9,90%的所述访问是读取。图702M、702N、702O和702L呈现了所述YCSB(4)工作负载变化的实验结果。
执行了所述实验,以便利用所述数据库访问算法来评估所述数据库事务的若干性能参数,其中所呈现的结果是五个不同执行的平均值。特别地,所述评估的性能参数包括:
(1)带宽-以每秒的事务数(Mtx/s-每秒数百万个事务)来度量。所述图602A、602E、602I和602M分别呈现了所述TPC-C(1)、TPC-C(2)、TPC-C(3)和TPC-C(4)工作负载变化的所述带宽实验结果。所述图602A、602E、602I、602M、702A、702E、702I和702M分别呈现了所述YCSB(1)、YCSB(2)、YCSB(3)和YCSB(4)工作负载变化的带宽实验结果。
(2)数据库事务异常中止事件-表示总执行时间中在执行最终异常中止的事务方面所花费时间(工作)的相对部分。所述图602B、602F、602J和602N分别呈现了所述TPC-C(1)、TPC-C(2)、TPC-C(3)和TPC-C(4)工作负载变化的所述数据库事务异常中止事件实验结果。所述图702B、702F、702J和702N分别呈现了所述YCSB(1)、YCSB(2)、YCSB(3)和YCSB(4)工作负载变化的所述数据库事务异常中止事件实验结果。所述数据库事务异常中止事件的评估不包括所述HTM(Intel普通HTM算法),因为所述HTM没有数据库事务异常中止。
(3)HTM事务异常中止事件-表示启动的全部HTM事务中因冲突而异常中止的HTM事务的相对部分。所述图602C、602G、602K和602O分别呈现了所述TPC-C(1)、TPC-C(2)、TPC-C(3)和TPC-C(4)工作负载变化的所述HTM事务异常中止事件实验结果。所述图702C、702G、702K和702O分别呈现了所述YCSB(1)、YCSB(2)、YCSB(3)和YCSB(4)工作负载变化的所述HTM事务异常中止事件实验结果。呈现所述HTM事务异常中止事件的实验图表不呈现所述HTM的结果,因为所述HTM呈现了大量HTM事务,使得其不相关。因此,从所述实验结果的相应图表中删除所述HTM结果,以保持所述结果的图表的清晰视图,从而允许比较所述HTM STE评估与相关算法。同时,所述HTM事务异常中止事件的评估不包括不会使用HTM事务的所述2PL和SILO算法。所述结果也不会呈现因显式用户异常中止而导致的HTM事务异常中止事件,所述显式用户异常中止相对于返回至上述回退路径予以避免。
(4)HTM回退事件-表示全部HTM事务中因冲突和/或容量异常中止事件返回至所述回退路径的HTM事务的相对部分。所述图602D、602H、602L和602P分别呈现了所述TPC-C(1)、TPC-C(2)、TPC-C(3)和TPC-C(4)工作负载变化的所述HTM回退事件实验结果。所述图702D、702H、702L和702P分别呈现了所述YCSB(1)、YCSB(2)、YCSB(3)和YCSB(4)工作负载变化的所述HTM回退事件实验结果。同样,所述HTM回退事件的评估不包括不会使用HTM事务的所述2PL和SILO算法。
从图602(A至P)和702(A至P)可以明显看出,所述HTM_STE呈现了全部所述基准变化中所有其它评估的数据库事务算法的所有性能参数的理想结果。通常,如图602A、602E、602I、602M、702A、702E、702I和702M所示,所述HTM_STE呈现优于所有其它算法的带宽性能,特别是诸如所述线程208的线程数目的增加。当所述HTM_STE呈现更好的带宽性能时,所述HTM_STE还完全从所述线程208的容量(即处理器利用率)中消除所述HTM事务异常中止事件以及所述数据库事务异常中止事件的依赖性。从图602C、602G、602K、602O、702C、702G、702K和702O可以明显看出,在使用所述HTM_STE时,由于所述容量而引起的HTM事务异常中止事件几乎不复存在。这意味着,即使在增加所述线程208的数目使得每个线程208的容量(处理器计算资源)减小时,HTM事务异常中止事件的数目也不会显著增加。这自然会对所述数据库事务异常中止事件造成影响,从图602B、602F、602J、602N、702B、702F、702J和702N可以明显看出,这也不会随着所述线程208的数目的增加而显著增加。随着事务异常中止事件的数目的减少,在使用所述HTM_STE时,HTM后退事件的数目也会减少,如图602D、602H、602L、602P、702D、702H、702I和702P所示。
相对于每个现有数据库访问算法进一步分析了所述HTM_STE的性能评估结果。
首先,对比所述HTM(Intel普通HTM算法)分析所述HTM_STE的结果。如前所述,仅针对带宽性能参数图(即602A、602E、602I、602M、702A、702E、702I和702M)呈现所述数据库事务异常中止事件和HTM事务异常中止事件的所述HTM的结果。一方面,这是因为所述HTM没有数据库事务异常中止,因为所述HTM事务封装了完整的数据库事务,因此数据库事务异常中止被转换为HTM异常中止。另一方面,由于容量限制和粗略冲突检测,在所述HTM异常中止时,HTM呈现在数量级上高于所述HTM_STE和所述HTM_TSO的事务异常中止事件和/或回退事件。由于所述HTM仅执行实际工作,因此所述HTM不会产生任何开销。正如所预期的,在满足HTM大小限制的工作负载中,所述HTM呈现最佳带宽性能。例如,TPC-C(3)、TPC-C(4)、YCSB(1)、YCSB(2)、YCSB(3)和YCSB(4)数据库事务确实符合HTM大小限制。因此,当由诸如所述线程208的单个线程执行时,所述HTM为这些工作负载变化呈现最佳带宽结果,所述工作负载变化由对于只读和/或只写工作负载的低竞争表征,例如如图702A和702E所示。另一方面,对于TPC-C(1)(图602A)和TPC-C(2)(图602E),因超出所述HTM大小限制的多次插入(新订单),所述HTM呈现最低带宽性能。然而,即使对于在访问所述数据库212的线程208的数目增加时符合所述HTM大小限制的所述数据库事务,所示HTM的所述带宽也会减小,而其它算法,特别是所述HTM_STE和所述HTM_TSO呈现更高带宽。这是因为每个所述线程208可用的容量减小,所述HTM可能不再扩展。因此,即使对于所述HTM呈现最佳性能的工作负载变化,例如YCSB(1)(图702A)和YCSB(2)(图702E),对于八个线程208,所述HTM_STE呈现更佳带宽。对于由较高竞争表征的TPC-C工作负载变化,例如TPC-C(3)或TPC-C(4),甚至对于两个或多个线程,所述HTM_STE的执行性能优于所述HTM,分别如图602I和602M所示。对于由较高竞争表征的YCSB工作负载变化,例如YCSB(3)或YCSB(4),对于访问所述数据库212的甚至更少线程208,所述HTM_STE的执行性能优于所述HTM。在YCSB(4)中,对于三个或多个线程208,所述HTM_STE呈现出优于所述HTM的性能,如图702M所示。在YCSB(3)中,甚至对于两个线程208,所述HTM_STE呈现出优于所述HTM的性能,如图702I所示。
接下来,对比所述SILO算法分析所述HTM_STE的结果。与所述SILO相比,所述HTM_STE呈现更高性能,这主要是由于减少了针对异常中止事务(数据库事务异常中止事件)所花费的时间以及消除了写后读数据库事务的开销。图702A和702B呈现YCSB(1)的结果,所述YCSB(1)由与只读数据库事务相结合的低异常中止工作(即在异常中止数据库事务方面花费的时间较少)表征,因此不会遇到写后读事务,同时消除对所述写入集的需要。因此,由于YCSB(1)仅包括读取数据库事务,所以存在少量的数据库事务异常中止事件,在异常中止的数据库事务方面花费的时间显著减少,如图702B所示;因此,所述SILO的带宽性能与所述HTM_STE十分类似,如图702A所示。为了体现所述HTM_STE相较于所述SILO的性能优势,所述分析集中于由所述写后读数据库事务产生的影响。可以看出,对于所述TPC-C,在不存在读取集(不存在写后读)时,例如在TPC-C(3)(图602I)和TPC-C(4)(图602M)中,或者在存在很少写入组时,例如在TPC-C(1)(图602A)和TPC-C(2)(图602E)中,所述SILO和HTM_STE针对单个线程208的执行方式十分类似。对于具有只读数据库事务(例如,YCSB(1))或只写数据库事务(例如,YCSB(2))(分别如图702A和702E所示)的YCSB工作负载也是如此。然而,对于由具有不可忽视数目的访问的读取数据库事务和写入数据库事务的混合表征的工作负载,例如YCSB(3)和YCSB(4),甚至对于单个线程208,所述HTM_STE的执行性能明显优于所述SILO,分别如图702I和702M所示。有关所述SILO对数据库事务异常中止事件的敏感性,可以参见图702F,其中除所述SILO之外,所有评估的数据库访问算法都设法避免竞争,所述SILO还呈现所述最低带宽性能,如图702E所示。因此,所述HTM_STE相对于所述SILO的主要优点在于工作负载,所述工作负载由导致开销惩罚和高数据库事务异常中止率的写后读数据库事务表征,如图702I所示。
现在,对比所述2PL算法分析所述HTM_STE的结果。所述2PL算法采用死锁检测,对于由只读数据库事务或只写数据库事务表征的工作负载,例如YCSB(1)和YCSB(2),在性能方面与所述SILO相当,分别如图702A和702E所示。对于TPC-C(3)和TPC-C(4)也是可以看出的,分别如图602I和602M所示。对于由组合的读取和写入数据库事务(访问)表征的工作负载,由于所述读后写导致开销增加,因此所述2PL的性能远远低于所述SILO,例如对于TPC-C(1)和TPC-C(2),分别如图602A和602E所示。因此,由于对于这些工作负载,所述HTM_STE的执行性能优于所述SILO,所述HTM_STE自然会显著优于所述2PL。由于所述2PL集中于死锁检测,即避免数据库事务异常中止事件,从而在异常中止的数据库事务方面投入最短时间,因此可能想要比较分配给最终异常中止的处理数据库事务的时间量,即对比所述2PL,所述HTM_STE损失的工作。可以看出,对于TPC-C(1-4)工作负载,所述2PL几乎不会呈现任何数据库事务异常中止事件,因此所呈现的数据库事务异常中止事件远远少于所述HTM_STE。同样,对于由只读或只写数据库事务(分别如YCSB(1)和YCSB(2))表征的YCSB工作负载也是可以看出的。然而,对于由组合的读取和写入数据库事务表征的工作负载,例如YCSB(3),所述2PL呈现出远远多于HTM_STE的数据库事务异常中止事件,因此增加了异常中止的工作(以处理最终异常中止的数据库事务)。这是由所述HTM_STE实现的悲观写入事务引起的,所述HTM_STE通过在早期阶段(在事务启动时)检测所述冲突事务来减少处理最终异常中止的数据库事务所花费的损失工作量。
现在,对比所述HTM_TSO算法分析所述HTM_STE的结果。与所述HTM_STE类似,所述HTM_TSO还将数据库事务切割(削割)成多个HTM事务。所述HTM STE相对于所述HTM_TSO的主要优点在于,通过使用本地(缓存的)数据库事务信息(cached_lca)来减少HTM事务之间的冲突,同时缩小所述并发HTM事务在其中可能彼此冲突的冲突窗口。这可以允许读取HTM事务对所述HTM_STE中的其它HTM事务不可见,这与所述HTM_TSO相反,在所述HTM_TSO中,每个HTM事务在由全部所述HTM事务共享的集中式记录中读取和/或写入其版本。这可能导致瓶颈,可能将所述HTM_TSO的性能和/或扩展限制到大量线程208。根据预期,对于Z(θ)=0的只读和只写工作负载场景,例如YCSB(1)和YCSB(2),所述HTM_STE和所述HTM_TSO呈现基本上类似的性能。这在所述评估实验中得到证实,分别如图702A和702E所示。即使所述HTM_STE和HTM_TSO基本上类似,但由于HTM事务异常中止事件的数目较少,因此所述HTM_STE呈现出率胜一筹的带宽性能,如图702C和702G所示,这导致回退路径执行较少,如图702D和702H所示。然而,对于由组合的读取和写入数据库事务表征的工作负载,所述HTM_STE的执行性能远远优于所述HTM_TSO。这可以应用于所述TPC-C工作负载,例如TPC-C(1)和TPC-C(2),如图602A和602E所示。这也可以应用于所述YCSB工作负载中的一些,例如YCSB(3)和YCSB(3),如图702I和702M所示。这是因高竞争致使处理最终异常中止的数据库事务而投入的异常中止工作量引起的,对于所述HTM_TSO而言,所述高竞争远远高于所述HTM_STE,如相应图602B、602F、702J和702N所示。对于全部所述评估的工作负载,即TPC-C(1-4)和YCSB(1-4),所述HTM_STE呈现出远远少于所述HTM_TSO的因竞争引起的HTM事务异常中止,如图602C、602G、602K、602O、702C、702G、702K和702O所示。然而,所述HTM_STE还通过减少因所述HTM事务异常中止事件引起的回退路径事件的数目来进一步减少HTM事务异常中止事件的已减少数目,如图602D、602H、602L、602P、702D、702H、702L和702P所示。这通过以下方式实现,即:减少所述HTM事务之间的冲突实现,如上文针对使用所述过程100的所述HTM_STE所描述的那样;进一步降低后续HTM事务冲突的概率。
可预测,在从本申请案专利的有效期期间,将开发出许多相关HTM技术且术语“HTM技术”的范围意图先验地包括所有此类新技术。
本文所使用的术语“约”是指±10%。
术语“包括”以及“有”表示“包括但不限于”。
术语“由……组成”表示“包括但不限于”。
除非上下文中另有明确说明,此处使用的单数形式“一个”和“所述”包括复数含义。例如,术语“一个复合物”或“至少一个复合物”可以包括多个复合物,包括其混合物。
在整个本申请案中,本发明的各种实施例可以范围格式呈现。应理解,范围格式的描述仅为了方便和简洁起见,并且不应该被解释为对本发明范围的固定限制。因此,对范围的描述应被认为是已经具体地公开所有可能的子范围以及所述范围内的个别数值。例如,对例如从1到6的范围的描述应被认为是已经具体地公开子范围,例如从1到3、从1到4、从1到5、从2到4、从2到6、从3到6等,以及所述范围内的个别数字,例如1、2、3、4、5和6。不管范围的宽度如何,这都适用。
当此处指出一个数字范围时,表示包含了在指出的这个范围内的任意所列举的数字(分数或整数)。短语“在第一个所指示的数和第二个所指示的数范围内”以及“从第一个所指示的数到第二个所指示的数范围内”和在这里互换使用,表示包括第一个和第二个所指示的数以及二者之间所有的分数和整数。
应了解,为简洁起见在单独实施例的上下文中描述的本发明的某些特征还可以组合提供于单个实施例中。相反地,为简洁起见在单个实施例的上下文中描述的本发明的各个特征也可以单独地或以任何合适的子组合或作为本发明的任何合适的其它实施例提供。在各个实施例的上下文中描述的某些特征未视为那些实施例的基本特征,除非没有这些元素所述实施例无效。

Claims (21)

1.一种用于管理内存数据库的硬件事务内存HTM事务的异常中止事件的系统,其特征在于,包括:
处理器,用于控制并发保存到共享内存数据库的多个数据库事务的多个异常中止事件,其中所述多个数据库事务中的每一个被划分为原子地执行的多个HTM事务,以访问数据库的多个行中的一行,其具体方法如下:
分析与多个潜在异常中止事件中的每一个相关联的元数据记录,所述元数据记录包括被至少一个异常中止HTM事务和至少一个其它HTM事务并发访问的所述多个行中的某一行的行ID值和行版本值;
比较所述行ID值和所述行版本值与所述至少一个异常中止HTM事务的本地ID值和本地版本值;
确定所述至少一个异常中止HTM事务与所述至少一个其它HTM事务之间的竞争条件;
所述本地ID值唯一地标识并发启动包括所述HTM事务的所述多个数据库事务的多个线程中的每一个;所述本地版本值是一个自增值,在每次成功提交所述多个数据库事务中的一个事务之后按每个线程递增;
所述行ID值是最近成功提交所述某一行的所述多个线程中的一个相应线程的ID值;所述行版本值是最近成功提交时的所述相应线程的版本值。
2.根据权利要求1所述的系统,其特征在于,所述多个HTM事务中的每一个事务的大小适于所述处理器的单个缓存行。
3.根据权利要求1所述的系统,其特征在于,所述元数据记录包括所述HTM事务的类型,所述类型属于由读取HTM事务和写入HTM事务组成的组的一部分。
4.根据权利要求1所述的系统,其特征在于,所述本地ID值和所述本地版本值分别是全局ID值和全局版本值的本地副本,所述全局ID值和所述全局版本值存储在由所述多个线程共享的共享记录中,其中所述多个线程中的每一个维护由所述每个线程专门使用的所述本地ID值和所述本地版本值的专用副本。
5.根据权利要求4所述的系统,其特征在于,在疑似竞争的情况下,启动所述HTM事务的相应线程分别根据所述全局ID值和所述全局版本值更新所述相应的本地ID值和所述本地版本值。
6.根据权利要求1所述的系统,其特征在于,还包括增加所述元数据记录的大小以包含较大ID值,从而支持增加并发启动所述多个数据库事务的多个线程的数目。
7.根据权利要求1所述的系统,其特征在于,在所述处理器确定可能的竞争条件的情况下,所述异常中止HTM事务被重新启动,直至超出定义预定义重试次数的重试阈值。
8.根据权利要求7所述的系统,其特征在于,在所述HTM事务的启动周期数目超出所述重试阈值之后,相应的数据库事务异常中止。
9.根据权利要求7所述的系统,其特征在于,对于应用指示的异常中止事件,不增加所述重新启动的计数。
10.根据权利要求1所述的系统,其特征在于,所述至少一个异常中止HTM事务和所述至少一个其它HTM事务中的至少一个被强制应用全局锁来串行化对所述某一行的所述访问。
11.一种用于管理内存数据库的硬件事务内存HTM事务的异常中止事件的方法,其特征在于,包括:
监测并发保存到共享内存数据库的多个数据库事务的多个潜在异常中止事件,其中所述多个数据库事务中的每一个被划分为原子地执行的多个HTM事务,以访问数据库的多个行中的一行;
分析与所述多个潜在异常中止事件中的每一个相关联的元数据记录,所述元数据记录包括由至少一个异常中止HTM事务和至少一个其它HTM事务并发访问的所述多个行中的某一行的行ID值和行版本值;
比较所述行ID值和所述行版本值与所述至少一个异常中止HTM事务的本地ID值和本地版本值;
确定所述至少一个异常中止HTM事务与所述至少一个其它HTM事务之间的竞争条件;
所述本地ID值唯一地标识并发启动包括所述HTM事务的所述多个数据库事务的多个线程中的每一个;所述本地版本值是一个自增值,在每次成功提交所述多个数据库事务中的一个事务之后按每个线程递增;
所述行ID值是最近成功提交所述某一行的所述多个线程中的一个相应线程的ID值;所述行版本值是最近成功提交时的所述相应线程的版本值。
12.根据权利要求11所述的方法,其特征在于,所述多个HTM事务中的每一个事务的大小适于处理器的单个缓存行。
13.根据权利要求11所述的方法,其特征在于,所述元数据记录包括所述HTM事务的类型,所述类型属于由读取HTM事务和写入HTM事务组成的组的一部分。
14.根据权利要求11所述的方法,其特征在于,所述本地ID值和所述本地版本值分别是全局ID值和全局版本值的本地副本,所述全局ID值和所述全局版本值存储在由所述多个线程共享的共享记录中,其中所述多个线程中的每一个维护由所述每个线程专门使用的所述本地ID值和所述本地版本值的专用副本。
15.根据权利要求14所述的方法,其特征在于,还包括:在疑似竞争的情况下,启动所述HTM事务的相应线程分别根据所述全局ID值和所述全局版本值更新所述相应的本地ID值和所述本地版本值。
16.根据权利要求11所述的方法,其特征在于,还包括:增加所述元数据记录的大小以包含较大ID值,从而支持增加并发启动所述多个数据库事务的多个线程的数目。
17.根据权利要求11所述的方法,其特征在于,还包括:在确定可能的竞争条件的情况下,所述异常中止HTM事务被重新启动,直至超出定义预定义重试次数的重试阈值。
18.根据权利要求17所述的方法,其特征在于,在所述HTM事务的启动周期数目超出所述重试阈值之后,相应的数据库事务异常中止。
19.根据权利要求17所述的方法,其特征在于,对于应用指示的异常中止事件,不增加所述重新启动的计数。
20.根据权利要求11所述的方法,其特征在于,所述至少一个异常中止HTM事务和所述至少一个其它HTM事务中的至少一个被强制应用全局锁来串行化对所述某一行的所述访问。
21.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求11至20任一项所述方法的步骤。
CN201780089495.1A 2017-04-19 2017-04-19 更新硬件事务内存(htm)用户异常中止元数据的方法及系统 Active CN110520845B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2017/059236 WO2018192645A1 (en) 2017-04-19 2017-04-19 Updating metadata in hardware transactional memory user aborts

Publications (2)

Publication Number Publication Date
CN110520845A CN110520845A (zh) 2019-11-29
CN110520845B true CN110520845B (zh) 2022-06-10

Family

ID=58632961

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780089495.1A Active CN110520845B (zh) 2017-04-19 2017-04-19 更新硬件事务内存(htm)用户异常中止元数据的方法及系统

Country Status (4)

Country Link
US (1) US11474995B2 (zh)
EP (1) EP3610373B1 (zh)
CN (1) CN110520845B (zh)
WO (1) WO2018192645A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111079148B (zh) * 2019-12-24 2022-03-18 杭州安恒信息技术股份有限公司 一种sql注入攻击的检测方法、装置、设备及存储介质
US20210334024A1 (en) * 2020-04-28 2021-10-28 International Business Machines Corporation Transactional Memory Based Memory Page De-Duplication
CN112328614A (zh) * 2020-11-13 2021-02-05 北京鸿腾智能科技有限公司 病毒库更新方法、设备、存储介质及装置
US11928097B2 (en) * 2021-09-20 2024-03-12 Oracle International Corporation Deterministic semantic for graph property update queries and its efficient implementation

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814018A (zh) * 2008-12-30 2010-08-25 英特尔公司 事务存储器(tm)系统中的读和写监控属性
CN106030534A (zh) * 2014-02-27 2016-10-12 国际商业机器公司 挽救硬件事务

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7536517B2 (en) * 2005-07-29 2009-05-19 Microsoft Corporation Direct-update software transactional memory
US8028133B2 (en) * 2006-02-22 2011-09-27 Oracle America, Inc. Globally incremented variable or clock based methods and apparatus to implement parallel transactions
US7434010B2 (en) * 2006-08-04 2008-10-07 Microsoft Corporation Combined pessimistic and optimisitic concurrency control
US8433878B1 (en) * 2008-03-26 2013-04-30 Apple Inc. User equipment buffer management in multiple-input multiple-output communication systems
US10210018B2 (en) * 2008-12-24 2019-02-19 Intel Corporation Optimizing quiescence in a software transactional memory (STM) system
US8688921B2 (en) * 2009-03-03 2014-04-01 Microsoft Corporation STM with multiple global version counters
US8229907B2 (en) * 2009-06-30 2012-07-24 Microsoft Corporation Hardware accelerated transactional memory system with open nested transactions
US8402227B2 (en) * 2010-03-31 2013-03-19 Oracle International Corporation System and method for committing results of a software transaction using a hardware transaction
US9430275B2 (en) * 2011-06-03 2016-08-30 Oracle International Corporation Synchronization between concurrent notifier and waiter transactions using transaction condition variables
US9740549B2 (en) * 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9244844B2 (en) * 2013-03-14 2016-01-26 International Business Machines Corporation Enabling hardware transactional memory to work more efficiently with readers that can tolerate stale data
US9442853B2 (en) * 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging lock elision transactions with instructions to change execution type
US10067960B2 (en) * 2015-06-04 2018-09-04 Microsoft Technology Licensing, Llc Controlling atomic updates of indexes using hardware transactional memory
US10241700B2 (en) * 2015-08-21 2019-03-26 International Business Machines Corporation Execution of program region with transactional memory

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814018A (zh) * 2008-12-30 2010-08-25 英特尔公司 事务存储器(tm)系统中的读和写监控属性
CN106030534A (zh) * 2014-02-27 2016-10-12 国际商业机器公司 挽救硬件事务

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Conflict Prediction-Based Transaction Execution for Transactional Memory in Multi-core In-memory Databases;Min Yoon;《2016 IEEE International Conference on Cluster Computing》;20161208;全文 *
Exploiting hardware transactional memory in main-memory databases;Viktor Leis;《2014 IEEE 30th International Conference on Data Engineering》;20140519;全文 *
Hardware Transactions in Nonvolatile Memory;Hillel Avni;《Proceedings of the 29th International Symposium on Distributed Computing》;20151007;第9363卷;第617-630页 *
基于硬件事务内存的内存计算系统可扩展性研究;王肇国;《中国优秀博硕士学位论文全文数据库(博士)信息科技辑》;20160115;第2016年卷(第1期);I137-15 *

Also Published As

Publication number Publication date
CN110520845A (zh) 2019-11-29
US20200081883A1 (en) 2020-03-12
US11474995B2 (en) 2022-10-18
EP3610373A1 (en) 2020-02-19
WO2018192645A1 (en) 2018-10-25
EP3610373B1 (en) 2022-03-30

Similar Documents

Publication Publication Date Title
US11314716B2 (en) Atomic processing of compound database transactions that modify a metadata entity
CN107077495B (zh) 数据库管理系统中的高性能事务
Ports et al. Serializable snapshot isolation in PostgreSQL
CN107667364B (zh) 使用硬件事务存储器控制索引的原子更新
US8484438B2 (en) Hierarchical bloom filters for facilitating concurrency control
Levandoski et al. High performance transactions in deuteronomy
US9336258B2 (en) Reducing database locking contention using multi-version data record concurrency control
US9547524B2 (en) Methods and systems for enhancing hardware transactions using hardware transactions in software slow-path
US8595446B2 (en) System and method for performing dynamic mixed mode read validation in a software transactional memory
Loesing et al. On the design and scalability of distributed shared-data databases
Yu et al. Sundial: Harmonizing concurrency control and caching in a distributed OLTP database management system
US20170220617A1 (en) Scalable conflict detection in transaction management
Sadoghi et al. L-store: A real-time OLTP and OLAP system
US11474995B2 (en) Updating metadata in hardware transactional memory user aborts
US8103838B2 (en) System and method for transactional locking using reader-lists
CN111459920B (zh) 基于虚拟全局时钟同步的多版本并发控制方法及系统
Jeong et al. Unbounded hardware transactional memory for a hybrid DRAM/NVM memory system
US20200050601A1 (en) Hardware transactional memory (htm) assisted database transactions
Ren et al. VLL: a lock manager redesign for main memory database systems
Wu et al. Scalable {In-Memory} Transaction Processing with {HTM}
Pellegrini et al. Transparent and efficient shared-state management for optimistic simulations on multi-core machines
Li et al. Leveraging NVMe SSDs for building a fast, cost-effective, LSM-tree-based KV store
Yeon et al. Jellyfish: A fast skip list with mvcc
CN115629822B (zh) 一种基于多核处理器的并发事务处理方法及其系统
Wolf et al. An evaluation of strict timestamp ordering concurrency control for main-memory database systems

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
GR01 Patent grant
GR01 Patent grant