具有高效版本控制的数据库管理系统和方法技术方案

技术编号:2848100 阅读:208 留言:0更新日期:2012-04-11 18:40
本发明专利技术提议了双拷贝版本化方案。该方案高效实现了高读负载数据库,并且消除了读依存关系。该版本化方案提供了在ANSI  READ  COMMITTED隔离下执行的事务的高效实现,并且可扩展到可串行化隔离。该双拷贝版本化方案免受垃圾影响,既意味着在执行期间使用数据记录的所有版本,并且该方案适于索引扫描操作。“延迟删除”方案允许读事务完成数据重分配操作。要求“快照”的语句也得到了有效的支持。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及对可由多个用户并发访问的数据的管理。
技术介绍
数据库是存储在计算机中的相关记录的集合。在本领域中,这种数据记录的集合也被称作信息数据库。数据记录也可称作数据元组,或者简称为元组。多个用户可以并发访问这些数据记录。事务被运行来代表数据库用户访问这些数据记录。事务可以从数据库读取、向数据库写,或者又读又写。因此,事务执行产生了对一组数据记录的读和写操作的集合。事务一般请求对它们要读或写的数据记录的访问许可。访问许可一般由锁(lock)实现。事务一般通过要求对应的锁来请求对数据记录的访问许可。访问许可冲突表现为锁冲突。在多个事务同时以不兼容模式试图访问相同的数据记录时可能导致锁冲突。解决锁冲突的一种方法是让冲突的事务等待。例如,发出了对数据记录的冲突锁请求的事务被强制等待,直到已拥有相同数据记录上的锁的事务完成其执行为止(完成事务的意思是说该事务要么被提交要么被回滚)。然而,在这种情形中,两个或多个事务可能在死锁中僵持,在死锁中每个事务都等待另一个事务完成,结果任一个事务都不能取得任何进展。已专利技术了多种技术来减少在事务系统中使用的锁的数量,例如,时间戳排序、确认和多版本方案。在这些方案中,多版本方案已在商业上取得了成功,并且许多供应商使用这些方案。在典型的多版本方案中,对数据记录的写操作创建该记录的新版本,而读操作从可读的版本中选择该记录的合适版本。在这种类型的数据库系统中,同时可能存在数据记录的多个版本。这些版本中的一些可能不会被任何当前执行的或将来的事务使用。这些不会被使用的版本被称作“垃圾”。因此,这些系统需要应用垃圾收集机制来回收由不被使用的版本占用的空间。许多多版本数据库方案部有惰性垃圾集合,其中数据记录的旧版本在数据库中存在超过必须的时间,并且垃圾可能在该数据库中存在无限长的时间。并发执行多个事务要求在一定程度上保护给定的事务免受其他事务影响。这种保护一个事务免受其他事务影响的保护被称为它的“隔离”。例如,如果事务对数据记录执行写操作,则新的数据值不应当被任何其他事务读取,直到前一事务完成为止。ANSI已定义了各种隔离级别。一个示例就是公知的“可串行化(Serializable)”隔离级别,在这种级别中多个事务以执行调度等同于串行调度的方式执行,其中每个事务的所有操作都被成串(cluster),即,多个事务看起来一个接一个地被顺次执行。可串行化是最高程度的隔离。独立于利用任何加锁机制实现的隔离,有些数据库操作需要数据记录在被该操作读取时是稳定的,即一旦被该操作访问,数据记录就不再改变直到该操作结束。这种要求一般被称作数据“快照”。用于执行数据库操作的常用语言是结构化查询语言(SQL)。有些SQL语句在它们执行期间可能需要不只一次引用满足谓词(predicate)的一个元组或一组元组。如果数据库管理系统(DBMS)保证每次对给定的谓词求值时SQL语句执行都将看到相同的数据值,则称该DBMS提供了“快照”隔离。现有技术描述了使用二版本技术以及多版本技术的数据库系统,这些数据库系统满足在可串行化隔离下事务执行的上述要求。然而,这些方案也有若干缺点。例如,只读事务必须声明其是只读事务。这是不实际的,因为许多DBMS动态地创建SQL语句,并且不可能在每个事务每次执行开始时评估该事务是否是只读事务。其次,当前分析和少量产品的商业上成功表明虽然可串行化隔离是一种理论上令人感兴趣的概念,但是最可行的隔离还是ANSI SQL隔离READ COMMITTED(读已提交)或者其变体。当前需要改进在允许并发处理的系统中的事务并发性和当前使用的访问控制和锁冲突解决方案之间的权衡,着眼于ANSI READ COMMITTED事务的高效实现。
技术实现思路
在内部每条数据记录由单个逻辑元组表示。逻辑元组或者直接指向单个物理元组,或者指向被称作“版本列表”的数据结构。物理元组也被称作“内容项”。逻辑元组可以通过版本列表与两个物理内容项相关联。由这两个物理内容项之一代表的数据记录中最近提交的值被称为“已提交内容项”。每个物理内容项存储数据值和一组控制标志(1)删除位;(2)分配位;(3)引用计数。对数据记录的访问控制可由DBMS中的加锁组件维护。当事务要更新数据记录时,该事务通过对逻辑元组加X锁来获得对该数据记录的排他许可。然后,事务创建该数据记录的已提交物理内容项的新版本。这一新物理版本称作“未提交内容项”。在静止状态中,所有逻辑元组指向它们各自的已提交物理内容项。对数据记录的写操作创建版本列表,并且使对应的逻辑元组指向该版本列表。对于给定的逻辑元组,版本列表维护至多两个物理内容项。版本列表具有两个字段用于这种目的(1)已提交物理内容项,也称作“读拷贝”,以及(2)未提交物理内容项,也称作“写拷贝”。已提交物理内容项是可由任何事务引用的当前读拷贝。版本列表中的(未决)未提交内容项字段引用物理未提交拷贝,该拷贝仅由执行了给定写操作的事务使用。当该“写”事务提交时,如果可能的话,前一读拷贝(老的已提交内容项)被重分配。在写事务提交后,逻辑元组指向新的已提交内容项,版本列表被重分配,并且逻辑元组上的X锁被释放。读操作不具有对逻辑元组或其物理内容项的排他访问权限。读操作仅增加最近的已提交物理内容项的引用计数。当读操作完成时,其将与物理内容项相关联的引用计数递减。如前所述,在提交时,每个写事务将写拷贝(未提交内容项)切换到读拷贝(已提交内容项)。然后写事务检查老的已提交内容项(即,前一读拷贝)的引用计数。如果引用计数为零,则老的已提交物理内容项与描述该被删除内容项的所有日志记录一起被立即重分配。如果已提交物理内容项的引用计数为正,则写事务不重分配该物理内容项。然后,写事务执行也被称作“延迟删除”的伪删除。写事务通过设置对应的老的已提交内容项的删除位来执行对数据记录的延迟删除。然后好像实际执行了删除一样将所有日志记录压入。然而,物理内容项的分配位被保持在这样的状态中,该状态防止老的已提交内容项被DBMS再利用。在写事务提交时,不管读拷贝(老的已提交物理内容项)是否被释放,版本列表都被重分配,并且逻辑元组直接指向新的已提交内容项。如前所述,在读操作执行完成时,该读操作将它读取的所有物理内容项的引用计数递减。如果写事务对物理内容项执行了延迟删除,则已提交物理内容项的引用计数必须为正。最终所有读操作都执行完,并且该物理内容项的引用计数减到零。将引用计数减少到零的读操作检查看该内容项是否先前被写事务标记为删除。在这种情形中(延迟删除),读操作重置该物理内容项的分配位,使其可由DBMS用于再利用。注意,读操作通过关闭分配位而不必写任何日志记录来重分配物理内容项。即使在存在延迟删除的情形中,版本化控制系统也是免受垃圾困扰的。如果当前没有读操作正在访问数据记录的读拷贝,则只要新的写事务完成就丢弃读拷贝。另外,最后的读操作清除物理内容项。因此,物理内容项被分配的时间一点都不超过绝对必需的时间。对于分类和其他类似的需要SQL快照隔离的事务,延迟删除允许读操作仅通过拷贝逻辑元组指针就可以重新访问它们的临时空间中的数据记录。这允许分类事务管理正被读取的物理内容项的引用计数和生命期。一般来说,版本化技术导致低效的索引维护。但是,通过使用本文档来自技高网
...

