注册
达梦数据库体系结构
专栏/技术分享/ 文章详情 /

达梦数据库体系结构

Arno 2025/08/29 32 0 0
摘要

一、数据库与实例概念
DM 数据库:指的是存储在磁盘上的数据集合,包含数据文件、日志文件、控制文件和临时数据文件等。
实例:指的是在内存中运行的数据库管理进程,负责管理这些磁盘上的数据文件。

1、数据库:
它主要包括以下几个部分:
数据文件(.BDF):存储数据库的实际数据。
日志文件(.log):记录数据库的事务日志,用于恢复数据。
控制文件(.ctl):记录数据库的结构信息和状态信息。
临时数据文件:用于存储临时数据,如排序操作的中间结果。

2、实例:
实例是在内存中的进程/线程,负责管理和操作数据库,包括系统全局区和后台进行。
系统全局区:内存结构,存储数据库的共享数据和控制信息。
后台进程:多个进程协同工作,负责数据库的读写、日志记录、恢复等操作。

3、实例与数据库的关系
实例是数据库的管理者,它在内存中运行,管理数据库的所有操作。
数据库是实例管理的对象,是存储在磁盘上的数据集合。

二、DM 逻辑存储结构
1.层次关系
达梦的逻辑存储结构遵循以下层次关系,从上到下是包含关系:
数据库 (Database) -> 表空间 (Tablespace) -> 段 (Segment) -> 簇 (Extent) -> 页 (Page) 数据文件 (Datafile) 作为表空间的物理载体
a.数据库有一个或多个表空间组成。
b.每个表空间有一个或多个数据文件组成。
c.每个数据文件有一个或多个簇组成。
d.段是簇的上级逻辑单元,一个段可以跨多个数据文件。
e.簇由磁盘上连续的页组成,一个簇总是在一个数据文件中。
f.页是数据库中最小的分配单元,也是数据库中使用的最小的IO单元
69e86b659d8353f4802cac00fe7a1b56.jpg

2.数据库 (Database) - 最终的物理与逻辑集合
概念:数据库是最高层次的逻辑结构,是所有表空间、数据文件、段、簇、页的最终集合。它是一个自包含的单元,包含了所有的数据、元数据和日志文件。

3.表空间 (Tablespace) - 段的逻辑容器
3.1概念:
表空间是一个逻辑容器,它由一个或多个数据文件组成,用于存放所有的段(即数据库对象)。它是数据库的逻辑划分,用于将逻辑存储对象(如表、索引)与物理数据文件关联起来。
3.2类型:
SYSTEM:系统表空间,存放数据字典、系统视图、临时系统对象等关键信息。必不可少。
ROLL:回滚表空间,存放事务的回滚信息。用于保证数据一致性和事务回滚。必不可少。
TEMP:临时表空间,存放排序、哈希等操作产生的临时数据。
MAIN:默认表空间。如果创建对象时不指定表空间,则存放在此。
HMAIN:默认的 HUGE TABLE(列存表)表空间。
用户自定义表空间:用户可以根据业务需求创建自己的表空间(如USER_DATA,INDEX_DATA),将不同业务的数据分离,便于管理和性能优化。
3.3作用:
控制磁盘布局:可以将不同的表空间映射到不同的磁盘上,实现I/O负载均衡。
空间管理:可以设置表空间的最大大小、是否自动扩展等。
用户权限管理:可以给用户指定默认表空间和配额。
备份恢复单元:可以将表空间作为单独的单位进行备份和恢复。

4.段 (Segment) - 特定数据库对象的存储结构
4.1概念:
段是为特定数据库对象(如表、索引、回滚段等)分配的所有簇的集合。它是一个独立的逻辑存储结构,对应一个具体的数据库对象。
4.2类型:
数据段 (Data Segment):存储表(或表的分区)的数据。
索引段 (Index Segment):存储索引的数据。
回滚段 (Rollback Segment):存储事务的回滚信息。
LOB段 (LOB Segment):存储大型对象(如 TEXT, BLOB, CLOB)数据。
4.3作用:
每个段只属于一个特定的数据库对象。例如,你创建一张表 EMPLOYEES,数据库就会自动创建一个数据段来存放该表的数据;如果你再为 EMPLOYEES 表创建一个索引 IDX_EMP_ID,数据库又会创建一个独立的索引段来存放这个索引。

5.簇 (Extent) - 空间分配的单元
5.1概念:
簇是由一系列连续的页组成的逻辑单元。它是数据库为对象(如表、索引)分配存储空间的基本单位。
5.2大小:
一个簇包含的页数是固定的。当表空间页大小为8K/16K时,一个簇包含16个页(即128K / 256K);当页大小为32K时,一个簇包含8个页(即256K)。
5.3作用:
当创建一个新表时,数据库会为其分配一个初始簇。当表的数据不断增长,现有簇的空间用完时,数据库会一次性分配一个新的簇给这个表。这种按簇分配的方式比按页分配效率高得多,减少了空间管理的开销。

