news 2026/4/17 12:32:04

达梦数据库和Oracle兼容性和性能比较

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
达梦数据库和Oracle兼容性和性能比较

比较的版本和配置
Oracle 19c

docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c SQL> SELECT BANNER_FULL FROM V$VERSION; BANNER_FULL -------------------------------------------------------------------------------- Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> show sga; Total System Global Area 3137338784 bytes Fixed Size 9141664 bytes Variable Size 654311424 bytes Database Buffers 2466250752 bytes Redo Buffers 7634944 bytes

达梦

wget http://download.dameng.com/eco/dm8/dm8_20250206_x86_rh6_rq_single.tar docker load -i ./dm8_20250206_x86_rh6_rq_single.tar SQL> SELECT * FROM v$version; LINEID BANNER ---------- --------------------------------- 1 DM Database Server 64 V8 2 DB Version: 0x7000d 3 03134284336-20250117-257733-20132 4 Msg Version: 32 5 Gsu level(5) cnt: 0

1.connect by语句

Oracle:

SQL> col a for 999999999999999 SQL> select sum(level) a from dual connect by level<=1e6; A ---------------- 500000500000 Elapsed: 00:00:00.22 SQL> select sum(i)a,substr(i,1,1) from(select level i from dual connect by level<=1e6)group by substr(i,1,1); A SUBS ---------------- ---- 85858530303 8 25252469697 2 55555500000 5 65656510101 6 75757520202 7 15152459596 1 35353479798 3 45454489899 4 95959540404 9 9 rows selected. Elapsed: 00:00:00.24 SQL> select sum(level) a from dual connect by level<=1e7; select sum(level) a from dual connect by level<=1e7 * ERROR at line 1: ORA-30009: Not enough memory for CONNECT BY operation Elapsed: 00:00:00.29 SQL> select sum(level) a from dual connect by level<=3e6; select sum(level) a from dual connect by level<=3e6 * ERROR at line 1: ORA-30009: Not enough memory for CONNECT BY operation Elapsed: 00:00:00.22 SQL> select sum(level) a from dual connect by level<=2e6; A ---------------- 2000001000000 Elapsed: 00:00:00.25 SQL> select sum(i)a,substr(i,1,1) from(select level i from dual connect by level<=2e6)group by substr(i,1,1); A SUBS ---------------- ---- 85858530303 8 25254469697 2 55555500000 5 65656510101 6 75757520202 7 1515150959596 1 35353479798 3 45454489899 4 95959540404 9 9 rows selected. Elapsed: 00:00:00.48

可能是内存设置问题,千万行、三百万行connect by level均报内存不足。
百万行简单加总220毫秒,按数字第一个字符分组汇总240毫秒, 二百万行简单加总240毫秒,按数字第一个字符分组汇总480毫秒。

达梦:

SQL> select sum(level) from dual connect by level<=1e6; LINEID SUM(LEVEL) ---------- -------------------- 1 500000500000 used time: 47.203(ms). Execute id is 1817. SQL> select sum(i)a,substr(i,1,1) from(select level i from dual connect by level<=1e6)group by substr(i,1,1); LINEID A SUBSTR(I,1,1) ---------- -------------------- ------------- 1 15152459596 1 2 25252469697 2 3 35353479798 3 4 45454489899 4 5 55555500000 5 6 65656510101 6 7 75757520202 7 8 85858530303 8 9 95959540404 9 9 rows got used time: 114.917(ms). Execute id is 805. SQL> select sum(level) a from dual connect by level<=2e6; LINEID A ---------- -------------------- 1 2000001000000 used time: 121.851(ms). Execute id is 807. SQL> select sum(i)a,substr(i,1,1) from(select level i from dual connect by level<=2e6)group by substr(i,1,1); LINEID A SUBSTR(I,1,1) ---------- -------------------- ------------- 1 1515150959596 1 2 25254469697 2 3 35353479798 3 4 45454489899 4 5 55555500000 5 6 65656510101 6 7 75757520202 7 8 85858530303 8 9 95959540404 9 9 rows got used time: 205.320(ms). Execute id is 806. SQL> select sum(level) from dual connect by level<=1e7; LINEID SUM(LEVEL) ---------- -------------------- 1 50000005000000 used time: 432.414(ms). Execute id is 1818. SQL> select sum(i),substr(i,1,1) from(select level i from dual connect by level<=1e7)group by substr(i,1,1); LINEID SUM(I) SUBSTR(I,1,1) ---------- -------------------- ------------- 1 1515160959596 1 2 2525251969697 2 3 3535352979798 3 4 4545453989899 4 5 5555555000000 5 6 6565656010101 6 7 7575757020202 7 8 8585858030303 8 9 9595959040404 9 used time: 845.997(ms). Execute id is 1819.

百万行简单加总47毫秒,按数字第一个字符分组汇总115毫秒, 二百万行简单加总122毫秒,按数字第一个字符分组汇总205毫秒。千万行简单加总432毫秒,按数字第一个字符分组汇总846毫秒。
按比例推算Oracle比达梦慢一半。

2.with function功能

