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

对于国产数据库,一直持支持态度,在关键领域需要有我们自己的数据库产品。而本文作者盖国强老师,数据库频道也撰写过《专访盖国强: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','[email protected]','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','[email protected]','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   [email protected] 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','[email protected]','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','[email protected]','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','[email protected]','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','[email protected]','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. 专访盖国强:NoSQL很火 但还需市场检验
  5. 关闭Oracle死锁进程的具体操作步骤

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/231024.html<

(0)
管理的头像管理
上一篇2025-04-19 12:24
下一篇 2025-04-19 12:25

相关推荐

  • 站群服务器到底是什么意思,怎么选择比较好

    站群服务器就是一台拥有多个独立IP地址、专门用于托管和管理多个网站的高性能服务器,其核心价值在于通过独立IP降低网站间的关联风险,并提升搜索引擎优化效果,站群服务器的工作原理与适用场景站群服务器本质上是将一台物理服务器通过虚拟化或直接配置的方式,分配给多个独立IP地址,每个IP对应一个独立的网站,这些网站共享服……

    2026-07-27
    0
  • 高防服务器误封正常流量如何调整,怎么解决?

    高防服务器误封正常流量,核心调整思路是从“一刀切”转向“精细化”——通过分析业务特征,调整防护阈值、配置白名单和启用智能学习模式,让防护系统学会区分真假流量,为什么会误封正常流量误封主要源于防护策略的通用化,高防服务器通常默认启用严格防护规则,当流量特征与攻击特征库部分匹配时,就会被拦截,据行业安全白皮书指出……

    2026-07-27
    0
  • 高防服务器的防御原理是什么,如何选择高防服务器?

    高防服务器的防御原理,简单说就是通过流量清洗、防火墙规则和黑洞路由等机制,在攻击流量到达业务服务器之前将其过滤或阻断,从而保障正常访问,流量清洗机制是核心防线高防服务器对抗DDoS攻击,靠的不是单一技术,而是一套组合动作,最常见的攻击类型是流量型攻击,比如UDP洪水、SYN洪水、ICMP放大等,核心思路是耗尽带……

    2026-07-26
    0
  • BGP线路到底是什么意思呢,有什么优势?

    BGP线路是一种通过边界网关协议实现多运营商网络互联的接入方式,能自动选择最优路径,极大提升跨网访问速度和稳定性,是解决国内南北网络瓶颈的核心方案,什么是BGP线路BGP,全称Border Gateway Protocol,边界网关协议,是互联网核心路由协议之一,它负责在自治系统之间交换网络可达性信息,BGP线……

    2026-07-26
    0
  • 增值电信业务经营许可证对IDC有多重要,如何办理?

    增值电信业务经营许可证是IDC服务商合法运营的核心凭证,它直接决定了机房能否接入骨干网、客户能否放心托管业务,以及服务商自身能否长期稳定发展,许可证是IDC进入市场的硬门槛互联网数据中心业务属于增值电信业务中的B1类,依据工信部《电信业务经营许可管理办法》,任何从事服务器托管、虚拟主机、云服务等业务的企业,必须……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注