6.页 (Page) - 最小的I/O单元
6.1概念:
页是达梦数据库中最小的数据存储和管理单元,也是磁盘I/O操作的最小单位。所有对象(表、索引)的数据都存储在页中。
6.2大小:
默认大小为8KB,在初始化数据库实例时可以指定为 4K、8K、16K 或32KB(建议页大小大于等于操作系统块大小)。一旦数据库创建完成,页大小就无法更改。
6.3内容:
一个数据页通常包含页头、数据行、空闲空间和页尾等部分。页头包含了诸如页类型、上一页、下一页等信息。
6.4作用:
所有数据的读取和写入,都是以“页”为单位进行的。即使只修改一行数据,数据库也会将整个页加载到内存(缓冲区)中,修改后最终再整页写回磁盘。

7.数据是如何存储的?
当我们插入一行数据到表中时,这行数据会被写入到某个页中。多个连续的页组成了一个簇。该表所有的簇构成了该表的数据段。这个段必须位于某个表空间中。而这个表空间最终由一个或多个物理数据文件组成,所有这些共同构成了数据库。

三、物理存储结构
DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。
1典型的物理存储结构包括:
用于进行功能设置:配置文件;
用于记录文件分布:控制文件;
用于保存用户实际数据:数据文件、重做日志文件、归档日志文件、备份文件;
用来进行问题跟踪:跟踪日志文件和逻辑日志文件等。

2.配置文件
2.1文件扩展名: *.ini
2.2功能:
用于控制和调整数据库实例、进程的行为和性能。
2.3分类:
2.3.1 dm.ini:
主配置文件,包含了数据库运行所需的几乎所有参数,如内存设置、线程配置、缓冲区大小、控制文件路径等。其中手工修改dm.ini参数文件,然后重启才能生效。查看参数信息:
select * from vdm_ini where“VDM_INI”.PARA_NAME like UPPER(‘参数关字’)||‘%’;
2.3.2 dmmal.ini:
MAL系统配置文件,用于配置MAL(Message Access Layer)链路,是搭建数据守护、DSC集群等分布式环境所必需的文件。
2.3.3 dmarch.ini:
归档配置文件,用于配置本地归档、实时归档、即时归档等,是搭建容灾体系的核心文件。
2.3.4 dm_svc.conf:
客户端配置文件,用于配置连接别名、端口、负载均衡等,方便应用程序连接。
注意: dm_svc.conf 的工作目录是固定的,不能改变。
2.3.5 sqllog.ini:
用于sql日志的配置,当且仅当INI参数SVR_LOG=1时使用。
注意: 如果在服务器启动过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过程SP_REFRESH_SVR_LOG_CONFIG() 就会生效。
2.3.6 dmrep.ini:
用于配置复制实例
2.3.7 dmllog.ini:
用于配置逻辑日志
2.3.8 dmtimer.ini:
用于配置定时器,用于数据守护中记录异步备库的定时器信息或数据复制中记录异步复制的定时器信息。
2.3.9特点:
通常是文本文件,可以直接编辑(修改后需重启实例或执行特定命令生效)。
参数修改需谨慎,不合理的配置可能导致性能下降或数据库异常。

2.2 控制文件
2.2.1文件扩展名: *.ctl
2.2.2功能:
控制文件是一个二进制文件,它记录了数据库必要的初始信息。
a.记录数据库的物理结构:包含数据库名称、创建时间、字符集等。
b.记录数据文件和日志文件的信息:存储所有数据文件、重做日志文件的名称、路径、状态、大小等信息。数据库启动时,实例必须读取控制文件才能找到这些文件并挂载数据库。
记录检查点信息:记录最新的检查点(CKPT)信息,用于保证数据一致性。
c.记录归档信息:记录当前的归档状态和归档日志序列。
d.记录备份信息:如果使用了RMAN等工具进行备份,备份元数据可能会记录在控制文件中。
2.2.3特点:
a.极其重要;
b.强烈建议多路复用(即维护多个完全相同的副本),存放在不同的物理磁盘上,以防止单点故障导致数据库无法启动。
C.数据库处于开放(OPEN)状态时,其内容会不断被更新。
2.2.4备份策略:
策略一:在修改 dm.ctl 之前,先执行一次备份,确定 dm.ctl 修改成功后,再将备份删除,如果 dm.ctl 修改失败或中途出现故障,则保留备份文件。
策略二:在修改 dm.ctl 成功之后,根据 dm.ini 中指定的CTL_BAK_PATH/CTL_BAK_NUM 对最新的 dm.ctl 执行备份,如果用户指定的CTL_BAK_PATH 是非法路径,则不再生成备份文件,在路径有效的情况下,生成备份文件时根据指定的 CTL_BAK_NUM 判断是否删除老的备份文件。

