文档详情

DM7总体构架解析(共13页)

des****85
实名认证
店铺
DOC
761.50KB
约13页
文档ID:226801627
DM7总体构架解析(共13页)_第1页
1/13

精选优质文档-----倾情为你奉上DM7总体构架解析郭琰概述DM7数据库管理系统是在总结DM系列产品的经验和教训基础上,吸收主流数据库产品优点,学习适应OLAP应用的专用数据库技术,采用类JAVA的虚拟机技术,重新设计的新一代数据库产品采用全新的体系架构,极大提升了达梦数据库产品的性能、语言丰富性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM产品的品质相对于DM6,DM7中新增和改进特性多达数百项,本文将为您介绍DM7众多新特性中最为重要和最具创新性的部分系统核心构架DM7采用高效的多线程体系结构,由不同的功能线程协同完成服务器的整体功能图1 系统结构 系统总体结构如图1所示,数据库内核提供词法和语法分析、事务管理、封锁、多核查询引擎、安全管理、备份恢复、缓冲区、日志以及操作系统和硬件抽象层等功能在此基础上,用户可以基于数据库内核来搭建两种类型的集群结构:无共享的大规模并行集群和共享磁盘的集群在客户端,用户可以通过DM7提供的各种标准接口来访问达梦数据库或者是数据库集群,也可以通过各种客户端工具来对达梦数据库进行管理 操作系统和硬件抽象层:对操作系统和硬件环境提供封装API,使得一套源代码可以在不同平台下运行,屏蔽操作系统和硬件的差异,简化上层处理逻辑。

各种操作系统和硬件环境下保持一致的存储格式和消息通信格式 缓冲区管理:该模块将用户需要访问的数据从磁盘加载到内存中,并提供高效、高并发的缓冲区访问和淘汰机制,使得可以支撑大量并发用户的数据访问 日志管理:提供事务的持久性能力,任何已提交的事务都持久性的生效 事务管理:提供多版本并发控制机制,使得系统能够保证事务的原子性、隔离性,并提供很高的并发访问能力,查询在任何时候能够不被封锁 锁管理:提供并发更新数据时的封锁能力,避免出现数据的不一致 多核查询引擎:内置多个查询处理引擎,针对不同的查询使用自适应的查询引擎,如全文检索引擎、对象-关系数据处理引擎、空间数据处理引擎等 安全管理:提供内置的安全机制,使得系统的安全级别能够达到四级 备份恢复管理:提供各种备份恢复功能,如完整备份、增量备份、并行备份与恢复、基于时间点的恢复等 无共享集群:基于DM7数据库提供基于数据划分的高性能大规模并行集群功能,多个节点能够并行处理同一个请求,提升系统性能,并且通过节点间的守护技术来保证系统中的任意节点出现故障时,仍然能够提供不间断的服务 共享磁盘集群:基于DM7数据库提供共享磁盘架构的集群功能,多个集群节点共享一份数据,能够通过增加/删除节点来提升系统性能,并且也能够在节点出现故障时提供不间断的服务。

JDBC/ODBC等接口:提供应用中常见的JDBC、ODBC、.NET DATA PROVIDER、PHP、OLEDB等接口,供各种应用程序调用 管理/交互式工具:提供图形化的数据库管理和SQL执行工具,便于DBA/数据库使用人员对数据库直接进行管理 性能监视工具:用于监控系统性能,帮助数据库管理人员分析系统瓶颈/错误,并提供适当的系统调整/优化建议 迁移工具:用于从其他各种主流数据库或者较低版本的达梦数据库迁移数据到最新的DM7数据库管理系统控制台工具:用于配置达梦数据库的各种参数以及进行脱机备份与恢复等 数据仓库套件: 其他工具:如数据库重演工具用于帮助重现问题、快速数据装载工具用于快速将文本文件中的数据装载到DM7中等等高性能查询处理技术DM7采用基于代价的查询优化策略,使用了多趟处理策略,结合面向堆栈的虚拟机执行器,并借助重用等优化手段,争取达到最优的查询效果查询语句分析优化过程并非一蹴而就,而是分多个阶段进行变换处理,直至最终生成物理查询计划PARSE:进行语法检查,将原始语句转换为对应语法树PHASE A:进行语义分析,将标识符翻译为对应字典对象PHASE B:关系变换1、按照规则将语法树变换为关系(REL)树;2、处理子查询,将IN、EXISTS查询变换为半连接(SEMI JOIN);3、处理子查询的相关性,将相关性去除,变为与引用表的连接(JOIN)。

