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