【技术保护点】
一种用于处理数据的方法,包括:从已提交内容项为第一事务创建未决内容项;提供对所述已提交内容项的第二事务读访问,同时提供对所述未决内容项的所述第一事务写/读访问; 在所述第一事务提交所述未决内容项时将所述已提交内容项加 标志为删除的;以及延迟重分配所述已提交内容项,直到所述第二事务完成对所述已提交内容项的访问。

【技术特征摘要】
【国外来华专利技术】US 2003-8-6 10/636,3611.一种用于处理数据的方法,包括从已提交内容项为第一事务创建未决内容项;提供对所述已提交内容项的第二事务读访问,同时提供对所述未决内容项的所述第一事务写/读访问;在所述第一事务提交所述未决内容项时将所述已提交内容项加标志为删除的;以及延迟重分配所述已提交内容项,直到所述第二事务完成对所述已提交内容项的访问。2.如权利要求1所述的方法,包括每次读事务访问所述已提交内容项时递增引用计数;每次读事务完成对所述已提交内容项的访问时递减所述引用计数;以及将所述引用计数递减到零的读事务发起对所述已提交内容项的重分配。3.如权利要求2所述的方法,包括在所述第一事务提交所述未决内容项时将所述已提交内容项加标志为删除的;当完成的读事务将所述引用计数减少到零时检查所述已提交内容项是否被加标志为删除的;以及仅当所述已提交内容项已被加标志为删除的并且具有为零的引用计数时,所述读事务重分配所述已提交内容项。4.如权利要求1所述的方法,包括创建具有第一字段、第二字段和第三字段的版本列表,其中所述第一字段指向所述已提交内容项,所述第二字段指向所述未决内容项,并且所述第三字段存储所述第一事务的事务Id;将所述版本列表中的所述第二字段提供给与所述版本列表的所述第三字段中的所述事务Id匹配的事务,而将所述第一字段提供给与所述版本列表的所述第三字段中的所述事务Id不匹配的事务。5.如权利要求4所述的方法,包括生成逻辑元组;在没有写事务正访问所述已提交内容项时使用所述逻辑元组直接指向所述已提交内容项;以及在写事务正访问所述已提交内容项时使用所述逻辑元组指向所述版本列表。6.如权利要求4所述的方法,包括将索引中的索引条目标记为已提交或未提交;在所述版本列表中提供索引图,所述索引图标识具有已提交和关联的未提交双条目的索引;为了索引条目而扫描所述索引;以及根据所述索引条目标记和包含在所述索引图中的所述索引返回空值。7.如权利要求6所述的方法,包括在所述索引条目不与所述索引图相关联并且发起所述索引扫描的事务的标识符(Id)与所述版本列表的所述第三字段中的所述事务Id匹配时,返回指向所述未决内容项的指针。8.如权利要求7所述的方法,包括在所述索引条目不与所述索引图相关联并且所述发起所述索引扫描的事务的标识符(Id)与所述版本列表的所述第三字段中的所述事务Id不匹配时,返回指向所述已提交内容项的指针。9.如权利要求2所述的方法,包括提供逻辑元组;拷贝在要求数据“快照”的操作中标识出的逻辑元组的集合;递增与所拷贝的逻辑元组的集合相关联的所述物理内容项的引用计数;在该操作完成时递减所述物理内容项的所述引用计...

【专利技术属性】
技术研发人员:桑贾伊韦马马克L麦考利夫雪利利斯特戈泰恩斯巴散卡黑尔达航起金
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1