DM-基础架构
达梦数据库(DM Database)是中国自主研发的高性能关系型数据库管理系统,由武汉达梦数据库股份有限公司研发并推广。作为国产数据库的领军企业,达梦数据库坚持完全自主创新的技术路线,拥有全部核心源代码的自主知识产权,代码自主原创率达99.9%,在金融、党政、能源、电信等关键行业核心系统中广泛应用,打破了国外数据库产品在中国市场的垄断地位。
技术优势
- 高可靠性:采用多版本并发控制机制,完善的故障恢复机制确保数据安全
- 高性能:支持海量数据高速读写,处理能力达100TB以上,通过了100TB数据库容量测试
- 高安全性:达到国产数据库最高安全级别(EAL4级认证、国家安全四级认证),支持数据加密、访问控制、审计等功能
- 高兼容性:兼容SQL92/SQL99及部分SQL2003标准,支持PL/SQL,兼容Oracle、MySQL等主流数据库,降低迁移门槛
- 分布式架构:支持自动分片、数据分布式存储和计算,适应云服务需求
全栈数据产品生态
- 关系型数据库:达梦数据管理系统(DM8等版本),支持超大规模并发事务处理
- 集群解决方案:
- 达梦数据共享集群(DMDSC):8节点共享存储集群,国内首创,全球第二家实现该技术的企业
- 读写分离集群、分布式事务处理集群、大规模并行集群
- 非关系型数据库:
- 图数据库(蜀天梦GDM)
- 缓存数据库
- 时序数据库
- 文档数据库
- 云数据库:启云数据库(DMCDB),支持弹性扩缩容
- 大数据平台:整合数据采集交换、存储计算、治理分析全流程
架构原理
达梦数据库(DM Database)作为国产数据库的领军产品,其架构设计融合了传统关系型数据库的优势与自主创新技术,形成了独特的体系结构。本文将全面剖析达梦数据库的架构原理,从逻辑存储、物理存储、内存管理和线程模型四个核心维度进行深入解读,并对比分析其与主流数据库的技术差异。
逻辑存储结构
达梦数据库采用经典的分层逻辑存储结构,形成"数据库→表空间→段→簇→页→记录"的多级管理体系,这种设计既保证了数据管理的灵活性,又优化了存储效率。
表空间(Tablespace)
表空间是达梦数据库最高级别的逻辑存储单元,一个数据库由多个表空间组成。达梦数据库包含以下几类关键表空间:
- SYSTEM表空间:存储数据字典、系统表等元数据,由数据库自动维护,用户不可修改
- MAIN表空间:默认用户表空间,存储普通用户数据,支持动态扩展数据文件
- TEMP表空间:存放排序、哈希等操作的中间结果,由系统自动管理
- ROLL表空间:记录事务修改前的数据镜像,保障事务回滚和读一致性
- HMAIN表空间:专用于HUGE表(列存储)的默认存储空间
达梦创新性地支持混合表空间,允许普通表与HUGE表共存于同一表空间,通过为普通表空间增加HUGE数据文件路径即可升级为混合表空间。
段(Segment)
段是表空间内分配的对象存储空间,主要分为:
- 数据段:存储表数据,采用B树或堆表组织形式
- 索引段:存储索引数据,支持B树、位图等多种索引类型
- 回滚段:记录事务回滚信息,存储在ROLL表空间
- 临时段:SQL执行过程中产生的临时工作区
达梦支持延迟段分配技术,通过参数DEFERRED_SEGMENT_CREATION控制,创建表时不立即分配存储空间,直到首次插入数据时才分配,有效减少空表的空间占用。
簇(Extent)与页(Page)
- 簇:由同一数据文件中16/32/64个连续页组成(默认16页),大小在创建数据库时确定且不可修改。例如页大小为8KB时,每个簇为128KB
- 页:最小I/O单元,默认8KB(可配置为4KB/16KB/32KB),包含页头、数据区、空闲空间和行偏移数组四部分
达梦通过FILLFACTOR参数控制页的填充率(默认100%),在空间利用与更新性能间取得平衡——低填充率可减少页分裂但增加空间占用。
物理存储结构
达梦数据库的物理存储由多类精心设计的文件协同工作,确保数据安全与高性能访问。
核心文件类型
| 文件类型 | 扩展名 | 功能特点 | 关键参数 |
|---|---|---|---|
| 控制文件 | .CTL | 记录数据库全局状态(表空间映射、检查点等),采用双备份策略防止损坏 | CTL_BAK_PATH, CTL_BAK_NUM |
| 数据文件 | .DBF | 表空间的物理载体,支持动态扩展(初始100MB,增量50MB) | INITIAL, NEXT |
| 联机日志 | .LOG | 记录事务REDO日志,至少需2组循环写入,建议SSD存储 | RLOG_BUF_SIZE |
| 归档日志 | .ARC | 联机日志的离线副本,支持按时间/大小自动归档 | ARCH_DEST |
| 配置文件 | .INI | 包括dm.ini(核心参数)、dmarch.ini(归档配置)等 | BUFFER, KEEP |
存储创新设计
- 智能文件扩展:当表空间需要新簇时,按"查找空闲簇→格式化空闲空间→扩展数据文件"的流程自动处理
- 双日志机制:联机日志保证事务持久性,归档日志实现时间点恢复(PITR)
- 分离存储策略:建议数据文件与日志文件分开存储,避免I/O争用
内存结构
达梦数据库采用精细化的内存管理策略,通过多级缓冲和智能淘汰算法最大化内存利用率。
共享内存池
| 区域类型 | 功能 | 关键参数 | 优化建议 |
|---|---|---|---|
| 数据缓冲区 | 缓存数据页,分NORMAL/KEEP/RECYCLE/FAST四个子池 | BUFFER=2048(MB) | OLTP系统目标命中率>90% |
| 日志缓冲区 | 暂存REDO日志,事务提交时刷盘 | RLOG_BUF_SIZE=64 | SSD存储可显著提升性能 |
| SQL缓冲区 | 缓存执行计划,减少硬解析 | CACHE_POOL_SIZE=100 | 目标硬解析率<5% |
会话私有内存
- 排序区:单会话默认2MB,可扩展至256MB(citation:1]
- 哈希区:用于连接操作,默认500KB
- SSD缓冲区:二级缓存,减少机械磁盘访问(citation:1]
达梦独创动态内存调整技术,支持在线调整缓冲池大小,配合基于访问频率的LRU-K算法实现智能缓存淘汰。
线程架构
达梦采用单进程多线程模型,通过专业化线程分工实现高效并发处理。
核心线程组及其协作流程:
graph TB
A[监听线程 dm_lsnr_thd] -->|创建会话| B[会话线程 dm_sql_thd]
B -->|SQL请求| C[工作线程 dm_tskwrk_thd]
C -->|数据访问| D[IO线程 dm_io_thd]
D -->|缓存未命中| E[磁盘I/O]
C -->|事务提交| F[日志线程 dm_redolog_thd]
F --> G[联机日志]
G -->|归档触发| H[归档线程 dm_rsyswrk_thd]
I[调度线程 dm_sched_thd] --> J[自动维护任务]关键线程功能:
- 监听线程:绑定5236端口,接收客户端连接并创建专属会话线程
- 工作线程:默认16个(可配置),处理SQL全流程:解析→权限校验→生成执行计划→数据读写
- IO线程:处理物理读写,通过V$FILESTAT监控I/O延迟
- 日志线程组:
- 日志刷新线程:同步/异步刷REDO日志(RLOG_SYNC_FLUSH=0)
- 归档线程:实时归档(ARCH_SEND_THRESHOLD=65536)
- 调度线程:每秒执行自动维护任务,包括:
- 缓存清理(MAX_CACHE_SIZE=1000)
- 缓冲池动态扩展(BUFFER_EXTEND_SIZE=256)
- 检查点触发(CHECKPOINT_INTERVAL=1800秒)
与主流数据库的架构对比
达梦数据库在兼容Oracle架构的同时,也融入了多项自主创新技术:
| 架构特性 | Oracle | MySQL(InnoDB) | 达梦DM |
|---|---|---|---|
| 存储引擎 | 表空间+回滚段 | 插件式引擎 | 双存储引擎(行存+列存) |
| 内存管理 | SGA+PGA | Buffer Pool | 多级缓冲池+动态调整 |
| 并发控制 | 多进程架构 | 多线程架构 | 混合架构(进程+线程) |
| 高可用方案 | Data Guard | 主从复制 | DMRAC集群+DSC共享存储 |
| 安全模型 | 自定义三权 | 单一管理员 | 三权分立(SYSDBA/SYSSSO/SYSAUDITOR) |
达梦特有的DSC共享存储集群技术实现了多活架构,关键技术包括:
- 基于RDMA的缓存融合
- 全局锁表(GLT)机制
- 仲裁服务防脑裂
