您好,欢迎访问三七文档
DM7总体构架解析郭琰概述DM7数据库管理系统是在总结DM系列产品的经验和教训基础上,吸收主流数据库产品优点,学习适应OLAP应用的专用数据库技术,采用类JAVA的虚拟机技术,重新设计的新一代数据库产品。采用全新的体系架构,极大提升了达梦数据库产品的性能、语言丰富性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM产品的品质。相对于DM6,DM7中新增和改进特性多达数百项,本文将为您介绍DM7众多新特性中最为重要和最具创新性的部分。系统核心构架DM7采用高效的多线程体系结构,由不同的功能线程协同完成服务器的整体功能。图1系统结构系统总体结构如图1所示,数据库内核提供词法和语法分析、事务管理、封锁、多核查询引擎、安全管理、备份恢复、缓冲区、日志以及操作系统和硬件抽象层等功能。在此基础上,用户可以基于数据库内核来搭建两种类型的集群结构:无共享的大规模并行集群和共享磁盘的集群。在客户端,用户可以通过DM7提供的各种标准接口来访问达梦数据库或者是数据库集群,也可以通过各种客户端工具来对达梦数据库进行管理。操作系统和硬件抽象层:对操作系统和硬件环境提供封装API,使得一套源代码可以在不同平台下运行,屏蔽操作系统和硬件的差异,简化上层处理逻辑。各种操作系统和硬件环境下保持一致的存储格式和消息通信格式。缓冲区管理:该模块将用户需要访问的数据从磁盘加载到内存中,并提供高效、高并发的缓冲区访问和淘汰机制,使得可以支撑大量并发用户的数据访问。日志管理:提供事务的持久性能力,任何已提交的事务都持久性的生效。事务管理:提供多版本并发控制机制,使得系统能够保证事务的原子性、隔离性,并提供很高的并发访问能力,查询在任何时候能够不被封锁。锁管理:提供并发更新数据时的封锁能力,避免出现数据的不一致。多核查询引擎:内置多个查询处理引擎,针对不同的查询使用自适应的查询引擎,如全文检索引擎、对象-关系数据处理引擎、空间数据处理引擎等。安全管理:提供内置的安全机制,使得系统的安全级别能够达到四级。备份恢复管理:提供各种备份恢复功能,如完整备份、增量备份、并行备份与恢复、基于时间点的恢复等。无共享集群:基于DM7数据库提供基于数据划分的高性能大规模并行集群功能,多个节点能够并行处理同一个请求,提升系统性能,并且通过节点间的守护技术来保证系统中的任意节点出现故障时,仍然能够提供不间断的服务。共享磁盘集群:基于DM7数据库提供共享磁盘架构的集群功能,多个集群节点共享一份数据,能够通过增加/删除节点来提升系统性能,并且也能够在节点出现故障时提供不间断的服务。JDBC/ODBC等接口:提供应用中常见的JDBC、ODBC、.NETDATAPROVIDER、PHP、OLEDB等接口,供各种应用程序调用。管理/交互式工具:提供图形化的数据库管理和SQL执行工具,便于DBA/数据库使用人员对数据库直接进行管理。性能监视工具:用于监控系统性能,帮助数据库管理人员分析系统瓶颈/错误,并提供适当的系统调整/优化建议。迁移工具:用于从其他各种主流数据库或者较低版本的达梦数据库迁移数据到最新的DM7数据库管理系统。控制台工具:用于配置达梦数据库的各种参数以及进行脱机备份与恢复等。数据仓库套件:其他工具:如数据库重演工具用于帮助重现问题、快速数据装载工具用于快速将文本文件中的数据装载到DM7中等等。高性能查询处理技术DM7采用基于代价的查询优化策略,使用了多趟处理策略,结合面向堆栈的虚拟机执行器,并借助重用等优化手段,争取达到最优的查询效果。查询语句分析优化过程并非一蹴而就,而是分多个阶段进行变换处理,直至最终生成物理查询计划。PARSE:进行语法检查,将原始语句转换为对应语法树。PHASEA:进行语义分析,将标识符翻译为对应字典对象。PHASEB:关系变换。1、按照规则将语法树变换为关系(REL)树;2、处理子查询,将IN、EXISTS查询变换为半连接(SEMIJOIN);3、处理子查询的相关性,将相关性去除,变为与引用表的连接(JOIN)。PHASEC:利用统计信息进行代价优化。1、对于单表查询,选择合适索引。2、对于多表链接,选择连接顺序,选择物理连接操作符PHASEE:表达式优化1、重用语句中相同表达式,避免重复计算2、尽量选择批量指令执行计算,减少反复调用的代价PHASEG:并行优化,构造并行操作符,使用多线程处理水平分区表的查询。DM7查询优化器利用优化规则,将所有的相关子查询变换为等价的关系连接,从而取消查询的嵌套关系。例如:selectcount(*)fromc_orderwhereexists(select*fromc_order_linewhereo_id=ol_o_idandol_quantity10)上面的关系树就会被转化为与其等价的如下语句(伪SQL)的关系树:selectcount(*)fromc_orderAsemi_join(selectB.ROWIDfromc_order_line,c_orderBwhereB.o_id=ol_o_idandol_quantity10groupbyB.ROWID)onA.ROWID=B.ROWID对于半连接或其中嵌套的因去除相关型而引入的连接,可以基于一定的规则进行优化。如上例中关系树可再被优化为如下语句的关系树:selectcount(*)fromc_ordersemi_joinc_order_linewhereA.o_id=ol_o_idandol_quantity10相关子查询的平坦化,极大降低了代价优化的算法复杂程度,使得优化器可以更容易地生成较优的查询计划。DM7在之前版本虚拟机的基础上,为进一步完善了功能、提高执行效率,做了如下改进。1.采用以字长为分配单位的标准堆栈,提高空间利用率,充分利用CPU的2级缓存,提升性能。2.增加栈帧概念,方便实现函数/方法的跳转,为PL/SQL脚本的调试提供基础。3.增加内存运行堆的概念,实现对象、数组、动态的数据类型存储。4.采用面向栈的表达式计算模式,减少虚拟机代码的体积、数据的移动。5.重新定义指令系统,增加对对象、方法、参数、堆栈的访问,便于实现PL/SQL的执行。而实现的虚拟机结构如下图所示。DM7面向堆栈的虚拟机执行器,可以在指令与操作符间平滑地切换执行,也能够轻松地实现过程/函数的调用。借助简单高效的指令系统,以及直观快速的堆栈数据传输机制,可以有效提升SQL脚本或过程/函数的执行效率。SQL语句从分析、优化到实际执行,每一步都需要消耗系统资源。查询计划的重用,可以减少重复分析操作,有效提升语句的执行效率。DM7采用参数化常量方法,使得常量值不同的查询语句,同样可以重用查询计划。经此优化后的计划重用策略,在应用系统中的实用性明显增强。查询结果集同样可以缓存。相同的查询语句,如果涉及表数据没有变化,则可以直接重用缓存的结果集。查询结果缓存,在数据变化不频繁的OLAP应用模式,或存在大量类似编目函数查询的的应用环境下有非常良好的性能提升效果。在服务器端实现结果集缓存,可以在提升查询速度的同时,保证缓存结果的实时性和正确性。强大灵活的语言分析达梦数据库对数据库的操作提供了灵活语言支持。达梦不仅支持功能强大的PL/SQL,还支持类C语言的BLOCK语句块。1.PLSQL指令流IPSPBP栈运行堆对象实例对象实例缺省方法方法1方法2活动栈帧返回地址局部变量描述信息参数描述信息当前方法指针当前方法的指令基址...PL/SQL是达梦数据库的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。PL/SQL支持所有SQL数据类型和所有SQL函数。支持游标、%ROWTYPE、%TYPE、EXCEPTION和数组类型,同时支持所有达梦对象类型。例如:declarecursorcc(xint)isselectid,namefromsysobjectswhereidx;rcc%rowtype[];cntint;kcc%rowtype;beginopencc(20);cnt=10;r=newcc%rowtype[cnt];foriin1..cntloopfetchccintor[i];endloop;foriin1..9loopforjini+1..10loopifr[i].namer[j].namethenk=r[i];r[i]=r[j];r[j]=k;endif;endloop;endloop;foriin1..cntloopprintr[i].id;printr[i].name;endloop;closecc;end;/2.BLOCK语句块达梦数据库提供了类C语言的BLOCK语句块,支持C语言的基本数据类型,支持C语言格式的条件结构、循环结构和异常处理结构,GOTO等结构,BLOCK语句块中支持SQL语句和函数。另外BLOCK语句块中还支持引用游标、%ROWTYPE、%TYPE、EXCEPTION、数组类型和记录类型。例如:{sysobjects%rowtyper;sysobjects%rowtypey[];refcursorcc;inti;y=newsysobjects%rowtype[10];openccfor'select*fromsysobjectswhereid10';i=1;do{fetchccintor;if(cc%found){y[i]=r;i++;}}while(cc%found);for(i=1;i=10;i++){r=y[i];printr.id;printr.name;}}/大规模并发处理技术DM7在事务处理、任务调度、数据组织等各个方面充分发挥多线程并发特性,减少同步冲突,为大规模的并发处理提供有效保障事务处理的并发改进首先体现在对多版本并发控制的支持上。DM7采用“历史回溯”策略,对于数据的多版本并发控制实现了原生性支持。DM7改造了数据记录与回滚记录的结构。在数据记录中添加字段记录最近修改的事务ID及与其对应的回滚记录地址,而在回滚记录中也记录了该行上一更新操作的事务ID与相应回滚记录地址。通过数据记录与回滚记录的链接关系,构造出一行数据的完整更新历史各版本。使用多版本并发控制技术,查询与更新操作间互不干扰,有效提高了高并发应用场景中的执行效率。其次,DM7采用DDL高并发技术,DDL语句在分析阶段就转换为基本的DML操作,借助字典对象本地化策略,在DDL执行期间不必封锁整个数据字典,可以有效降低DDL操作对整体系统并发执行的影响。DM7事务处理中还通过对行锁资源的优化改善封锁性能。DM7改进了行锁的结构,在锁上添加位图,记录相邻的一组数据行。在默认情况下,一个行锁最多可以登记64个连续的行。在连续更新操作中,这种构造可以有效减少实际生成行锁的个数,进而可以降低锁升级的概率以及以此带来的副作用。DM7采用更加有效的异步检查点机制,不再长时间占用系统缓冲区,逻辑更加简单,速度更快,对整体系统运行影响更小。在任务调度方面,DM7采用的动态可调的工作线程机制,可以对实际应用环境自动进行适应调整,在快速反应与资源控制使用间很好地平衡。DM7的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。这样可以保证用户所有请求及时响应。但当会话连接超过预设的阀值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户请求,加入任务队列。而等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。数据页中物理记录记录trxid记录trxid……记录trxid…回滚段在执行模块中,采用了查询内并行处理的机制。DM7支持水平分区技术,将一个数据表拆分为多个相对独立的子表。在对分区表执行查询操作时,借助并行操作符,可以由多个子线程分别扫描不同的子表数据,从而实现查询内的并行处理。在数据的组织方面同样有对并发的支持改进。DM7摒弃原有的逻辑ROWID,改为采用实际物理地址作为记录的标识。采用物理RO
本文标题:DM7总体构架解析
链接地址:https://www.777doc.com/doc-5440249 .html