
心所向,梦必达
文章平均质量分 81
主要讲述国产数据库
收获不止数据库
兄弟合作,专注数据库/大数据/AI的研究和分享。梁敬彬为知名数据库专家,曾任中电福富研究院副院长、中盾安信研究院副院长、宁德时代技术顾问等职务。梁敬弘为清华计算机系本、硕、博毕业,拥有多项专利。兄弟共同出版过《收获,不止Oracle》和《收获,不止SQL优化》等多本畅销技术书籍,共同主理“收获不止数据库”公众号。
展开
-
达梦数据库知识总结链接贴
【原创】没有V$CIPHERS对象的查询权限。【原创】DM工具导入导出编码不一致的报错。【原创】达梦数据库的索引测试。10.视图序列同义词等。[原创]达梦表空间监控。7.过程函数包触发器。原创 2019-11-26 17:29:17 · 2969 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓵顺其自然 ,性能很拉垮
本文将通过Oracle数据库的各种既有手段,展示count(*)从单车变火箭,踏上性能腾飞的梦幻之旅。然而,火箭并非尽头,因为创新永无止境,小小count也能蕴藏大智慧!问,select count(*) from t 能否优化?有人纳闷了,如此简单,还能有优化空间?是的,简单的背后不简单。大饼: 彬老师,select count(*) from t 这种简单的SQL,还有优化空间吗?小渣: 执行计划走的是全表扫描,逻辑读高达1048,看起来性能的确很拉垮。注:手机端脚本展现不全,可左右滑动观看。原创 2025-03-28 19:12:24 · 538 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓶普通索引,单车变摩托
索引的本质是索引列值加上对应的rowid。当我们只需要计数时,访问索引比访问完整的表数据要小得多,IO开销自然大幅降低。彬老师:不过要特别注意,这里的索引列必须是非空约束或者主键,否则索引中不会包含NULL值的行,统计结果就会不准确,这时数据库会自动拒绝使用索引。小渣:效果很炸裂啊!不过,count(*) 这种遍历所有记录的查询,不是一般不建议使用索引吗?大饼:执行计划从全表扫描变成了全索引扫描,逻辑读从1048降到372,单车变摩托了!通过访问更小的数据结构来完成相同任务,确实是个聪明的方法。原创 2025-03-28 19:16:53 · 175 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓷位图索引,摩托变赛车
彬老师:位图索引可用与或来判断是否是某个取值,如性别是男则取1,否则取0,位图索引通过二进制压缩后体积极小,所以扫描速度惊人。大饼: 真没想到,位图索引能让count(*)提速这么多!大饼:执行计划变成位图索引扫描,逻辑读从372降至6。原创 2025-03-28 19:20:15 · 143 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓸物化视图,赛车变飞机
弘老师:不过需要提醒的是,物化视图并非万能。对于频繁更新的表来说,维护物化视图的开销可能会抵消查询性能的提升,甚至可能导致整体性能下降。技术选型必须结合具体业务场景。弘老师:物化视图本质上是一种预计算策略,是典型的空间换时间方式。注意看执行计划,查询直接访问的是MV_COUNT_T,而不是原表T。逻辑读从6又降到了3。大饼:合理使用才是王道。那么,这就是优化的极限了吗?小渣:厉害,手段真多啊!原创 2025-03-28 19:25:50 · 159 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓹缓存结果,飞机变火箭
彬老师:嗯,说到场景,我接下来分享一个非常特别的count优化案例:不需要任何索引、物化视图或缓存,只需对SQL做一个微小的改写,性能就能提升数百倍!弘老师:这是结果集缓存技术。它将查询结果存储在共享内存中,当同一查询再次执行时,数据库直接返回缓存的结果,无需重新计算。这就是为什么逻辑读显示为0。小渣:我明白了,这比物化视图更进一步,连访问物化视图的开销都省了。不过这和物化视图一样,都是看场景使用吧?大饼: 天啊,逻辑读变成0了?这是什么魔法,飞机变火箭了!大饼:哇,太牛了,请赐教!原创 2025-03-28 19:29:21 · 148 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓺等价改写,平地起惊雷
彬老师:秘诀就是在查询中添加’rownum=1’条件:select count(*) from t where rownum=1。弘老师:这一次次的优化过程还是充满智慧的,不仅要深刻理解执行计划、索引、体系架构等数据库技术,还要精通业务架构和场景需求,简单的背后不简单,探索永无止境。彬老师:表面上看确实不同,但在特定场景下,它们是等价的。那我就再延伸一下:如果建索引被限制,业务不允许空间换时间,也不可以等价改写,该怎么办?大饼:等等,加上rownum=1后,查询不是只返回第一行了吗?小渣:妙,平地起惊雷!原创 2025-03-28 19:38:46 · 224 阅读 · 0 评论 -
国产数据库创新集锦【达梦篇】——小count也有大智慧⓻达梦登场,小count大智慧
近年来,我国自主数据库的跨越式发展,既得益于持续的技术突破,更源于深入骨髓的创新基因。以达梦数据库为例,他们从数据库内核层面入手,创新性地引入动态计数器机制,彻底解决了count(*)的性能痛点,让用户无需任何特殊技巧,就能获得极致性能体验。弘老师:国产数据库的创新不是 “为了创新而创新”,而是始终围绕 “用户痛点” 和 “技术瓶颈” 双轮驱动。从内核架构重构到行业场景深耕,从代码级优化到生态体系建设,这种 “接地气且动真格的创新”,正是国产数据库能与甲骨文、IBM同台竞技的根本原因。原创 2025-03-28 19:43:42 · 424 阅读 · 0 评论 -
国产数据库第一股{达梦数据688692}背后的秘密【上】
改革开放以来,我国经济进入快车道。电信、金融、银行、电力、互联网等行业飞速发展,而数据库是一切业务的核心,但当时国产数据库刚起步,所以这些行业选择了相对成熟的国外产品,如Oracle、DB2。当时国产数据库厂商...原创 2025-04-14 06:51:07 · 791 阅读 · 0 评论 -
国产数据库第一股{达梦数据688692}背后的秘密【中】
L:自主原创团队对客户需求的响应效率非常高,比如达梦在中标国家电网时,客户要求表的字段能支持1440个列(按分钟采样,每分钟一个列,一天共1440分钟),Oracle拒绝了这个需求,而达梦仅用数天就实现了这项能力,让客户非常惊讶。还有一次某大型国企提出了苛刻的统计需求,要求在1秒内统计出包含千亿记录的表数据,此需求也被Oracle拒绝,最终达梦通过数据库内核层面的巧妙设计实现了这一能力,令客户叹为观止...原创 2025-04-14 09:49:59 · 556 阅读 · 0 评论 -
国产数据库第一股{达梦数据688692}背后的秘密【下】
A爸:我这细细一品,达梦成功的这两个关键之处其实还真不容易,这是一种长期主义精神的胜利。L:是的,长期主义,说得好!不忘初心,砥砺前行,不求回报却收益颇丰,这里蕴含着人生的哲理...原创 2025-04-14 11:20:33 · 623 阅读 · 0 评论 -
达梦数据库的位图索引
DM是一样支持位图索引的,试验如下drop table t purge;create table tasselect rownum name_id,decode(ceil(dbms_random.value(0,2)),1,‘M’,2,‘F’)gender,ceil(dbms_random.value(1,50)) location,decode(ceil(dbms_random.value(0,3)),1,‘child’,2,‘young’,3,‘middle_age’,4,‘o原创 2020-07-18 15:54:20 · 310 阅读 · 0 评论 -
达梦数据库的包与过程函数的测试
达梦数据库与Oracle的兼容性总体来说还是不错的,下面我们来一起探索一下包过程函数的基本功能的实现与一些注意点。已用时间: 0.630(毫秒). 执行号:372.案例:根据员工的编号找出员工所在的部门?来一个hello world。DMSQL 过程已成功完成。原创 2019-12-11 18:16:45 · 893 阅读 · 1 评论 -
达梦数据库的索引组织表与堆表的说明
达梦数据库可支持索引组织表,堆表,临时表,分区表,外部表等,不过 和Oracle不一样,Oracle默认是堆表,而DM默认是索引组织表不用加任何参数,默认就是索引组织表的模式SQL> create table t_branch(id int ,name varchar(20));操作已执行已用时间: 2.286(毫秒). 执行号:56.如果要变成堆表模式,需要指定NOBRANCH参...原创 2019-12-10 18:07:07 · 1742 阅读 · 0 评论 -
达梦HUGE表详解:列式存储的实现与优化
HUGE表实际上是列式存储的,缓存在HUGE BUFFER中。表空间需要是建立HUGE表空间,建HUGE表的时候不写表空间则默认指定在HMAIN。drop table t_huge;create huge table t_huge as select * from dba_objects;drop table t_huge;create huge table t_huge LOG AL...原创 2019-12-10 18:04:24 · 2734 阅读 · 0 评论 -
达梦数据库查看执行计划
两种格式,一个是explain ,一个是explain for (更详细的计划)构造环境create table t1 as select rownum as id ,rownum+1 as id2,rpad(’’,1000,’’) as contents from dual connect by level<=1;操作已执行2 create index idx_id_t1 o...原创 2019-12-10 17:58:15 · 4331 阅读 · 2 评论 -
达梦数据库并行查询配置详解及性能优化
开启并行设置前提,PARALLEL_POLICY 参数的设置。首先,使用 PARALLEL_POLICY 参数来设置并行策略。取值范围: 0、 1 和 2,默认值0。其中, 0 表示不支持并行; 1 表示自动并行模式; 2 表示手动并行模式。当开启本地并行(PARALLEL_POLICY>0)时,使用 PARALLEL_THRD_NUM 指定本地并行查询使用的线程数,取值范围为 1~1...原创 2019-12-10 17:56:17 · 1277 阅读 · 1 评论 -
达梦数据库热备几个注意点
达梦数据库热备试验中的一些注意点将数据库修改为归档模式[root@dm1 bin]# ./disql SYSDBA/SYSDBA@localhost:5237服务器[localhost:5237]:处于普通打开状态登录使用时间: 6.349(毫秒)disql V7.6.0.96-Build(2018.09.19-97292)ENTConnected to: DM 7.1.6.96...原创 2019-12-10 17:54:01 · 691 阅读 · 0 评论 -
达梦数据库的恢复
在备份的基础上我们测试一下恢复。先查看表空间的情况SQL> select tablespace_name,status from dba_tablespaces;行号 TABLESPACE_NAME STATUS1 SYSTEM 02 ROLL 03 TEMP ...原创 2019-12-10 17:51:53 · 1051 阅读 · 0 评论 -
达梦数据库的逻辑备份恢复
我们一起看看达梦数据库的逻辑备份恢复工具:dexp/dimp准备工作针对数据库对象,有 FULL、 OWNER、 SCHEMAS、 TABLES 四种导出方式可供选择。一次导出只能指定一种方式。 可选参数,缺省为 SCHEMA。FULL 方式导出整个数据库。OWNER 方式导出一个或多个用户拥有的所有对象SCHEMAS 方式的导出一个或多个模式下的所有对象。TABLES 方式导出和导...原创 2019-12-10 17:50:03 · 1093 阅读 · 0 评论 -
达梦数据库全局临时表
DM的临时表 ON COMMIT 关键词指定表中的数据是事务级还是或会话级的,默认情况下是事务级的。ON COMMIT DELETE ROWS:指定临时表是事务级的,每次事务提交或回滚之后,表中所有数据都被删除;ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时才清空表,并释放临时 B 树。接下来我们来做系列测试[root@dm1 bin]# ./...原创 2019-12-10 15:49:28 · 1722 阅读 · 0 评论 -
达梦数据库的表空间管理
日志组切换SQL> alter system switch logfile;操作已执行已用时间: 0.279(毫秒). 执行号:0.SQL> select path from v$rlogfile;行号 PATH1 /dm7/data/DAMENG/DAMENG01.log2 /dm7/data/DAMENG/DAMENG02...原创 2019-11-26 17:53:40 · 1008 阅读 · 0 评论 -
达梦数据库的启停
DM 数据库包含以下几种状态:配置状态(MOUNT): 不允许访问数据库对象,只能进行控制文件维护、归档配置、数据库模式修改等操作;打开状态(OPEN): 不能进行控制文件维护、归档配置等操作,可以访问数据库对象,对外提供正常的数据库服务;挂起状态(SUSPEND): 与 OPEN 状态的唯一区别就是,限制磁盘写入功能;一旦修改了数据页,触发 REDO 日志、数据页刷盘,当前用户将被挂起。...原创 2019-11-26 17:48:34 · 2944 阅读 · 0 评论 -
达梦数据库启停——dminit & dm.ini的研究
[root@dm1 bin]# ./dminit helpinitdb V7.6.0.96-Build(2018.09.19-97292)ENTdb version: 0x7000afile dm.key not found, use default license!License will expire in 14 day(s) on 2019-10-18格式: ./dminit ...原创 2019-11-26 17:47:15 · 2043 阅读 · 0 评论 -
达梦数据库的安装
1.确定操作系统(找到对应的安装包)[root@dm7 桌面]# cat /etc/issue[root@dm7 桌面]# uname -r2.6.32-220.el6.x86_64(i386 i686)2.确定硬件要求[root@dm7 opt]# df-h[root@dm7 opt]#free[root@dm7 opt]#cat /proc/cpuinfo3.规划安装用户[r...原创 2019-11-26 17:39:53 · 507 阅读 · 0 评论 -
达梦的CTAS写法的Oracle兼容性问题
在SQL编写的过程中要注意,DM是不支持create table xxx( 列1 ,列2…) as select …的模式要改造成create table xxx as select …as 列1,…as 列2…这样的模式。这个模式无论DM还是Oralce都支持,就不会报错了。以下语句在Oracle是OK的,在DM不支持DROP TABLE t1;CREATE TABLE t1 (id, ...原创 2019-11-26 17:00:57 · 2612 阅读 · 0 评论 -
达梦作业管理遇到的坑
设置DM的JOB,原本以为很简单的东西,结果折腾了好久,遇到了一个坑。我在写commit的时候想当然的回车换行了,结果作业任务就不能正常用了,这个有点坑啊(估计不少人和我一样),你看下图,生成的脚本也换行了,导致实际无法执行了。...原创 2019-11-26 16:23:05 · 1391 阅读 · 0 评论 -
达梦的用户口令策略及限制
用户密码最长为48个字节,创建用户语句时使用 password policy子句来指定口令策略。这里注意:这个值没有3,其实3是可以支持的,表示1+2=3,同时支持1和2的策略,其他类似。口令策略可单独使用,也可组合应用,比如:需要应用策略4和8,则设置口令策略为 4+8=12。看来DM的这个功能是有限制的,必须是安全版才支持。原创 2019-11-26 16:16:28 · 5153 阅读 · 0 评论 -
达梦数据库的触发器研究:库级与表级触发器实践
库级[root@dm1 bin]# ./disql SYSDBA/SYSDBA@localhost:5237服务器[localhost:5237]:处于普通打开状态登录使用时间: 5.547(毫秒)disql V7.6.0.96-Build(2018.09.19-97292)ENTConnected to: DM 7.1.6.96SQL> create table tab1( n...原创 2019-11-26 16:14:48 · 899 阅读 · 0 评论 -
达梦数据库类型的精度与标度
NUMBER[(精度 [, 标度])]NUMBER数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了总的数字数,精度范围是1至38。标度定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去精度与标度比如NUMBER(4,1)定义了小数点前面3位和小数点后面1位,共4位的数字,范围在-999.9到999.9。所...原创 2019-11-26 16:11:33 · 7214 阅读 · 0 评论 -
达梦数据库的并行设置生效与查看
达梦数据库的并行设置生效与查看首先,使用 PARALLEL_POLICY 参数来设置并行策略。取值范围: 0、 1 和 2,默认值0。其中, 0 表示不支持并行; 1 表示自动并行模式; 2 表示手动并行模式。当开启本地并行(PARALLEL_POLICY>0)时,使用 PARALLEL_THRD_NUM 指定本地并行查询使用的线程数,取值范围为 1~1024,缺省值为 10。需要注意...原创 2019-11-14 11:00:57 · 1518 阅读 · 0 评论 -
达梦数据库COUNT(*)性能分析
达梦数据库在统计条数方面有较大的性能优势,请看系列试验开始只有2000多条数据,COUNT(*)需要0.2毫秒,插入需要32毫秒。drop table t purge;create table t as select * from dba_objects;SQL> insert into t select * from t;影响行数 1401已用时间: 32.849(毫秒). ...原创 2019-11-14 16:58:24 · 4494 阅读 · 0 评论 -
达梦数据库的递归WITH特性研究
题目:一个布袋中装有数量相同的四种颜色的小球。随机从布袋中取四次,每次取完都放回去。现在问四次结果总颜色数等于3的概率是多少?题目很短,实现起来比较困难,尤其是只能用一条SQL来实现的时候,就更难了。不过,利用递归WITH的特性,确实在Oracle中可以用单条语句实现。我今天想分享的主题是,这么复杂的SQL达梦数据库也同样可以支持,只是要注意一些版本和参数方面的问题。SQL语句实现如下:...原创 2019-11-14 17:05:47 · 3722 阅读 · 0 评论 -
达梦数据库体系结构研究
总体来说,和Oracle差别不大, 也是由数据库和实例构成,其中数据库指的是磁盘上存放在DM 数据库中的数据的集合,实例一般是由一组正在运行的DM 后台进程/线程以及一个大型的共享内存组成。最大的差别在于Oracle是多进程而达梦数据库是单进程多线程模式[root@dm1 bin]# ps -ef|grep dmavahi 1729 1 0 06:16 ? ...原创 2019-11-14 17:15:45 · 1111 阅读 · 0 评论 -
Oracle与达梦(DM)数据库的KEEP缓存机制详解
在说DM的KEEP缓存之前,我们先说说Oralce的KEEP缓存大家都有接触过Oracle的KEEP缓存,把表和索引keep到buffer中先说一下前提条件:1.确保确保db_keep_cache_size 不为0,2. 确保表和索引在KEEP区alter table xxx storage(buffer_pool keep);,3.把表和索引的记录都进去。SQL> alter...原创 2019-11-14 17:23:41 · 1510 阅读 · 0 评论 -
达梦数据库分区表唯一索引限制与解决方案
DM数据库分区表有这么一个限制:局部唯一索引必须包含全部分区列.SQL> create table range_part_tab (id number,deal_date date,area_code number,nbr number,contents varchar2(4000))2 partition by range (deal_date)3 ...原创 2019-11-14 17:40:53 · 2304 阅读 · 0 评论