盖国强老师谈DM6.0中DML操作与性能体验

数据库 其他数据库
本文由Oracle ACE盖国强老师撰写,主要是对于国产数据库DM6.0中DML操作和性能体验。可以说国产数据库在某些领域还是需要发展起来的。

对于国产数据库,51CTO一直持支持态度,在关键领域需要有我们自己的数据库产品。而本文作者盖国强老师,51CTO数据库频道也撰写过《51CTO专访盖国强:NoSQL很火 但还需市场检验》这样的文章。

拿到达梦国产数据库,我最感兴趣的并不是一些高端功能,更关注的是达梦在基本操作方面的性能,在数据库技术大会上,我曾经提到,其实对于Oracle数据库来说,其核心的功能从Oracle 7之后就很少变化,之后的版本,更多的是锦上不断添花的增强,而我们的国产数据库,如果能够扎扎实实做好基础工作,则未来是非常值得期待的。

以下是我的一些基础测试和对达梦的感觉。

1. 登陆与密码验证

安装达梦数据库之后,第一个遇到的是登陆问题,达梦数据库初始创立了3个用户,分别是 SYSDBA,SYSAUDITOR,SYSSSO,初始口令相同。这里我遇到的小小麻烦是,口令大小写问题,注意:达梦这三个缺省用户的口令是大写的,而且区分大小写。

  1. C:\dmdbms\bin>isql  
  2. isql V6.0.2.51-Build(2009.12.23)  
  3. SQL>login  
  4. server name:localhost  
  5. user name:sysdba  
  6. password:  
  7. port:12345  
  8. dm_login time used:80.306(ms) 

未经授权的用户

Login first.

 

这里的提示"未经授权的用户"让我困惑了好久,如果提示"用户名或口令错误",可能更易于理解。多次尝试之后,我把口令改为大写,成功登入数据库:

 

  1. SQL>login  
  2. server name:localhost  
  3. user name:SYSDBA  
  4. password:  
  5. port:12345  
  6. dm_login time used:71.900(ms) 

2. DML操作的基本测试

在达梦中创建数据表以及进行基本的过程编写符合标准,完全可以和Oracle通用。在ISQL中,缺省的会显示每个操作步骤的时间,以毫秒显示。

以下创建一个基本的测试表,做出一点简单的测试:

  1. SQL>CREATE TABLE EYGLE (  
  2. 2   ID          NUMBER,  
  3. 3   NAME        VARCHAR2(30),  
  4. 4   MAIL        VARCHAR2(60),  
  5. 5   PHONE       VARCHAR2(60),  
  6. 6   LDATE       DATE);  
  7. CREATE TABLE EYGLE (  
  8. ID              NUMBER,  
  9. NAME    VARCHAR2(30),  
  10. MAIL    VARCHAR2(60),  
  11. PHONE   VARCHAR2(60),  
  12. LDATE   DATE);  
  13.  
  14. time used: 1.860(ms) clock tick:3364215.  
  15. SQL>SELECT * FROM EYGLE;  
  16. SELECT * FROM EYGLE; 

ID              NAME            MAIL            PHONE           LDATE

0 rows got

 

time used: 0.850(ms) clock tick:1727965.

 

通过一个Loop循环,插入10万条测试记录,耗时大约1841 ms:

 

  1. SQL>begin 
  2. 2   for i in 1 .. 100000 loop  
  3. 3   insert into eygle values(i,'eygle','eygle@eygle.com','13911812803',sysdate);  
  4. 4   end loop;  
  5. 5   end;  
  6. 6   /  
  7. begin 
  8. for i in 1 .. 100000 loop  
  9. insert into eygle values(i,'eygle','eygle@eygle.com','13911812803',sysdate);  
  10. end loop;  
  11. end;  
  12. rows affected  
  13. time used: 1841.828(ms) clock tick:3771986460.  
  14. SQL>select * from eygle where rownum <2;  
  15. select * from eygle where rownum <2; 

