学达梦之数据库逻辑结构

网友投稿 867 2022-10-16

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

学达梦之数据库逻辑结构

这两天在梳理达梦数据库的一些知识点与运维经验,于是又把达梦的一些资料拿出来翻了翻。进入50岁之后,记忆力已经下降的厉害了,2019年系统学习过的达梦的一些概念,有些现在都开始模糊了,必须重新学习才行了。

达梦数据库的基础架构和一些概念都和Oracle十分相近,在业内还传说着达梦当年获得过Oracle 9i的代码,并在此基础上开发了达梦数据库。事实上这可能只是一个传说而已,盗窃别人的代码这种事,对于一个大型数据库厂商来说是不可能的事情。我和达梦的研发团队做过多次的交流,十分佩服这批国内数据库研发的坚守者。正是这批人的坚守,中国国产数据库才没有完全沦为开源套壳。不管怎么说,达梦数据库和Oracle在概念上十分相近,达梦的开发者全盘吸收了Oracle的一些理念,不管如何,作为RDBMS毫无疑问的王者,追随是一种不错的选择。

达梦数据库的逻辑概念和物理概念与Oracle十分接近。物理上的达梦数据库是一系列物理文件的组合,这和Oracle完全一致。从逻辑上看,达梦分为表空间、段、簇、页,这几个结构。一个表空间中有一个或者多个文件。一个簇是一系列连续的页的组合,簇不能跨物理文件。簇基本上相当于oracle的extent。二多个同构的簇构成了段,这个段和Oracle的segment一致。

达梦的默认表空间,SYSTEM是和Oracle的SYSTEM表空间一样的,存放关键的数据字典以及数据库的一些系统信息。ROLL表空间是回滚表空间,存储回滚段的。TEMP表空间和Oracle的TEMP也类似,存访临时表、临时段等。MAIN表空间是一个默认数据存储的表空间,如果用户创建表的时候没有指定表空间,会存储到MAIN中,这个有点类似Oracle的SYSAUX,不过也不完全相同。HMAIN是达梦独有的,用于存储默认的HUGE TABLE,当创建HUGE TABLE的时候,如果没有制定表空间,可以存储在这里。每一个用户都有一个默认的表空间。对于SYS、SYSSSO、SYSAUDITOR系统用户,默认的用户表空间是SYSTEM,SYSDBA的默认表空间为MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定MAIN表空间为用户默认的表空间。

达梦的数据记录是存储在页中的,因为一条达梦的数据记录不能跨页,因此记录的总长度收到页的限制,达梦7规定一条记录的总长度不能大于页大小的一半。达梦的页的概念与Oracle的BLOCK是类似的,页的大小从4K到32K,默认的页大小是8K,页大小在数据库创建时确定,一旦确定,不能修改。

达梦的页的结构如上图,由页头控制信息,数据,空闲空间和行偏移数组构成。这个结构和Oracle也很相似,不过并不相同。Oracle的空闲空间位于页头和数据之间,而达梦的空闲空间位于数据和行偏移数组之间。可以看出,达梦的数据是从块头往下分配的,而Oracle的空间是从底部向上分配的。这是完全不同的。另外oracle的块尾还有校验位,不过达梦没有。为什么会这样呢?达梦是采用double write机制来避免块断裂的,Oracle没有块断裂预防机制,因此需要靠块尾的校验字节来校验块是否一致。从数据块的结构我们可以看出达梦基于Oracle 9i代码的说法只能是一个传说了,数据块结构对数据库的整体影响是十分巨大的,一般数据库是很少会去轻易修改数据块结构的。Oracle目前的数据块结构的基础来自于Oracle 8,这二十多年,都没有做过大改。

既然是学习Oracle数据块的设计思路,达梦的页中也一共存在类似PCTFREE这样的对数据库性能影响很大的参数,不错,达梦叫FILLFACTOR,其作用也是和Oracle的PCTFREE一样的。通过这个参数让某个页不会因为INSERT而写的太满,从而导致今后UPDATE时候产生块的分裂。用过ORACLE数据库的DBA应该比较容易理解这个参数,以及这个参数对高性能高并发数据库性能的影响。

好了,今天就学习到这里,达梦数据库在逻辑架构上的与Oracle的相似性,是DBA的福音,Oracle DBA可以比较容易理解达梦数据库,在做数据库优化的时候,也可以参考部分Oracle的经验。

上一篇:生产环境Docker必备30+实战命令
下一篇:Django 中如何使用 Sass
相关文章

 发表评论

暂时没有评论,来抢沙发吧~