达梦数据库体系架构

文章目录

  • 一、逻辑结构
  • 二、物理结构
  • 三、内存结构
  • 四、线程管理


一、逻辑结构

1.DM数据库和实例

DM数据库指的是磁盘上存放在 DM 数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及 临时数据文件等。

实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。简单来说,实例就是操作 DM 数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。

 DM 数据库存储在服务器的磁盘上,而 DM 实例则存储于服务器的内存中。通过运行 DM 实例,可以操作 DM 数据库中的内容。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。在大多数情况下,一个数据库也只有一个实例对其进行操作。但是在DM共享存储集群(DMDSC)中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。此时,我们可以同时从多台不同的计算机访问这个数据库。

2.DM逻辑存储结构

DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在 DM 数据库内 部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都 存放在这些表空间中。同时,表空间被进一步划分为段、簇和页(也称块)。通过这种细分, 可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。

DM8中存储的层次结构如下:

(1)数据库由一个或多个表空间组成;

(2)每个表空间由一个或多个数据文件组成;

(3)每个数据文件由一个或多个簇组成;

(4)段是簇的上级逻辑单元,一个段可以跨多个数据文件;

(5)簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;

(6)页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。

(1)表空间

在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。

在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN 表空间、TEMP 表空间和 HMAIN 表空间。

1. SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创建表和索引。

2. ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。

3. MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。

4. TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。

5. HMAIN 表空间属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。

用户可以通过执行如下语句来查看表空间相关信息。

SYSTEM、ROLLMAIN TEMP 表空间查看语句:

SELECT * FROM V$TABLESPACE;

HMAIN 表空间查看语句:

SELECT * FROM V$HUGE_TABLESPACE; 

 

(2)记录

数据库表中每一行是一条记录,除了hegu表,其他的表都是在数据页中按记录存储数据,故页才是DM数据库的存储单位。由于记录不能跨页存储,因此记录长度受到数据页大小限制,DM规定每条记录的总长度不能超过页面大小一半。

(3)页

数据页是DM数据库中最小的数据存储单元,页大小可以为 4KB、8KB16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB一旦创建成功,页大小不能改变。

(4)簇

数据页的上级逻辑单元,由同一个数据文件中 16 个或 32 个或 64 个连续的数据页组成,默认大小为16,一旦创建成功,簇大小不能改变。

(5)段

由一组簇组成,段可以包含来自不同文件的簇,簇以及该簇所包含的数据页只能来自一个文件(连续的数据页),故数据段中的不同簇在磁盘可以不连续。

二、物理结构

DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。

1.配置文件

配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,如dm.ini, dmarch.ini。

2.控制文件

每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记录了数据库必要的初始信息。

3.数据文件

数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁 盘上的一个物理文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的 数据文件。在实际应用中,通常有多个数据文件。

4.重做日志文件

指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件又叫redo日志。主要用于数据库的备份和恢复。

查看日志文件:

select path,rlog_size from v$rlogfile;

增加一个日志文件:

alter database add logfile '/dmdata/DMOA/DMOA03.log' size 128;

 

修改日志文件的大小:

alter database resize logfile '/dmdata/DMOA/DMOA03.log' to 256;

 

5.归档文件

归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,如果没有归档日志文件,则只能利用备份进行恢复。

6.逻辑日志文件

如果在DM数据库上配置了复制功能,复制源就会产生逻辑日志文件。

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。

开启物理逻辑日志的功能,需要满足下面两个条件:

首先,要设置 RLOG_APPEND_LOGIC 为 12 或者 3

其次,通过设置参数 RLOG_IGNORE_TABLE_SET=1 或者建表(或修改表)时指定 ADD LOGIC LOG 开 启 。 如 果 需 要 记 录 所 有 表 的 物 理 逻 辑 日 志 , 设 置 INI 参 数 RLOG_IGNORE_TABLE_SET 1 即可;如果只需要记录某些表的物理逻辑日志,设置 INI 参数RLOG_IGNORE_TABLE_SET0,并在建表或者修改表的语法中使用ADD LOGIC LOG