ID              NAME            MAIL            PHONE           LDATE

1       1       eygle   eygle@eygle.com 13911812803     2010-04-19

1 rows got

 

time used: 1.577(ms) clock tick:3217072.

 

回退这个批量的INSERT操作,需要大约325ms:

 

  1. SQL>rollback;  
  2. rollback;  
  3. time used: 325.134(ms) clock tick:665851724. 

对比一下在Oracle中的同样操作(Oracle选择初始安装,未调整,10.2.0.4版本):

  1. C:\Users\eygle>sqlplus "/ as sysdba"  
  2.  
  3. SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 4月 19 11:56:32 2010  
  4. Copyright (c) 1982, 2007, Oracle.  All Rights Reserved. 

连接到:

  1. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production  
  2. With the Partitioning, OLAP, Data Mining and Real Application Testing options  
  3.  
  4. SQL> select name from v$database;  
  5.  
  6. NAME 
  7. ---------  
  8. EYGLE  
  9.  
  10. SQL> create user eygle identified by eygle; 

用户已创建。

  1. SQL> grant connect,resource,dba to eygle; 

授权成功。

  1. SQL> connect eygle/eygle 

 

已连接。

 

  1. SQL> set timing on 
  2. SQL> CREATE TABLE EYGLE (  
  3.   2  ID         NUMBER,  
  4.   3  NAME       VARCHAR2(30),  
  5.   4  MAIL       VARCHAR2(60),  
  6.   5  PHONE      VARCHAR2(60),  
  7.   6  LDATE      DATE); 

表已创建。

在Oracle中,这个LOOP循环共耗时4130ms,回退这个事务则用了670ms,不考察内部原理及其他相关技术实现,达梦在这个基本操作上,是有不错的体现的:

 

  1. SQL> begin 
  2.   2  for i in 1 .. 100000 loop  
  3.   3  insert into eygle values(i,'eygle','eygle@eygle.com','13911812803',sysdate);  
  4.   4  end loop;  
  5.   5  end;  
  6.   6  / 

PL/SQL 过程已成功完成。

已用时间:  00: 00: 04.13

SQL> rollback;

 

回退已完成。

已用时间:  00: 00: 00.67

进一步的,在达梦数据库中再次创建这些数据并提交,同时进行进一步数据追加,追加数据用时879ms:

  1. SQL>begin 
  2. 2   for i in 1 .. 100000 loop  
  3. 3   insert into eygle values(i,'eygle','eygle@eygle.com','13911812803',sysdate);  
  4. 4   end loop;  
  5. 5   end;  
  6. 6   /  
  7. begin 
  8. for i in 1 .. 100000 loop  
  9. insert into eygle values(i,'eygle','eygle@eygle.com','13911812803',sysdate);  
  10. end loop;  
  11. end;  
  12. rows affected  
  13. time used: 1764.746(ms) clock tick:3614125982.  
  14. SQL>commit;  
  15. commit;  
  16.  
  17. time used: 2.361(ms) clock tick:3931726.  
  18.  
  19. SQL>insert into eygle select * from eygle;  
  20. insert into eygle select * from eygle;  
  21.  
  22. 100000 rows affected  
  23. time used: 879.129(ms) clock tick:1800413670.  
  24. SQL>commit;  
  25. commit;  
  26.  
  27. time used: 1.975(ms) clock tick:3076490. 

而在Oracle中,这个时间消耗是1960ms:

  1. SQL> begin 
  2.   2  for i in 1 .. 100000 loop  
  3.   3  insert into eygle values(i,'eygle','eygle@eygle.com','13911812803',sysdate);  
  4.   4  end loop;  
  5.   5  end;  
  6.   6  / 

PL/SQL 过程已成功完成。

已用时间:  00: 00: 03.26

SQL> commit;

 

提交完成。

已用时间:  00: 00: 00.00

  1. SQL> insert into eygle select * from eygle; 

已创建100000行。

已用时间:  00: 00: 01.96

SQL> commit;

 

