DMDSC实现原理

DMDSC实现原理

DMDSC是一个共享存储的数据库集群系统。多个数据库实例同时访问、修改同一个数据库,因此必然带来了全局并发问题。DMDSC集群基于单节点数据库管理系统之上,改造了Buffer缓冲区、事务系统、封锁系统和日志系统等,来适应共享存储集群节点间的全局并发访问控制要求。同时,引入缓存交换技术,提升数据在节点间的传递效率。

一、事务管理

多版本并发控制(MVCC)可以确保数据库的读操作与写操作不会相互阻塞,大幅度提升数据库的并发度以及使用体验,大多数主流商用数据库管理系统都实现了MVCC。DM的多版本并发控制实现策略是:数据页中只保留物理记录的最新版本数据,通过回滚记录维护数据的历史版本,通过活动事务视图(V$DSC_TRX_VIEW)判断事务可见性,确定获取哪一个版本的数据。

每一条物理记录中包含了两个字段:TID和RPTR。TID保存修改记录的事务号,RPTR保存回滚段中上一个版本回滚记录的物理地址。插入、删除和更新物理记录时,RPTR指向操作生成的回滚记录的物理地址。

回滚记录与物理记录一样,也包含了TID和RPTR这两个字段。TID保存产生回滚记录时物理记录上的TID值(也就是上一个版本的事务号),RPTR保存回滚段中上一个版本回滚记录的物理地址。

每一条记录(物理记录或回滚记录)代表一个版本。如下图所示。

各版本之间的关系

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

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

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

3. 物理记录的TID包含在活动事务表中,或者TID>=NEXT_TID,物理记录不可见

为了在DMDSC集群中实现与单节点相同的多版本并发控制(MVCC)策略,每个事务需要知道所有节点当前活动的事务信息,根据事务隔离级的不同,在事务启动时(串行化),或者语句执行时(读提交),收集这一时刻所有节点上的活动事务,以及系统中即将产生的事务号NEXT_TID,记录到事务的活动事务视图中。DMDSC集群将事务信息全局化,由控制节点统一管理集群中所有节点的全局事务视图(Global Transaction View,简称GTV);与之对应的是每个节点维护一个本地事务视图(Local Transaction View,简称LTV),在事务启动、收集活动事务信息时通知全局事务视图,并获取相应的信息。

DMDSC中,与事务相关的视图如下所示:

序号

视图名

视图说明

1

V$DSC_GTV_TINFO

显示TINFO控制结构的信息。

2

V$DSC_GTV_ACTIVE_TRX

显示全局活动事务信息。

3

V$DSC_LOCK

显示全局活动的事务锁信息。

4

V$DSC_TRX

显示所有活动事务的信息。通过该视图可以查看所有系统中所有的事务以及相关信息,如锁信息等。

5

V$DSC_TRXWAIT

显示事务等待信息。

6

V$DSC_TRX_VIEW

显示当前事务可见的所有活动事务视图信息。

二、封锁管理

数据库管理系统一般采用行锁进行并发访问控制,避免多个用户同时修改相同数据;通过表锁、字典锁控制DDL和DML操作的并发访问,保证对象定义的有效性和数据访问的正确性。DM则采用了独特的封锁机制,使用TID锁和对象锁进行并发访问控制,有效减少封锁冲突、提升系统并发性能。

TID锁以事务号为封锁对象,每个事务启动时,自动以独占(X)方式对当前事务号进行封锁,由于事务号是全局唯一的,因此这把TID锁不存在冲突,总是可以封锁成功。同时,在事务管理中,介绍了物理记录上包含一个TID字段,记录了修改数据的事务号。执行INSERT、DELETE、UPDATE操作修改物理记录时,设置事务号到TID字段的动作,就相当于隐式地对物理记录上了一把X方式的TID锁。因此,通过事务启动时创建的TID锁,以及写入物理记录的TID值,DM中所有修改物理记录的操作都不再需要额外的行锁,避免了大量行锁对系统资源的消耗,有效减少封锁冲突。特别是在DMDSC集群中,需要进行全局封锁,封锁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值