ITPub博客

首页 > 数据库 > 国内数据库 > DM数据库体系结构总结

DM数据库体系结构总结

原创 国内数据库 作者:liujiujiu 时间:2026-07-13 14:04:58 0 删除 编辑

DM数据库体系结构总结

一、体系结构概述

1.1 数据库与实例概念

数据库:指磁盘上存放在DM数据库中的数据的集合,包括数据文件、日志文件、控制文件以及临时数据文件等。 实例:由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成。实例是操作DM数据库的手段,用来访问数据库的内存结构以及后台进程的集合。 架构特点:

  • 采用"对称服务器构架"的单进程、多线程结构

  • 单实例:一个实例管理一个数据库

  • DMDSC:多个实例管理一个数据库(类似Oracle RAC)

1.2 整体架构图

二、存储结构

2.1 逻辑存储结构

DM数据库逻辑存储层次结构如下:

2.1.1 表空间

数据库中所有对象在 逻辑上 都存放在表空间。创建DM数据库时,自动创建4个表空间:

表空间名称 用途 特点
SYSTEM 存放数据库字典信息 用户不能创建表和索引
ROLL 存放回滚数据 DM自动维护,用于读一致性
MAIN 用户默认表空间 SYSDBA默认表空间
TEMP 临时表空间

存放临时数据,DM自动维护

2.1.2 页(数据块)

  • 页是数据库中 最小的 数据存储单元和 IO单元

  • 支持4KB、8KB、16KB、32KB四种大小

  • 默认为8KB,创建数据库后不可修改

     页结构

    

2.1.3 簇

  • 簇是数据页的上级逻辑单元
  • 由同一个数据文件中16、32或64个连续的数据页组成
  • 默认大小为16个页,创建数据库后 不可修改

2.1.4 段

段是簇的上级逻辑单元,由一组簇组成:

  • 数据段:表段、索引段
  • 临时段:临时表空间中的段
  • 回滚段:存放回滚信息,用于恢复和读一致性

2.2 物理结构

2.2.1 参数文件

dm.ini:数据库启动必需的配置文件 参数类型:

  • 静态参数:修改后需 重启服务器生效

  • 动态参数:修改后 即时生效(分会话级和系统级)

  • 手动参数:必须手动修改文件后重启生效

其他配置文件:

  • dmmal.ini:MAL系统配置文件

  • dmarch.ini:归档配置文件

  • dm_svc.conf:客户端连接配置文件

  • sqllog.ini:SQL日志配置文件

2.2.2 控制文件

文件名:dm.ctl。 二进制文件,记录数据库必要信息。

主要内容:

  • 数据库名称、服务器模式
  • 数据库版本、数据文件版本
  • 启动次数、最近启动时间
  • 表空间信息

使用dmctlcvt工具将控制文件与txt文件进行互相转换

使用dmctlcvt help查看具体参数含义

使用 dmctlcvt type=1 src=D:\dmdba\data\DAMENG\dm.ctl dest=D:\dmctl.txt 转换为txt文件

查看文件内容

2.2.3 数据文件

  • 扩展名:.dbf

  • 存储真实数据的最重要文件类型

  • 一个数据库可以有多个数据文件

2.2.4 在线日志文件

  • 扩展名: .log

  • 默认文件为 DAMENG01.log、DAMENG02.log

2.2.5 归档日志文件

归档时间命名。通过 dmarch.ini文件配 置归档类型、归档日志大小、归档日志目录、归档日志保 留大小/时间等

  • 重做日志文件的副本

  • 用于数据库恢复和数据守护

  • 需要开启归档模式

2.2.6 事件日志

记录了 DM 数据库运行时的关键事件。系统启动、关闭、内存申请失败、IO 错误等一些致命错误;数据库运行过程中的日志信息;备份还原过程中备份还原操作的阶段性信息等。

  • 主要用于系统出现严重错误时进行查看并定位问题,它随着DM 数据库服务的运行一直存在

  • 默认存放在数据库log 目录下,../dmdbms/log;

  • 可通过修改ELOG_FLAG参数,配置 ELOG 日志文件命名方式,默认为 dm_实例名_年月.log