提交完成。

已用时间:  00: 00: 00.00

最后测试一下删除与更新操作,批量删除20w数据用时530ms,更新单字段,用时4297ms:

  1. SQL>delete from eygle;  
  2. delete from eygle;  
  3.  
  4. 200000 rows affected  
  5. time used: 530.098(ms) clock tick:1025037644.  
  6. SQL>rollback;  
  7. rollback;  
  8.  
  9. time used: 591.067(ms) clock tick:1210472582.  
  10.  
  11. SQL>UPDATE EYGLE SET NAME='EYGLE@2010';  
  12. UPDATE EYGLE SET NAME='EYGLE@2010';  
  13.  
  14. 200000 rows affected  
  15. time used: 4297.675(ms) clock tick:3718914483.  
  16. SQL>rollback;  
  17. rollback;  
  18.  
  19. time used: 3810.759(ms) clock tick:744454156. 

对于Oracle来说,这两个数字分别是6080 ms 和 5890 ms:

  1. SQL> delete from eygle; 

已删除200000行。

已用时间:  00: 00: 06.08

  1. SQL> rollback

回退已完成。

已用时间:  00: 00: 02.66

  1. SQL>  
  2. SQL> UPDATE EYGLE SET NAME='EYGLE@2010'

已更新200000行。

已用时间:  00: 00: 05.89

  1. SQL> ROLLBACK

回退已完成。

已用时间:  00: 00: 05.68

通过简单的单用户DML操作测试,达梦数据库的性能是非常良好的。Oracle数据库的UNDO与REDO机制是其特有的关键特性,这些特性衍生出强大的关联数据库功能;而我们目前对达梦的两方面的实现还知之甚少,希望在后续的测试和研究中,能够对这两方面的技术加深理解,进一步领会和对比这两大数据库平台。

 

盖国强先生简介

[[10366]]

盖国强,+10 年Oracle数据库使用经验,+ 8 年Oracle DBA管理与实践经验。

曾任职于某国家大型企业,服务于烟草行业,开发过基于Oracle数据库的大型ERP系统;后任职于北京某电信增值服务商企业,提供电信级数据库的规划与运维支持。目前从事独立的数据库服务、数据库咨询,专注于为中国企业提供中立、专业的数据库服务。

实践经验丰富,长于数据库诊断、性能调整与SQL优化等。对于Oracle内部技术等具有深入研究。高级培训讲师,培训经验丰富。以上资料来自北京恩墨科技有限公司(www.eygle.com)。

【编辑推荐】

  1. Oracle数据库的DML语句功能介绍
  2. 清除Oracle中无用索引 改善DML性能
  3. Oracle数据库与DM的强制访问的不同之处
  4. 51CTO专访盖国强:NoSQL很火 但还需市场检验
  5. 关闭Oracle死锁进程的具体操作步骤
责任编辑:彭凡 来源: ITPUB
相关推荐

2013-10-30 16:15:03

2013年度IT博客大盖国强

2010-04-02 22:02:19

盖国强NoSQL

2011-04-25 13:56:09

iPad2聪明盖儿

2015-04-15 10:38:14

NullObjectC#6.0改进

2009-09-18 14:09:07

2011-07-20 09:50:18

2011-06-14 10:31:06

用户体验

2011-06-09 17:18:09

2011-03-03 14:57:00

手机交互设计产品管理信息架构

2021-01-18 17:46:05

钉钉用户体验评测

2009-05-05 14:08:52

EMC存储虚拟化

2009-08-17 09:30:28

.NET 4.0

2010-04-27 13:06:11

Qomo 6.0

2012-02-13 14:33:53

笔记本评测

2011-11-10 16:04:19

笔记本评测

2023-12-13 11:26:15

Linuxbeta 版本

2015-04-24 13:54:42

平安WiFi

2009-10-09 13:42:56

Spring DataSpring DM

2013-08-19 09:44:59

Android设计指导Android Des
点赞
收藏

51CTO技术栈公众号