7.备份文件

备份文件以 bak 为扩展名,备份文件自身包含了备份的名称、对应的数据库、备份类型和备份时间等信息。

8.日志文件

用户在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。

DM 数据库系统在运行过程中,会在 log 子目录下产生一个“dm_实例名_日期”命名的 事件日志文件。事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO错误等一些致命错误。

三、内存结构

DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。

1.共享内存

查看共享内存大小:

select para_name,para_value from v$dm_ini where para_name='MEMORY_TARGET';

其中0 表示的是不限制

Memory_pool 表示系统内存池大小:

select para_name,para_value from v$dm_ini where para_name='MEMORY_POOL';

 默认为200M。

2.数据缓冲区

存放的内容:LRU(最小使用算法)链表。状态:free,dirty,clean,pending。

查看大小:

select para_name,para_value from v$dm_ini where para_name='BUFFER';

修改大小:

SP_set_PARA_VALUE(SCOPE,PARA_NAME,PARA_VALUE);

3.日志缓冲区

日志缓冲区是用于存放重做日志的内存缓冲区。

select para_name,para_value from v$dm_ini where para_name like '%RLOG%';

 

RLOG_BUF_SIZE:日志缓冲区的大小 单位:page 设置成2的幂。
RLOG_POOL_SIZE:最大日志缓冲区的大小 单位:M

4.字典缓冲区

字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。

select para_name,para_value from v$dm_ini where para_name like '%DICT%';

DICT_BUF_SIZE:大小
PLN_DICT_HASH_THRESHOLD:关联登记

5.SQL 缓冲区

Sql缓冲区中存放的就是:最近使用的sql,DMSQL代码,执行计划和最近查询的结果集),用来减少硬解析。

USE_PLN_POOL表示执行计划是否重用:0 关闭, 1,2,3重用。

select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';

6.排序区

排序缓冲区提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。

select para_name,para_value from v$dm_ini where para_name='SORT_BUF_SIZE';

7.哈希区

为哈希连接而设定的缓冲区,该缓冲区是个虚拟缓冲区。

select para_name,para_value from v$dm_ini where para_name like 'HJ_BUF_SIZE';

HAGR_HASH_SIZE 表示处理聚集函数时创建哈希表的个数

select para_name,para_value from v$dm_ini where para_name like 'HAGR_HASH_SIZE';

四、线程管理

服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的 线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客 户提交的各种任务。DM 数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上, 服务器进程称为共享服务器进程。 DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等。

1.线程类型

1.监听线程:在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理;

2.工作线程是:DM服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作;

3.IO线程:把IO操作从工作线程中分离出来;

4.调度线程:用于接管系统中所有需要定时调度的任务,每秒钟轮询一次;

5.日志线程:任何数据库的修改,都会产生重做REDO日志,为了保证数据故障恢复的一致性,REDO 日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知FLUSH线程进行日志刷盘;

6.日志归档线程:包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由 日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取 出任务,按照归档类型做相应归档处理;

7.日志APPLY线程:作为主库的一个镜像,备库数据对用户只读,课承担报表、查询等任务,均衡主库的负载;

8.定时器线程:在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。定时器线程就是为这种需求而设计的;

9.逻辑日志归档线程:加快异地访问的响应速度,包含本地逻辑日志归档线程和远程逻辑日志归档线程。当配置了数据复制,系统才会创建这两个线程;

10. MAL系统相关线程:服务器的很多重要功能都是通过MAL系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。MAL系统内部包含一系列线程,有MAL 监听线程、MAL发送工作线程、MAL接收工作线程等。

2.线程信息查看

记录当前正在等待的线程信息:

SELECT * FROM V$LATCHES;

记录当前系统中活动线程的信息:

SELECT * FROM V$THREADS;

 

记录自系统启动以来,所有活动过线程的相关历史信息:

SELECT * FROM V$WTHRD_HISTORY;

 

记录服务器进程信息:

SELECT * FROM V$PROCESS;

 

 


更多资讯请上达梦技术社区了解: https://eco.dameng.com
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值