引言
DM8 数据库是由数据库和实例构成 数据库:DM 数据库指的是磁盘上存放在 DM 数据库中的数据的集合 实例:实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成
达梦总体架构图:
一、逻辑结构:分层的存储逻辑
达梦数据库的逻辑结构以 数据库-表空间-段-簇-页 为核心,形成多层数据管理框架。
-
数据库(Database)
数据库是物理文件的集合,包含数据文件、日志文件等。每个数据库由 实例(Instance) 驱动,实例由共享内存和后台线程组成,负责数据处理与资源调度。 -
表空间(Tablespace)
- 系统表空间(SYSTEM):存储数据字典、系统表等元数据,不可由用户修改。
- 用户表空间(MAIN):默认存储用户数据,可创建多个数据文件(.DBF),支持动态扩展。
- 临时表空间(TEMP):存放排序、哈希等操作的中间数据,由系统自动管理。
- 回滚表空间(ROLL):记录事务的旧版本数据,保障读一致性。
- HMAIN表空间:专用于HUGE表(列存储)的默认存储。
-
段(Segment)
- 数据段:表或索引的实际存储单元,跨多个数据文件。
- 临时段:自动分配于TEMP表空间,如排序操作的中间结果。
- 回滚段:记录未提交事务的旧数据,支持事务回滚与一致性读。
-
簇(Extent)与页(Page)
- 簇:由连续的页组成,默认16页(可配置为32或64页),单个簇大小由页大小(默认8KB)决定。
- 页:最小I/O单元,结构包含页头(控制信息)、数据区、空闲空间和行偏移数组,支持行级存储。
二、物理存储结构:文件系统的精密协作
达梦的物理存储由 六类核心文件 构成:
文件类型 | 作用与特性 |
---|---|
控制文件(.CTL) | 记录数据库全局状态(检查点、表空间映射),启动时校验文件完整性。 |
数据文件(.DBF) | 表空间的物理载体,支持动态扩展(如初始100MB,增量50MB)。 |
联机日志(.LOG) | 存储事务REDO日志,至少需2组文件(循环写入),单文件建议1-2GB。 |
配置文件(.INI) | 包括: - dm.ini :核心参数(如BUFFER=2048 定义数据缓冲区大小)。- dmarch.ini :归档策略配置。 |
归档日志(.ARC) | 联机日志的离线副本,支持按时间或大小自动归档,用于PITR恢复。 |
跟踪日志(.TRC) | 记录系统运行状态与错误信息,用于故障诊断。 |
关键优化点:
- 分离数据文件与日志文件存储,避免I/O争用。
- 联机日志文件配置为SSD存储,提升事务提交速度。
三、内存结构:性能的核心引擎
达梦的内存分为 共享内存池 与 会话私有内存,通过动态视图(如V$MEM_POOL
)实时监控。
- 共享内存池
-
数据缓冲区:
类型 作用 参数配置 NORMAL 常规数据页缓存 BUFFER=2048
(MB)KEEP 长期保留热点数据(如字典表) KEEP=512
RECYCLE 临时表空间缓存 RECYCLE=1024
FAST 高优先级访问页(如索引页) FAST_POOL_PAGES=64
淘汰策略:LRU算法,通过 V$BUFFER
监控命中率,建议OLTP系统逻辑读占比>90%4。 -
日志缓冲区:暂存事务REDO日志(参数
RLOG_BUF_SIZE=64
),事务提交时由日志线程刷盘。 -
SQL缓冲区:缓存执行计划(参数
CACHE_POOL_SIZE=100
),减少硬解析(目标硬解析率<5%)。
-
- 会话私有内存
- 排序区:单会话默认
SORT_BUF_SIZE=2MB
,大排序可扩展至MAX_SORT_SIZE=256MB
。 - 哈希区:用于连接操作(参数
HJ_BUF_SIZE=500
),支持动态调整。 - SSD缓冲区:针对SSD优化的二级缓存(参数
SSD_BUF_SIZE=4096
),减少机械磁盘访问。
- 排序区:单会话默认
四、线程架构:并发的精密调度
达梦采用 单进程多线程模型,核心线程通过V$THREADS
监控:
- 监听线程(dm_lsnr_thd)
- 绑定端口(默认5236),接收客户端连接请求。
- 创建会话线程(
dm_sql_thd
),每个会话独占一个线程,会话ID通过V$SESSIONS
查询。
- 工作线程(dm_tskwrk_thd)
- 默认16个线程(参数
WORKER_THREADS
可调),处理SQL执行流程:解析SQL → 权限校验 → 生成执行计划 → 数据读写(逻辑读/物理读) → 返回结果
- 硬解析优化:通过绑定变量(
CURSOR_SHARING=FORCE
)提升SQL复用率5。
- 默认16个线程(参数
- IO线程(dm_io_thd)
- 物理读:数据页未命中缓冲时,从磁盘读取至缓冲区(
V$FILESTAT
监控I/O延迟)。 - 写脏页:缓冲区满或检查点触发时,异步刷盘(
CKPT_FLUSH_COUNT=1000
控制每次刷盘页数)。
- 物理读:数据页未命中缓冲时,从磁盘读取至缓冲区(
- 日志线程组
- 日志刷新(dm_redolog_thd):事务提交时刷REDO日志,支持同步/异步模式(
RLOG_SYNC_FLUSH=0
)。 - 归档(dm_rsyswrk_thd):实时归档(参数
ARCH_SEND_THRESHOLD=65536
控制触发大小)。
- 日志刷新(dm_redolog_thd):事务提交时刷REDO日志,支持同步/异步模式(
- 调度线程(dm_sched_thd)
- 自动维护任务:每秒执行一次,包括:
- 清理失效缓存(
MAX_CACHE_SIZE=1000
限制SQL缓存条目)。 - 动态扩展缓冲池(如数据缓冲区不足时按
BUFFER_EXTEND_SIZE=256
增量扩展)。 - 触发检查点(
CHECKPOINT_INTERVAL=1800
秒)。
- 清理失效缓存(
- 自动维护任务:每秒执行一次,包括:
想更多了解达梦数据库,请关注达梦云适配中心。
达梦社区地址:https://eco.dameng.com