技术开发 频道

DM7多版本事务系统特点及实现原理

  【IT168 专稿】事务系统的重要功能之一是提供有效的并发控制策略,协调同一时段内多个事务的并发操作,允许多个用户同时访问和修改数据,并保证数据的一致性和完整性。本文主要介绍DM7多版本事务系统的特点及实现原理。

  DM7事务系统特点

  1、简化的隔离级

  为了适应多版本并发的体系结构,DM7支持读提交隔离级和串行化隔离级,读未提交升级为读提交隔离级,可重复读升级为更严格的串行化隔离级。DM7的默认隔离级别是读提交隔离级。

  2、优化的封锁机制

  为了减少锁的数量,降低事务系统的开销,DM7采用了多个连续行共用一把锁的机制,实现并发度与系统资源之间的平衡。并且在多版本机制中,读操作不需要上锁,进一步减少了锁的数量,减少了系统资源的占用。

  取消了范围锁和锁升级机制,避免插入过程中,将行锁升级为表锁后,导致并发度大大降低的情况。

  实现了字典锁与表锁的统一,简化了封锁系统逻辑,提高了封锁效率。

  3、改进的死锁检测机制

  DM7通过死锁检测来避免发生死锁,为了适应封锁机制的改变,死锁检测机制做了重大调整,检测效率得到大幅提高。

  4、原生的多版本支持

  多版本并发控制的优点在于,读操作不上锁,写操作上写锁,读、写操作不会相互阻塞,可大大提升数据库的并发度,有效减少发生死锁的概率。

  DM6在原有回滚记录基础上,增加了一套辅助机制,用以维护历史记录信息。以这种方式实现的多版本支持,性能和并发效率无法达到预期目标,并且在表现形式上,与主流数据库管理系统存在较大差异。

  DM7重写了事务系统,重构物理记录和回滚记录格式,实现了原生的多版本支持。不但在表现形式上与主流数据库管理系统保持一致,性能和并发效率也得到了极大提升。

  DM7多版本实现机制

  DM7实现的多版本控制,读操作不上锁,数据修改上写锁,读写相互不阻塞。系统支持读提交和串行化两种隔离级,读不提交升级为读提交,可重复读升级为更加严格的串行化隔离级。

  DM7基于物理记录和回滚记录,以及回滚段实现多版本访问控制;数据页中只保留物理记录的最新版本,通过回滚段中保存的回滚记录,还原特定版本的物理记录。

  1、物理记录格式改进

  为了适应多版本机制,高效的获取历史记录,DM7修改了物理记录格式,在物理记录上增加了两个字段:RTID和RPTR。RTID保存最后修改记录的事务号,RPTR保存回滚段中上一个版本回滚记录的物理地址。插入、删除和更新物理记录时,RPTR指向操作生成的回滚记录的物理地址。

  2、回滚记录格式改进

  回滚记录与物理记录一样,增加了两个字段:RTID和RPTR。RTID保存回滚记录对应的事务号,RPTR保存回滚段中上一个版本回滚记录的物理地址。

  插入物理记录时,由于没有更老的版本数据,回滚记录的RPTR值为NULL;更新和删除物理记录时,RPTR指向原始物理记录的RPTR,新物理记录的RPTR指向当前回滚记录的物理地址。

  3、回滚段自动清理

  由于需要根据回滚记录回溯、还原物理记录的历史版本信息,因此不能在事务提交时立即清除当前事务产生的回滚记录。但是,如果不及时清理回滚段,可能造成回滚段空间的不断膨胀,占用大量磁盘空间。

  DM7提供了自动清理、回收回滚段空间的机制;系统定时(缺省是每间隔1秒)扫描回滚段,根据回滚记录的RTID,判断是否需要保留回滚记录,清除那些对所有活动事务可见的回滚记录空间。

  4、事务可见性原则

  多版本控制的关键是可见性判断,找到对当前事务可见的特定版本数据。DM7通过活动事务表,确定事务的可见性。根据事务隔离级的不同,在事务启动时(串行化),或者语句执行时(读提交),收集这一时刻所有活动事务,并记录系统中的即将产生的事务号NEXT_TID。DM7多版本可见性原则:

  1.物理记录的TRXID等于当前事务号,说明是本事务修改的物理记录,物理记录可见。

  2.物理记录的TRXID不在活动事务表中,并且TRXID小于NEXT_TID,物理记录可见。

  3.物理记录的TRXID包含在活动事务表中,或者TRXID大于等于NEXT_TID物理记录不可见。

  5、历史数据获取

  当物理记录对当前事务不可见时,根据物理记录和回滚记录的RPTR指针,向前回溯一个历史版本记录,通过此历史版本记录的RTID字段,依据事务可见性原则判断此版本的记录对当前事务是否可见。如可见即获取到了满足当前事务的历史版本数据;如不可见则根据RPTR指针继续向前回溯。如果一直不能找到对当前事务的可见版本(例如此记录是一个活动事务插入的新记录),则此记录将不会添加到查询结果集中。

  总结

  DM7多版本事务系统,实现了原生的多版本并发控制,大幅提升了系统的并发效率,可自动回收回滚段空间,优化了封锁机制,并且与主流系统的表现形式保持一致,较高提升产品的成熟度。

0
相关文章