PHASE C:利用统计信息进行代价优化1、对于单表查询,选择合适索引2、对于多表链接,选择连接顺序,选择物理连接操作符PHASE E:表达式优化1、重用语句中相同表达式,避免重复计算2、尽量选择批量指令执行计算,减少反复调用的代价PHASE G:并行优化,构造并行操作符,使用多线程处理水平分区表的查询DM7查询优化器利用优化规则,将所有的相关子查询变换为等价的关系连接,从而取消查询的嵌套关系例如:select count(*)from c_order where exists ( select * from c_order_line where o_id = ol_o_id and ol_quantity > 10 )上面的关系树就会被转化为与其等价的如下语句(伪SQL)的关系树:select count(*)from c_order A semi_join ( select B.ROWID from c_order_line, c_order B where B.o_id = ol_o_id and ol_quantity > 10 group by B.ROWID ) on A.ROWID = B.ROWID对于半连接或其中嵌套的因去除相关型而引入的连接,可以基于一定的规则进行优化。

如上例中关系树可再被优化为如下语句的关系树:select count(*)from c_order semi_join c_order_line where A.o_id = ol_o_id and ol_quantity > 10相关子查询的平坦化,极大降低了代价优化的算法复杂程度,使得优化器可以更容易地生成较优的查询计划DM7在之前版本虚拟机的基础上,为进一步完善了功能、提高执行效率,做了如下改进1. 采用以字长为分配单位的标准堆栈,提高空间利用率,充分利用CPU的2级缓存,提升性能2. 增加栈帧概念,方便实现函数/方法的跳转,为PL/SQL脚本的调试提供基础3. 增加内存运行堆的概念,实现对象、数组、动态的数据类型存储4. 采用面向栈的表达式计算模式,减少虚拟机代码的体积、数据的移动5. 重新定义指令系统,增加对对象、方法、参数、堆栈的访问,便于实现PL/SQL的执行而实现的虚拟机结构如下图所示DM7面向堆栈的虚拟机执行器,可以在指令与操作符间平滑地切换执行,也能够轻松地实现过程/函数的调用借助简单高效的指令系统,以及直观快速的堆栈数据传输机制,可以有效提升SQL脚本或过程/函数的执行效率。

SQL语句从分析、优化到实际执行,每一步都需要消耗系统资源查询计划的重用,可以减少重复分析操作,有效提升语句的执行效率DM7采用参数化常量方法,使得常量值不同的查询语句,同样可以重用查询计划经此优化后的计划重用策略,在应用系统中的实用性明显增强查询结果集同样可以缓存相同的查询语句,如果涉及表数据没有变化,则可以直接重用缓存的结果集查询结果缓存,在数据变化不频繁的OLAP应用模式,或存在大量类似编目函数查询的的应用环境下有非常良好的性能提升效果在服务器端实现结果集缓存,可以在提升查询速度的同时,保证缓存结果的实时性和正确性强大灵活的语言分析达梦数据库对数据库的操作提供了灵活语言支持达梦不仅支持功能强大的PL/SQL,还支持类C语言的BLOCK语句块1. PLSQLPL/SQL是达梦数据库的过程化语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数PL/SQL支持所有SQL数据类型和所有SQL函数支持游标、%ROWTYPE、%TYPE、EXCEPTION和数组类型,同时支持所有达梦对象类型例如:declare cursor cc(x int) is select id, name from sysobjects where id < x; r cc%rowtype[]; cnt int; k cc%rowtype;begin open cc(20); cnt = 10; r = new cc%rowtype[cnt]; for i in t loop fetch cc into r[i]; end loop; for i in 1..9 loop for j in i + 1..10 loop if r[i].name > r[j].name then k = r[i]; r[i] = r[j]; r[j] = k; end if; end loop; end loop; for i in t loop print r[i].id; print r[i].name; end loop; close cc;end;/2. BLOCK语句块达梦数据库提供了类C语言的BLOCK语句块,支持C语言的基本数据类型,支持C语言格式的条件结构、循环结构和异常处理结构,GOTO等结构,BLOCK语句块中支持SQL语句和函数。

另外BLOCK语句块中还支持引用游标、%ROWTYPE、%TYPE、EXCEPTION、数组类型和记录类型例如: { sysobjects%rowtype r; sysobjects%rowtype y[]; ref cursor cc; int i; y = new sysobjects%rowtype[10]; open cc for select * from sysobjects where id < 10; i = 1; do { fetch cc into r; if(cc%found) { y[i] = r; i++; } } while(cc%found); for (i = 1; i <= 10; i ++) { r = y[i]; print r.id; print r.name; }}/大规模并发处理技术DM7在事务处理、任务调度、数据组织等各个方面充分发挥多线程并发特性,减少同步冲突,为大规模的并发处理提供有效保障事务处理的并发改进首先体现在对多版本并发控制的支持上。

DM7采用“历史回溯”策略,对于数据的多版本并发控制实现了原生性支持DM7改造了数据记录与回滚记录的结构在数据记录中添加字段记录最近修改的事务ID及与其对应的回滚记录地址,而在回滚记录中也记录了该行上一更新操作的事务ID与相应回滚记录地址通过数据记录与回滚记录的链接关系,构造出一行数据的完整更新历史各版本数据页中物理记录记录 trxid记录 tr。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档