大规模并发处理技术
DM7在事务处理、任务调度、数据组织等各个方面充分发挥多线程并发特性,减少同步冲突,为大规模的并发处理提供有效保障。
事务处理的并发改进首先体现在对多版本并发控制的支持上。DM7采用“历史回溯”策略,对于数据的多版本并发控制实现了原生性支持。DM7改造了数据记录与回滚记录的结构。在数据记录中添加字段记录最近修改的事务ID及与其对应的回滚记录地址,而在回滚记录中也记录了该行上一更新操作的事务ID与相应回滚记录地址。通过数据记录与回滚记录的链接关系,构造出一行数据的完整更新历史各版本。
使用多版本并发控制技术,查询与更新操作间互不干扰,有效提高了高并发应用场景中的执行效率。
其次,DM7采用DDL高并发技术, DDL语句在分析阶段就转换为基本的DML操作,借助字典对象本地化策略,在DDL执行期间不必封锁整个数据字典,可以有效降低DDL操作对整体系统并发执行的影响。
DM7事务处理中还通过对行锁资源的优化改善封锁性能。DM7改进了行锁的结构,在锁上添加位图,记录相邻的一组数据行。在默认情况下,一个行锁最多可以登记64个连续的行。在连续更新操作中,这种构造可以有效减少实际生成行锁的个数,进而可以降低锁升级的概率以及以此带来的副作用。
DM7采用更加有效的异步检查点机制,不再长时间占用系统缓冲区,逻辑更加简单,速度更快,对整体系统运行影响更小。
在任务调度方面,DM7采用的动态可调的工作线程机制,可以对实际应用环境自动进行适应调整,在快速反应与资源控制使用间很好地平衡。
DM7的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。这样可以保证用户所有请求及时响应。但当会话连接超过预设的阀值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户请求,加入任务队列。而等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。
在执行模块中,采用了查询内并行处理的机制。DM7支持水平分区技术,将一个数据表拆分为多个相对独立的子表。在对分区表执行查询操作时,借助并行操作符,可以由多个子线程分别扫描不同的子表数据,从而实现查询内的并行处理。
在数据的组织方面同样有对并发的支持改进。DM7摒弃原有的逻辑ROWID,改为采用实际物理地址作为记录的标识。采用物理ROWID,取消了数据记录中的附加ROWID字段,减少了数据规模。在进行并发数据装载插入时,不再需要因获取顺序的ROWID而相互等待,也不必为ROWID排序而争抢B树资源,从而提升并发处理效率。