2.3 数据文件
2.3.1文件扩展名: *.dbf
2.3.2功能:
a.数据文件存储了所有用户数据和大部分系统数据。
b.所有表、索引、视图、存储过程等对象的数据,最终都物理存储在一个或多个数据文件中。
数据文件与逻辑结构的表空间相关联。一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间。
注意: 不建议使用单个巨大的数据文件,为一个表空间创建多个较小的数据文件是更好的选择。
2.3.3特点:
a.可以设置自动扩展(AUTOEXTEND)属性,当空间不足时自动增长。
b.数据库管理员可以手动为表空间添加新的数据文件,以扩展其容量。

2.4 重做日志(REDO 日志)文件
2.4.1文件扩展名: *.log
2.4.2功能:
重做日志(即 REDO 日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中,用于保证数据库的持久性(Durability)和故障恢复。
事务恢复:如果数据库发生意外宕机,实例重启时,会利用重做日志(前滚)和回滚段(回滚)来恢复到崩溃前的一致性状态。
数据同步:在数据守护集群(Data Watch)中,主备库通过传输和应用重做日志来保持数据同步。
2.4.3特点:
a.每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为 DAMENG01.log、DAMENG02.log,这两个文件循环使用。
b,日志文件是循环使用的。当一组日志文件写满后,会发生日志切换(Log Switch),开始写入下一组。如果数据库处于归档模式,切换时会触发归档操作。
C.大小和数量需要合理规划。太小的日志文件会导致频繁切换,影响性能。
2.4.4查看重做日志文件信息:
select * from SYS.“V$RLOGFILE” ;

2.5 归档日志文件
2.5.1文件扩展名: *.arc (常见,可配置)
2.5.2功能:
是重做日志文件的历史副本。归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。
a.完整恢复:允许数据库进行时间点恢复(Point-in-Time Recovery)。即使数据文件损坏,只要有最近的备份和之后的所有归档日志,就可以将数据库恢复到任意时间点。
b.支撑集群与容灾:是配置数据守护集群(主备库)、读写分离集群等高级功能的必要条件,因为备库需要通过应用归档日志(或实时日志)来与主库同步
2.5.3特点:
a.生产环境强烈建议开启归档模式。
b.需要额外的磁盘空间来存储归档文件,并需要有归档日志的维护策略(定期清理过期的归档日志)。

2.6 其他文件:
其他文件包括:逻辑日志文件 ,物理逻辑日志文件,备份文件,sql日志文件,事件日志文件,数据重演文件。

四、内存结构
1 共享内存池
共享内存池是数据库在启动时,会向服务器申请一大片内存,供其他内存池或者缓冲区在不够用时提供调用。减少系统的调用,提升数据库的性能。
参数:MEMORY_POOL 单位:M
select para_name,para_value from vdm_ini where para_name='MEMORY_POOL'; 2 数据缓冲区 数据缓冲区,缓存的是数据页。数据缓冲区和共享内存池没有关系,通过三条链表来管理数据缓冲区中的数据页。数据缓冲区满,淘汰 LRU 链表上很少被使用到的数据页。 数据缓冲区大小设置建议: OLTP:物理内存的 40%-60% OLAP:物理内存的 60%-80% 数据缓冲区类型:normal,keep 可以手动管理,达梦数据库 keep 的是表空间Fast,recycle 系统自动管理,keep 的是临时表、回滚段的信息 参数:BUFFER 单位:M select para_name,para_value from vdm_ini where para_name=‘BUFFER’;
修改数据缓冲区大小为 800M
sp_set_para_value(2,‘BUFFER’,800);
3 重做日志缓冲区
缓存的是重做日志记录的信息,单位是页。重做日志缓冲区不够用时,会向服务器申请内存。
参数:RLOG_BUF_SIZE 单位:页
select para_name,para_value,para_type from vdm_ini where para_name='RLOG_BUF_SIZE'; 4 SQL 缓冲区 缓存的是包,执行计划,结果集的信息。当 SQL 类别、包比较多应该调整 SQL缓冲区大小。当 SQL 缓冲区不够用时,会共享内存池申请内存。 参数:CACHE_POOL_SIZE 单位:M select para_name,para_value,para_type from vdm_ini where para_name=‘CACHE_POOL_SIZE’;
5 字典缓冲区
缓存的是数据字典的信息。当数据库中有大量的对象或分区表时,考虑增加字典缓冲区的大小。当字典缓冲区不够用时,会向共享内存池申请内存。
参数:DICT_BUF_SIZE 单位:M
select para_name,para_value,para_type from v$dm_ini where para_name=‘DICT_BUF_SIZE’;

五、线程结构
1 监听线程
监听线程在数据库服务器端监听来自客户端的连接请求。
2 IO 线程
将磁盘上的数据页加载到数据缓冲区中;将数据缓冲区中的脏页在一定机制下(数据缓冲区满、执行检查点、数据库正常关闭)更新到磁盘上的数据文件中。
3 日志刷新线程
将重做日志缓冲区中的记录在一定机制(事务提交、执行检查点)下更新到磁盘上的重做日志文件中。
4 日志归档线程
数据库开启归档模式后,重做日志文件在归当前,将重做日志文件的内容拷贝到归档路径下。
5 日志重做线程
主要用于数据库的实例恢复。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服