技术开发 频道

DM7数据库管理系统总体构架解析(上)

  大规模并发处理技术

  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树资源,从而提升并发处理效率。

  高效的内存管理

  根据系统中子模块的不同功能,对内存采用了不同的管理模式。

  1. 内存池

  小片内存的申请与释放频繁发出系统调用,可能会引起线索切换,降低系统运行效率。内存池一次向操作系统申请一片较大内存,当系统在运行过程中需要申请内存时,则在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给内存池。系统对内存池有效的管理,使小片内存的申请与释放不会对系统影响太大。

  2. 数据缓冲区

  为缓解全局缓冲区的访问瓶颈问题,进一步的提高效率,DM7采用了多缓冲区机制,将全局缓冲区划成多个分片。数据页按照其页号,进入各自缓冲区分片。每个缓冲区分片有自己的临界区,访问不同的缓冲区分片,不会导致访问冲突。这种机制可以降低全局数据缓冲区并发访问的冲突概率。

  3. 字典缓冲区

  每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率,DM为字典设置了其专有的缓冲区。为保证事物的隔离性,DM中的执行计划并不是直接使用字典缓冲区的内容,而是根据字典缓冲区的内容生成一份自己独有的字典对象并使用。

大规模并发处理技术

0
相关文章