2.2.7 备份文件

只有有效的数据页,包括数据文件的描述页和被分配使用的数据页。

  • 备份片文件后缀为.bak,用来存放备份数据

  • 元数据文件的后缀为.meta

三、内存结构

3.1 内存池

3.1.1 共享内存池

  • 启动时从操作系统申请的一大片内存

  • 减少系统调用,提高内存管理效率

关键参数

-- 查看内存池参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name LIKE '%MEMORY%';
参数 说明 默认值
MEMORY_POOL 共享内存池大小(MB) 200-500
MEMORY_EXTENT_SIZE 每次扩展大小(MB) 32
MEMORY_TARGET 目标大小(MB),0表示不限制 15000

3.1.2 运行时内存池

  • 特定功能模块使用的内存池

  • 包括会话内存池、虚拟机内存池等

3.2 缓冲区

3.2.1 数据缓冲区

  • 存放数据页的关键内存区域

  • 四种类型:

类型 用途 特点
NORMAL 默认缓冲区 可手动调整
KEEP 常驻缓冲区 很少淘汰
FAST 快速缓冲区 系统自动管理
RECYCLE 回收缓冲区 临时表空间使用
  • 管理链表

    • 自由链:存放未使用的数据页

    • LRU链:存放已使用的数据页

    • 脏链:存放已修改的数据页

  • 参数配置:

-- 查看缓冲区参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name LIKE '%BUFFER%';
参数 说明 推荐值
BUFFER NORMAL缓冲区大小(MB) OLTP:40-60%内存
OLAP:60-80%内存
KEEP KEEP缓冲区大小(MB) 8
RECYCLE RECYCLE缓冲区大小(MB) 300

3.2.2 日志缓冲区

  • 存放重做日志的内存缓冲区

  • 由RLOG_BUF_SIZE参数控制,单位为 页

-- 查看日志缓冲区参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name = 'RLOG_BUF_SIZE';

3.2.3 字典缓冲区

  • 缓存数据字典信息(表、列、权限等)

  • 由DICT_BUF_SIZE参数控制,默认5M

-- 查看字典缓冲区参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name = 'DICT_BUF_SIZE';

3.2.4 SQL缓冲区

  • 存放执行计划、SQL语句和结果集缓存

  • 由CACHE_POOL_SIZE参数控制

-- 查看SQL缓冲区参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name LIKE '%CACHE_POOL_SIZE%';

3.3 排序区

  • 提供数据排序所需的内存空间

  • 由SORT_BUF_SIZE参数控制

-- 查看排序区参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name LIKE '%SORT%';

3.4 哈希区

  • 为哈希连接设定的虚拟缓冲区

  • 由HJ_BUF_SIZE参数控制

-- 查看哈希区参数
SELECT para_name, para_value FROM v$dm_ini 
WHERE para_name LIKE '%HJ%';

四、线程结构

DM数据库采用 单进程、 多线程架构。

4.1 主要线程类型

4.1.1 监听线程

  • 在服务器端口循环监听客户端连接请求

  • 生成会话申请任务,加入工作线程任务队列

  • 优先级高于普通线程

4.1.2 工作线程

  • DM服务器的核心线程

  • 从任务队列中取出任务并处理

  • 负责所有实际的数据相关操作

4.1.3 IO线程

  • 处理数据库IO读写操作

  • 触发时机:

    • 数据页不在缓冲区中,需要读入

    • 缓冲区满或系统关闭,需要写入脏页

    • 检查点到来,需要写入所有脏页

4.1.4 日志FLUSH线程

  • 将重做日志缓冲区中的日志写入磁盘

  • 在事务提交或执行检查点时触发

  • 保证数据故障恢复的一致性