Oracle

SQL> WITH FUNCTION f1(C INT) RETURN INT AS BEGIN RETURN C* 10; END; 2 SELECT f1(5236) FROM DUAL; 3 / F1(5236) ---------- 52360 计算阶乘 SQL> WITH FUNCTION fac(C INT) RETURN INT AS BEGIN RETURN case when C=1 then 1 else C* fac(C-1) end; END; SELECT fac(22)f FROM DUAL; / F -------------------------- 1124000727777607680000 Elapsed: 00:00:00.01 计算斐波那契数 SQL> WITH FUNCTION fib(C INT) RETURN INT AS BEGIN RETURN case when C=1 or C=2 then 1 else fib(C-1)+ fib(C-2) end; END; SELECT fib(35)f FROM DUAL; / F -------------------------- 9227465 Elapsed: 00:00:01.76

基本的函数,递归调用的函数都可以执行成功
达梦

SQL> WITH FUNCTION f1(C INT) RETURN INT AS BEGIN RETURN C* 10; END; 2 SELECT f1(5236) FROM DUAL; 3 / LINEID F1(5236) ---------- ----------- 1 52360 used time: 2.382(ms). Execute id is 66303. WITH FUNCTION fac(C INT) RETURN INT AS BEGIN RETURN case when C=1 then 1 else C* fac(C-1) end; END; SELECT fac(22)f FROM DUAL; [-7057]:Too many nested level -7057: FAC line 1 .... used time: 710.387(ms). Execute id is 0. WITH FUNCTION fib(C INT) RETURN INT AS BEGIN RETURN case when C=1 or C=2 then 1 else fib(C-1)+ fib(C-2) end; END; SELECT fib(35)f FROM DUAL; [-7057]:Too many nested level -7057: FIB line 1 .... used time: 743.573(ms). Execute id is 0.

最基本的函数可以,递归调用的函数定义不报错但不能实用。搜索报错信息,参照这篇文章相关dm.ini参数配置如下

EXPR_N_LEVEL = 200 #Maximum nesting levels for expression N_PARSE_LEVEL = 100 #Maximum nesting levels for parsing object MAX_SQL_LEVEL = 500 #Maximum nesting levels of VM stack frame for sql

修改参数还要重启服务就不测试了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:05:50

婚纱摄影网站|基于java + vue婚纱摄影网站系统(源码+数据库+文档)

婚纱摄影网站 目录 基于ssm vue婚纱摄影网站系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于ssm vue婚纱摄影网站系统 一、前言 博主介绍&#xff1a;✌️大厂…

作者头像 李华
网站建设 2026/4/18 9:41:35

VmwareHardenedLoader深度解析:5步构建不可检测的虚拟环境

VmwareHardenedLoader深度解析&#xff1a;5步构建不可检测的虚拟环境 【免费下载链接】VmwareHardenedLoader Vmware Hardened VM detection mitigation loader (anti anti-vm) 项目地址: https://gitcode.com/gh_mirrors/vm/VmwareHardenedLoader 还在为虚拟机被各种安…

作者头像 李华
网站建设 2026/4/18 7:53:54

Keil4下载及安装新手教程:避坑指南与常见问题

Keil4安装全攻略&#xff1a;从零开始搭建嵌入式开发环境 你是不是也遇到过这种情况&#xff1f;刚准备入门STM32&#xff0c;打开电脑想装个Keil&#xff0c;结果一搜“keil4下载”跳出来几十个链接&#xff0c;点进去不是病毒弹窗就是失效页面。好不容易下完安装却卡在第一步…

作者头像 李华
网站建设 2026/4/18 8:16:41

YOLOv8升级YOLOv10后,对GPU显存和算力提出了哪些新要求?

YOLOv8升级YOLOv10后&#xff0c;对GPU显存和算力提出了哪些新要求&#xff1f; 在工业质检、智能交通、安防监控等实时视觉系统日益普及的今天&#xff0c;目标检测模型正面临一个关键矛盾&#xff1a;既要更高精度&#xff0c;又要更低延迟。YOLO系列作为这一领域的标杆&…

作者头像 李华
网站建设 2026/4/18 7:38:02

I2C协议在工业控制中的应用:实战案例解析

I2C协议在工业控制中的实战落地&#xff1a;从原理到抗干扰设计的全链路解析你有没有遇到过这样的场景&#xff1f;产线上的温湿度监控系统突然“失联”&#xff0c;数据断断续续&#xff0c;查了半天发现是I2C总线通信超时&#xff1b;重启后更糟——SCL被死死拉低&#xff0c…

作者头像 李华
网站建设 2026/4/18 4:49:05

YOLO模型可以用于视频流检测吗?GPU并发能力决定上限

YOLO模型可以用于视频流检测吗&#xff1f;GPU并发能力决定上限 在智能安防、工业质检和自动驾驶等领域&#xff0c;实时处理摄像头传来的视频流已成为AI系统的标配能力。面对每秒数十帧的图像输入&#xff0c;系统不仅要“看得清”&#xff0c;更要“反应快”。这背后&#xf…

作者头像 李华