这一篇简单介绍一下达梦数据库的系统架构。
Oracle的数据库分为两个部分,实例和数据库。实例由内存和进程组成,而数据库部分由文件组成。
而达梦数据库在安装过程中似乎并没有配置什么和内存相关的参数,莫非达梦数据库并没有独立的内存管理机制。
Oracle、SQLSERVER、DB2等大型数据库与ACCESS、EXCEL等小数据量数据库之前的一个重大区别就是前者拥有独立的内存管理功能,而后者只是一个操作系统上运行的应用程序,内存的分配和使用完全通过操作系统实现。
查询了一下达梦的管理员文档,发现达梦还是存在内存管理功能的,不过达梦的内存管理显得十分的简单。
达梦数据库总共包括3部分内存结构:数据缓冲区、日志缓冲区和共享内存池。
其中数据缓冲区用来缓存数据库中读取和修改的数据块,这部分由3个链表结构组成,分别是zi you链表、干净链和脏链。这部分的内存结构和Oracle中的DB_CACHE部分类似;
日志缓冲区用于写入系统日志文件的缓冲,类型于Oracle中的LOG_BUFFER部分;
而共享缓冲区和Oracle中SHARED_POOL并不相同,主要用于达梦数据库小片内存的申请和释放。似乎达梦中并没有明确的共享池以及数据字典缓冲区的概念。如果是这样,那么显然不存在SQL语句重用的情况,也就是说对于所有的语句都是硬解析,这势必会对系统的并发性造成影响。
在达梦数据库中处理一些大数据量的表,然后在Windows的任务管理区中观察达梦数据库使用内存的情况。开始的时候达梦占用了50M的内存,当通过isql登陆数据库后,数据库使用内存增加,但是幅度很小。随着处理表数据量的增大(仅包含一个NUMBER类型的表),插入数据量达到100000的时候,达梦使用内存增加到了90M,随后数据量达到了1600000,而达梦使用的内存也达到了325M左右。当一段时间不再使用后,发现达梦数据库使用内存的空间又下降到100M左右。看来达梦的内存管理并不是预分配定额的内存,而是随着处理数据的增加而不断分配的,而且当一段时间不使用后,达梦数据库还会将部分内存释放给操作系统。从这一点看,达梦虽然拥有自己的内存管理系统,比ACCESS、EXCEL之类的数据库要专业一些,但是与当前的主流数据库还是有较大的差距,一方面内存管理体系过于简单,只能实现最简单的数据缓冲功能;另一方面,内存管理机制与操作系统绑定过于紧密,频繁的从操作系统分配内存,或释放空闲内存给操作系统,势必降低内存分配和管理的效率。
下面看看达梦数据库的文件部分。但是在开始之前,还是先要了解一下达梦数据库的逻辑结构。
达梦数据库的逻辑结构显然和Oracle有很大区别,而于SQLSERVER、SYBASE等数据库比较相似。在达梦数据库中存在多个DATABASE的概念,每个DATABASE由一个或多个数据文件组成。用户和DATABASE之间没有一一对应的关系。也就是说只要拥有权限,用户可以读写任何数据库中任何数据文件中的对象,因此DATABASE的概念和Oracle的TABLESPACE有十分类似。
达梦数据库也是由数据文件、日志文件、控制文件和参数文件组成的。
新闻热点
疑难解答