4.1.5 日志归档线程

  • 负责远程异步归档任务

  • 从任务队列中取出任务,按归档类型处理

4.1.6 日志APPLY线程

  • 在数据守护系统中使用

  • 备库接收主库的REDO日志并重做

  • 保持主备数据同步

4.1.7 调度线程

  • 接管系统中所有需要定时调度的任务

  • 每秒钟轮询一次

  • 主要职责:

    • 检查系统级时间触发器

    • 清理SQL缓存、计划缓存中失效项

    • 执行动态缓冲区检查

    • 自动执行检查点

    • 会话超时检测

    • 唤醒等待的工作线程

4.2 线程信息查看

-- 查看当前活动线程
SELECT * FROM v$threads;
-- 查看线程统计信息
SELECT name, COUNT(*) as thread_count 
FROM v$threads 
GROUP BY name 
ORDER BY thread_count DESC;
-- 查看进程信息
SELECT * FROM v$process;

五、常用参数

5.1初始化参数

参数名 说明
PAGE_SIZE 数据文件使用的页大小,建议配置为32K
EXTENT_SIZE 数据文件使用的簇大小,建议配置为32
LOG_SIZE 日志文件大小,建议配置为2048M;
CASE_SENSITIVE 大小写是否敏感,1:敏感;0:不敏感;
CHARSET/UNICODE_FLAG 字符集选项,0 代表 GB18030;1 代表UTF-8;2 代表韩文字符集 EUC-KR;

簇,页,日志文件大小,字符集,大小写敏感,需要在数据库创建之前就确定好的不可修改

----例子:MySQL迁移数据库到DM的时候,库的名称是小写customer_service,导入后未改变库名。在DM数据库命令行操作时切换customer_service模式时需要使用“customer_service”才能识别为小写,不加“”会默认识别为CUSTOMER_SERVICE。

5.2 dm.ini参数

参数名 说明
MAX_SESSIONS 系统允许同时连接的最大数
TEMP_SPACE_LIMIT 临时表空间大小上限,单位 MB
UNDO_RETENTION 事务提交后回滚页保持时间,单位秒
SVR_LOG 是否打开 SQL 日志功能,0:关闭;1:打开
MAL_INI 是否启用 MAL 系统,0:不启用;1:启用
ARCH_INI 是否启用归档,0:不启用;1:启用

5.3 修改参数的方法

-- 方法1:使用系统函数修改动态参数
SP_SET_PARA_VALUE(1, 'BUFFER', 8000);
-- 方法2:使用系统函数修改静态参数
SP_SET_PARA_VALUE(2, 'MAX_SESSIONS', 1000);
-- 方法3:使用ALTER SYSTEM命令
ALTER SYSTEM SET 'ENABLE_BLOB_CMP_FLAG' = 1 BOTH;
-- 查看参数信息
SELECT para_name, para_value, para_type 
FROM v$dm_ini 
WHERE para_name = 'BUFFER';

5.4 参数修改注意事项:

  • 静态参数:修改后需要重启数据库实例

  • 动态参数:修改后立即生效

  • 手动参数:必须手动修改dm.ini文件后重启

  • 修改参数前建议 备份当前配置

  • 生产环境修改参数需在 维护窗口进行

六、总结

DM数据库体系结构具有以下特点:

  • 架构清晰:采用单进程多线程架构,资源利用率高

  • 存储层次分明:从数据库到页的五层逻辑结构,管理精细

  • 内存管理高效:多种缓冲区和内存池设计,减少IO操作

  • 线程分工明确:各类线程各司其职,保证系统稳定运行

  • 参数配置灵活:支持动态和静态参数,便于性能调优

通过深入理解DM数据库的体系结构,可以更好地进行数据库管理、性能优化和故障排查,。为后续的深入学习奠定基础。

达梦在线社区:https://eco.dameng.com

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050873/viewspace-3175757/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2026-07-13

  • 博文量
    3
  • 访问量
    2149