注册
DM8数据库体系结构
技术分享/ 文章详情 /

DM8数据库体系结构

少年 2025/07/04 28 0 0

一、 逻辑结构概述
DM8 的逻辑结构主要由以下组件构成:
实例:数据库运行的动态环境,由一组后台进程/线程和共享内存区域组成,对外提供数据库服务。
内存池 (Memory Pool):
实例的核心内存区域,分为:
缓冲区 (Buffer):缓存磁盘数据页(热数据),减少物理I/O
排序区 (Sort Area):处理ORDER BY、GROUP BY等排序操作
哈希区 (Hash Area):加速表连接(Hash Join)等操作
image.png
线程/进程 (Threads/Processes)
根据操作系统类型(Linux多进程/Windows多线程)划分:
监听 (Listener):接收客户端连接请求(端口监听)
工作 (Worker):执行SQL解析、优化、执行的核心线程
IO:管理异步磁盘读写(预读、批量写)调度 (Scheduler):执行定时任务(备份、统计信息收集)日志 (Logger):写重做日志(Redo Log),保证事务持久性。
其他:包括检查点(CKPT)、清理(Cleaner)等辅助进程
达梦数据库组件:
image.png

文件类型 扩展名 作用
数据文件 .DBF 存储所有用户数据(表、索引等)
控制文件 .CTL 记录数据库物理结构(文件位置/大小)和状态(SCN/检查点))
重做日志 .LOG 记录所有数据变更,用于故障恢复(WAL机制)
in配置文件 dm.ini 核心参数配置)
归档文件 dmarch.ini 时间点恢复、主备同步

达梦逻辑结构和物理结构:
image.png
表空间:表空间是存储段的容器,由一个或者多个数据文件组成 。
初始化实例时,默认创建5个表空间:
SYSTEM表空间:存放了有关 DM 数据库的字典信息 ;
MAIN表空间:用户默认表空间,用于存放业务数据等;
ROLL表空间:用来存放事务运行过程中执行 DML 操作之前的值;
image.png
TEMP表空间:SQL 语句需要磁盘空间来完成某个操作
(1)创建索引;
(2)排序;
(3)中间结果集;
(4)临时表;
(5)不记录redo日志;
HMAIN表空间:用户存放HUGE表数据。
段:给特定对象(如表/索引)的存储单元、段存在于表空间,由簇构成,可以包含来自不同文件的簇,段中簇与 簇之间可以不连续。
物理存储在多个系统块中、类型:数据段、索引段、临时段等。
段的分类
image.png

簇:连续分配的存储单元、由多个连续的页组成、物理存储位置在数据文件中。
页:最小I/O操作单元、存储实际数据记录、大小可配置(默认8KB)。
二、物理存储结构
物理存储主要关注数据的持久化与可靠性:
数据文件(Data Files):存放表空间中的数据块,按表空间进行组织;
名为 dm.ctl 的控制文件。控制文件是一个二进制文件,它记录了数据库必要的初始信息,其中主要包含以下内容:

  1. 数据库名称;
  2. 数据库服务器模式;
  3. OGUID 唯一标识;
  4. 数据库服务器版本;
  5. 数据文件版本;
  6. 数据库的启动次数;
  7. 数据库最近一次启动时间;
  8. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的
    表空间,数组的方式保存起来;
  9. 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控
    制文件合法性,防止文件损坏及手工修改;
    10.可通过dmctlcvt 工具,将控制文件与txt文件进行互相转换。

重做日志文件(Redo Log Files):DM 数据库中添加、删除、 修改对象,或者改变数据,DM 都会按照特定的格式, 将这些操作 执行的结果写入到当前的重做日志文件中。每个数据库中至少有两组重做日志文件。
特点:
1.循环使用;
2.每组一个日志文件;
3.只能增加日志组,但不能删除;
4.各日志文件大小一致;
5.文件状态为“活动”与“不活动”两种。
控制文件(Control Files):跟踪数据库状态、日志序列号及文件位置等关键信息;
归档日志(Archived Logs):在 归档模式 (ARCHIVELOG Mode) 下,当重做日志文件写满切换时,会被 归档进程 (dmarch) 复制到指定目录保存。这是实现 时间点恢复 (Point-in-Time Recovery, PITR) 和 介质恢复 (Media Recovery) 的基础。
物理文件与操作系统 I/O 协作,通过多文件并行和动态扩展机制实现高吞吐与容量管理。
三、内存结构
DM8 的内存结构分为实例共享区和各会话私有区:
虚拟缓冲池 (Virtual Pool, VPOOL - 核心共享内存区):数据库实例启动时分配的主要共享内存区域,由多个子池组成:
数据缓冲区 (Data Buffer Pool / Buffer Cache):缓存从数据文件读取的 数据页,减少物理 I/O,是性能关键。
日志缓冲区 (Log Buffer):缓存尚未写入重做日志文件的事务 重做记录 (Redo Records)。
字典缓冲区 (Dictionary Cache):缓存频繁访问的 数据字典信息(系统表元数据)。
SQL 缓冲区 (SQL Cache / Plan Cache):缓存已解析和优化的 SQL 语句及其执行计划,避免重复硬解析。
结果集缓存 (Result Cache - 可选):缓存常用查询结果。
UNDO 池 (UNDO Pool):管理活动事务的 UNDO 信息。
会话/线程私有内存:每个服务器进程/线程拥有独立的私有内存区域,用于存储:会话连接状态、变量。私有 SQL 区 (绑定变量、运行时内存结构)。
排序区 (Sort Area)、哈希区 (Hash Area) 用于ORDER BY,GROUP BY,连接操作等。
游标状态。
内存管理:支持内存自动管理,可根据系统负载和工作负载特征,在设定的总内存限制内,动态调整 VPOOL 中各子池的大小,优化内存利用率,减少手动配置负担。(注:达梦通常不严格区分 SGA/PGA 概念,VPOOL是其核心管理单元)。
四、管理 DM 线程与进程模型
DM 服务器使用“对称服务器构架”的单进程、多线程结构方式处理用户请求与后台任务:
服务器主进程:接受客户端连接并分配工作线程;
工作线程(Worker Threads):执行 SQL 解析、优化、执行并返回结果;
日志写进程(LMS, Log Writer):将重做日志缓冲区内容写入重做日志文件;
检查点进程(CKPT):定期刷新脏页至数据文件,并更新控制文件中的 SCN;
SMON/Cleaner 进程:SMON 负责实例恢复与清理临时段,Cleaner 进程管理空闲空间;
并行执行进程:在大查询/批量操作时调度多个子进程并行工作,提高吞吐;
辅助后台任务:包括统计信息收集、备份调度、归档管理等各类服务线程。

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

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服