DM8快要发布了,最近拿到了DM8的新特性白皮书和最新测试版,下面开始我们的DM8之旅吧。
DM8十大新特性:
1. 共享存储集群DSC增强
最多可以支持8个节点的共享存储集群,支持共享存储集群+数据守护,进一步提高系统可用性,提供可替代Oracle的两地三中心解决方案。
2. 提供分布式文件系统DDFS
DDFS(DM Distributed File System)是可供DM数据库服务器使用的底层分布式文件系统,DDFS支持多副本数据冗余容灾,采用中心化副本控制协议(primary-secondary协议)和Quorum机制对副本进行管理,可快速进行主副本间的切换,能够有效地处理系统中的各种故障和异常情况。
3. 支持分布式弹性计算集群
当单个达梦数据库系统在SQL执行过程中发现当前操作需要大量的内存和CPU资源,且当前局域网上有可利用的空闲DM数据库计算资源时,就可以把当前的SQL操作拆分成多个任务和相应的数据分发到这些可以利用的达梦数据库,并回收计算结果加以整合,从而实现复杂SQL的弹性计算。
4. 查询优化器增强
支持多维统计信息,当查询中涉及的多个列互相并不独立时,允许用户指定针对多个列收集和计算统计信息,可提升多列过滤、多列连接场景下的代价计算精准度,生成更优的执行计划;相关子查询、外连接等查询优化参数根据应用场景自动调整,减少人工干预;复杂表达式的优化;语句块中的SQL独立HINT支持等。
5. AWR报表工具增强
DM8对AWR报表工具的内部构造策略进行了改造,大幅提升了AWR报表的生成效率。同时相对于DM7的AWR报表工具增加了多个统计表单,实现了对系统运行情况更加细致的展现。
6. 安全功能增强
进一步增强强制访问控制、存储加密、资源限制、实时审计等安全功能。
7. JDBC接口增强
对JDBC接口进行了重新设计实现,资源开销更小,性能更高。
8. 高级功能扩展
扩展了对多级分区表的功能支持,新增对分区交换、分区重命名、修改LIST分区范围值、增加约束功能的支持;物化视图支持ON COMMIT快速刷新方式,支持嵌套物化视图,提升了复杂物化视图的刷新性能;支持递归CTE表达式。
9. 管理工具改进
管理工具提供了全新的SQL助手提供SQL语法检查和SQL输入助手功能;SQL语法检查功能对用户输入的SQL语句进行实时的语法检查,定位错误的SQL语法。SQL输入助手能够对用户输入SQL进行实时的智能提示。
10. 达梦数据库管理服务平台
提供了全新的基于Web开发的数据库管理服务平台(DEM), DEM不仅包含了桌面工具系统管理工具(Manager),数据迁移工具(DTS),性能监视工具(Monitor)的功能,还提供了集群部署(Deploy)功能、监控功能和告警功能。用户通过集群部署功能可快速和简单地在多台主机上部署MPP集群、DMDSC集群和数据守护集群。
DM8初步体验:
DM8的安装步骤与DM7保持了相同的操作体验,而全新设计的图标给我带来了一些惊喜,给人焕然一新的感觉,有图有真相:
共享存储集群、分布式文件系统、弹性计算等高级特性环境有限,这次就不给大家分享了,下面给大家分享一些我在初次安装使用中发现的细节性改进吧:
DM7的管理工具语法检查依赖于服务器,DM8这块做了重大改进,不依赖于服务器即可进行语法检查。SQL输入助手方面DM7也不是很精确,有时会有一些卡顿的情况出现,非常期待DM8的表现。
--打开DM8管理工具,构造两条有语法错误的SQL语句,看看效果。
--断开连接,新建一个窗口,构造两条有语法错误的SQL语句,脱机的情况下看看效果。
--测试一下SQL助手辅助输入的情况
DM8的SQL助手2.0果然很强大,可以提供脱机的语法检查,SQL输入辅助功能自然流畅,几可与sqldeveloper工具媲美。
DM8还有一个我非常期待的功能,我们在优化存储过程性能的时候会碰到一个非常头疼的问题:无法有效的确定存储过程中某条SQL的执行计划。DM8在存储过程调试功能中增加了查看SQL执行计划的功能,这是一大创新,下面我们来体验一下吧。
--创建一个存储过程,看看DM8支持多少动态视图
create or REPLACE PROCEDURE p_explain()
as
cnt INT;
begin
cnt=0;
select COUNT(*) INTO cnt from SYSOBJECTS where SYSOBJECTS.NAME LIKE 'V$%';
print cnt;
end;
--调试存储过程,查看select语句的执行计划
--当当当当,期待已久的功能终于实现了!
下面我们再来看看递归WITH吧,ITPUB上newkid等大神最喜欢用递归WITH来解复杂的SQL题目了,以后也可以在DM8上运行了。
--先来个简单的
with T(code,name,parentCode,level) as
(
select '01' as Code,'武汉市' Name,'0' parentCode,1 level from dual union all
select '02' as Code,'北京市' Name,'0' parentCode,1 level from dual union all
select '0101' ,'洪山区','01',2 from dual union all
select '010101' ,'街道口','0101',3 from dual union all
select '010102' ,'关山','0101',3 from dual union all
select '0102' ,'武昌区','01',2 from dual union all
select '0103' ,'江夏区','01',2 from dual union all
select '0201' ,'海淀区','02',2 from dual union all
select '020101' ,'魏公村','0201',3 from dual union all
select '020102' ,'中关村','0201',3 from dual union all
select '0202' ,'东城区','02',2 from dual
)
,A(code,name,parentCode,level) as(
select Code,Name,parentCode,level from T where Code='01'
union all
select T.Code,T.Name,T.parentCode,t.level from T
inner join A on T.parentCode=A.Code
)
--递归查询武汉数据
select * from A ;
--再来一个newkid大神写的质因子分解的SQL
WITH t(c,n,m,r) AS (
SELECT 1,2,720,1 FROM DUAL
UNION ALL
SELECT c+1
,CASE WHEN MOD(m,n)>0 THEN n+1 ELSE n END
,CASE WHEN MOD(m,n)>0 THEN m ELSE m/n END
,MOD(m,n)
FROM t
WHERE c<720 AND m>1
)
SELECT n FROM t WHERE r=0;
篇幅有限,今天就分享这么多了,下次有空再继续深入!