首页 > 数据库 > 国内数据库 > DM数据库体系结构总结
数据库:指磁盘上存放在DM数据库中的数据的集合,包括数据文件、日志文件、控制文件以及临时数据文件等。 实例:由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成。实例是操作DM数据库的手段,用来访问数据库的内存结构以及后台进程的集合。 架构特点:
采用"对称服务器构架"的单进程、多线程结构
单实例:一个实例管理一个数据库
DMDSC:多个实例管理一个数据库(类似Oracle RAC)


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

数据库中所有对象在 逻辑上 都存放在表空间。创建DM数据库时,自动创建4个表空间:
| 表空间名称 | 用途 | 特点 |
|---|---|---|
| SYSTEM | 存放数据库字典信息 | 用户不能创建表和索引 |
| ROLL | 存放回滚数据 | DM自动维护,用于读一致性 |
| MAIN | 用户默认表空间 | SYSDBA默认表空间 |
| TEMP | 临时表空间 |
存放临时数据,DM自动维护 |

页是数据库中 最小的 数据存储单元和 IO单元
支持4KB、8KB、16KB、32KB四种大小
默认为8KB,创建数据库后不可修改
页结构

段是簇的上级逻辑单元,由一组簇组成:
dm.ini:数据库启动必需的配置文件 参数类型:
静态参数:修改后需 重启服务器生效
动态参数:修改后 即时生效(分会话级和系统级)
手动参数:必须手动修改文件后重启生效
其他配置文件:
dmmal.ini:MAL系统配置文件
dmarch.ini:归档配置文件
dm_svc.conf:客户端连接配置文件
sqllog.ini:SQL日志配置文件

文件名:dm.ctl。 二进制文件,记录数据库必要信息。
主要内容:
使用dmctlcvt工具将控制文件与txt文件进行互相转换
使用dmctlcvt help查看具体参数含义

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

查看文件内容


扩展名:.dbf
存储真实数据的最重要文件类型
一个数据库可以有多个数据文件

扩展名: .log
默认文件为 DAMENG01.log、DAMENG02.log

归档时间命名。通过 dmarch.ini文件配 置归档类型、归档日志大小、归档日志目录、归档日志保 留大小/时间等
重做日志文件的副本
用于数据库恢复和数据守护
需要开启归档模式
记录了 DM 数据库运行时的关键事件。系统启动、关闭、内存申请失败、IO 错误等一些致命错误;数据库运行过程中的日志信息;备份还原过程中备份还原操作的阶段性信息等。

主要用于系统出现严重错误时进行查看并定位问题,它随着DM 数据库服务的运行一直存在
默认存放在数据库log 目录下,../dmdbms/log;
可通过修改ELOG_FLAG参数,配置 ELOG 日志文件命名方式,默认为 dm_实例名_年月.log
只有有效的数据页,包括数据文件的描述页和被分配使用的数据页。
备份片文件后缀为.bak,用来存放备份数据
元数据文件的后缀为.meta
启动时从操作系统申请的一大片内存
减少系统调用,提高内存管理效率
关键参数
-- 查看内存池参数 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 |
特定功能模块使用的内存池
包括会话内存池、虚拟机内存池等
存放数据页的关键内存区域
四种类型:
| 类型 | 用途 | 特点 |
|---|---|---|
| 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 |
存放重做日志的内存缓冲区
由RLOG_BUF_SIZE参数控制,单位为 页
-- 查看日志缓冲区参数 SELECT para_name, para_value FROM v$dm_ini WHERE para_name = 'RLOG_BUF_SIZE';
缓存数据字典信息(表、列、权限等)
由DICT_BUF_SIZE参数控制,默认5M
-- 查看字典缓冲区参数 SELECT para_name, para_value FROM v$dm_ini WHERE para_name = 'DICT_BUF_SIZE';
存放执行计划、SQL语句和结果集缓存
由CACHE_POOL_SIZE参数控制
-- 查看SQL缓冲区参数 SELECT para_name, para_value FROM v$dm_ini WHERE para_name LIKE '%CACHE_POOL_SIZE%';
提供数据排序所需的内存空间
由SORT_BUF_SIZE参数控制
-- 查看排序区参数 SELECT para_name, para_value FROM v$dm_ini WHERE para_name LIKE '%SORT%';
为哈希连接设定的虚拟缓冲区
由HJ_BUF_SIZE参数控制
-- 查看哈希区参数 SELECT para_name, para_value FROM v$dm_ini WHERE para_name LIKE '%HJ%';
DM数据库采用 单进程、 多线程架构。

在服务器端口循环监听客户端连接请求
生成会话申请任务,加入工作线程任务队列
优先级高于普通线程
DM服务器的核心线程
从任务队列中取出任务并处理
负责所有实际的数据相关操作
处理数据库IO读写操作
触发时机:
数据页不在缓冲区中,需要读入
缓冲区满或系统关闭,需要写入脏页
检查点到来,需要写入所有脏页
将重做日志缓冲区中的日志写入磁盘
在事务提交或执行检查点时触发
保证数据故障恢复的一致性
负责远程异步归档任务
从任务队列中取出任务,按归档类型处理
在数据守护系统中使用
备库接收主库的REDO日志并重做
保持主备数据同步
接管系统中所有需要定时调度的任务
每秒钟轮询一次
主要职责:
检查系统级时间触发器
清理SQL缓存、计划缓存中失效项
执行动态缓冲区检查
自动执行检查点
会话超时检测
唤醒等待的工作线程
-- 查看当前活动线程 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;
| 参数名 | 说明 |
|---|---|
| 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。
| 参数名 | 说明 |
|---|---|
| MAX_SESSIONS | 系统允许同时连接的最大数 |
| TEMP_SPACE_LIMIT | 临时表空间大小上限,单位 MB |
| UNDO_RETENTION | 事务提交后回滚页保持时间,单位秒 |
| SVR_LOG | 是否打开 SQL 日志功能,0:关闭;1:打开 |
| MAL_INI | 是否启用 MAL 系统,0:不启用;1:启用 |
| ARCH_INI | 是否启用归档,0:不启用;1:启用 |
-- 方法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';
静态参数:修改后需要重启数据库实例
动态参数:修改后立即生效
手动参数:必须手动修改dm.ini文件后重启
修改参数前建议 备份当前配置
生产环境修改参数需在 维护窗口进行
DM数据库体系结构具有以下特点:
架构清晰:采用单进程多线程架构,资源利用率高
存储层次分明:从数据库到页的五层逻辑结构,管理精细
内存管理高效:多种缓冲区和内存池设计,减少IO操作
线程分工明确:各类线程各司其职,保证系统稳定运行
参数配置灵活:支持动态和静态参数,便于性能调优
通过深入理解DM数据库的体系结构,可以更好地进行数据库管理、性能优化和故障排查,。为后续的深入学习奠定基础。
达梦在线社区:https://eco.dameng.com
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050873/viewspace-3175757/ ,如需转载,请注明出处,否则将追究法律责任。