DM达梦数据库体系结构介绍

1、数据库和实例

1.1数据库

是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件等),保存在物理磁盘或文件系统中。

1.2实例

是一组操作系统进程(或者是一个多线程的进程)以及一些内存。通过数据库实例,可以操作数据库,一般情况下,我们访问、修改数据库都是通过数据库实例来完成的。

1.3两者关系

        初始化实例,会在磁盘或文件系统中生成一个数据目录,目录名是数据库名。目录里带有这个库的配置文件。我们启动数据库服务,并指定这个数据库的配置文件,即可将这个数据库拉起,同时会看到这个数据库服务的进程。拉起后数据库里的部分东西将会加载到内存中。实例就是数据库服务的进程+内存。所以,实例其实也是个抽象的概念,它在内存当中。而数据库是在磁盘上的。
        举个例子:图书馆里有许多书架,书架上全是书。此时有个图书馆系统,我们可以通过它找到书的位置。此时整个图书馆就是数据库(物理的,真实存在),而图书馆系统,就是实例(虚拟的)。

2、逻辑存储结构

达梦数据库DM使用的表空间,所有数据文件组合都放在表空间里,并将表空间进一步划分为段、簇、页(块),这种细分方式可以提高磁盘空间利用率。数据库由1个或多个表空间组成。

2.1表空间

(1)表空间存放用户、表、存储过程等东西。因此,表空间由1个或多个数据文件组成。
(2)每个数据文件,会被划分为多个簇。
(3)此时簇会很多,为了方便管理,把一定数量的簇都放到段里。
(4)段也就是个抽象概念,包含1个或多个簇,同时这些簇可以来自不同的数据文件,所以段能跨多个数据文件。
(5)将簇再进一步划分,划分为页(块),所以簇由多个页组成。页也是数据库中最小的单元。

2.2系统表空间

达梦数据库DM共有5个系统表空间,SYSTEM表空间、ROLL表空间、MAIN表空间、TEMP表空间、HMAIN表空间(有些版本没有这个表空间)。

SYSTEM:存放数据字典。
ROLL:达梦数据库DM自己维护,用户不用干涉。
MAIN:创建用户时没指定表空间,系统就会用此表空间指定为用户默认表空间。
TEMP:达梦数据库DM自己维护,内存不够用时会使用这个完成计算。
HMAIN:达梦数据库DM自己维护,用户不用干涉。

2.3一些概念简单说明

表空间在磁盘上都有对应的文件,用户自己新建表空间也会有一个与之对应的.DBF文件在数据库目录中。
(1)对象:是表空间在磁盘上的文件,叫对象,即物理存储空间。
(2)模式:是对象的集合,模式还包含一系列逻辑数据结构,模式的名字与用户名相同。
(3)用户:拥有表,且拥有一个单独的模式,用户创建的对象放在自己的模式中,那么此对象叫模式对象,用户访问自己的模式对象,不用加模式名。

建议当想创建用户时,先创建一个与之对应的表空间,然后创建用户,并将该用户指定给对应的表空间。

3、物理存储结构

物理存储结构就是磁盘上的数据库目录。里面的各个对象,加载到内存中(此时进入逻辑结构),放入各个表空间,然后实例(数据库进程)操作内存中的各个对象。

 4、配置文件

达梦数据库DM对每个数据库都有一个单独的数据库文件,叫dm.ini,或以.ini为扩展名。每创建一个库都会生成一个。可以配置数据库各种功能和性能。

5、常用的一些文件简单介绍

(1)普通的数据文件:基本都是以.dbf结尾的文件。
(2)redo log文件:redo log就是重做日志,每个数据库实例至少配有2个redo log文件,默认名为DAMENG01.log、DAMENG02.log,将循环使用。
(3)归档日志文件:当处于归档模式时,redo log文件会被连续写入到归档日志中,形成归档日志文件,以归档时间命名,也是.log为扩展名。当开启归档模式时,会损耗一定性能,但是数据丢失可能性降低,就是更安全。
(4)sql日志文件:当在dm.ini(数据库配置文件)里配置了PART_STOR=1时,会在达梦数据库DM的安装目录下的log目录,生成sql日志文件,记录会话执行的sql、参数、报错等信息。

都在数据库目录里,即数据目录中。

6、内存的结构

6.1 内存池

首先启动数据库服务时会向操作系统申请一大片内存池(大不大看你配多少了)。将池子分为共享内存池和运行时内存池。
(1)共享内存池:一大片内存组成,当DM数据库需要申请小片内存时就会从这申。用完了还回来。
(2)运行时内存池:数据库服务的一些功能模块需要使用的。 

6.2缓冲区

(1)数据缓冲区:将数据页从磁盘加载到内存时,存放的地方,包括要刷盘的脏页等都存放在此,非常重要
(2)日志缓冲区:redo log使用的。
(3)字典缓冲区:数据字典使用的,加载一部分数据字典的内容到内存,就放在这里。
(4)sql缓冲区:执行sql时需要使用的内存,包括生成的执行计划,都放在这里。当不够用时会使用TEMP表空间,参见2.2。
(5)排序区:执行sql排序时使用。
(6)哈希区:哈希连接时使用。

7、常用的一些线程

(1)监听线程:数据库服务的监听线程,监听数据库端口的,若有请求发来该线程就会被唤醒。
(2)工作线程:负责处理数据库系统的各种任务的。
(3)IO线程:当数据页不在缓冲区时,或者遇检查点、缓冲区满、系统关闭时,负责去物理磁盘读写。很耗时的线程。
(4)调度线程:负责接管系统中定时调度的任务,每秒钟轮询一次。
(5)日志flush线程:redo日志刷盘线程。
(6)日志apply线程:配置有守护进程的数据库服务,就会有这个线程。当数据库服务为备库时,负责将主库发来的redo日志打成任务并重做。
(7)定时器线程:需要在某个时间点或者某个时段反复进行某种操作时,就会用它。
(8)逻辑日志归档线程:用于DM8数据复制中,使用此线程复制逻辑日志。
(9)MAL系统线程:MAL系统是高速的通信系统,许多需要通信才能实现的功能都是通过它实现的,因此它在数据库服务里也有线程负责这些通信功能,有MAL监听线程、MAL发送工作线程、MAL接收工作线程等。

8、简单的讲下工作过程

       配置并初始化实例后,会在数据目录生成以数据库命名的目录(数据库)。启动数据库服务,将数据库中的部分数据文件(即对象)加载到内存中,放入表空间,并划分为段、簇、页。实例启动完成。

       用户连接实例,监听线程唤醒,校验信息后连接。新建表空间,此时会在数据库生成该表空间文件.DBF,新建用户,将用户指定该表空间。建表,插入数据。IO线程将对应数据页拉入缓冲区,工作线程负责处理用户的sql生成的任务。

       用户commit,并断开连接。关闭数据库服务,日志flush线程将redo日志刷盘,然后IO线程将脏页刷盘,当然还有许多操作,就不多说明了。

社区地址:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值