达梦数据库体系结构深度解析:逻辑、存储、内存与线程


引言

DM8 数据库是由数据库和实例构成 数据库:DM 数据库指的是磁盘上存放在 DM 数据库中的数据的集合 实例:实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成

                                                达梦总体架构图:


一、逻辑结构:分层的存储逻辑

达梦数据库的逻辑结构以 数据库-表空间-段-簇-页 为核心,形成多层数据管理框架。

  1. 数据库(Database)
    数据库是物理文件的集合,包含数据文件、日志文件等。每个数据库由 实例(Instance) 驱动,实例由共享内存和后台线程组成,负责数据处理与资源调度。

  2. 表空间(Tablespace)

    • 系统表空间(SYSTEM):存储数据字典、系统表等元数据,不可由用户修改。
    • 用户表空间(MAIN):默认存储用户数据,可创建多个数据文件(.DBF),支持动态扩展。
    • 临时表空间(TEMP):存放排序、哈希等操作的中间数据,由系统自动管理。
    • 回滚表空间(ROLL):记录事务的旧版本数据,保障读一致性。
    • HMAIN表空间:专用于HUGE表(列存储)的默认存储。
  3. 段(Segment)

    • 数据段:表或索引的实际存储单元,跨多个数据文件。
    • 临时段:自动分配于TEMP表空间,如排序操作的中间结果。
    • 回滚段:记录未提交事务的旧数据,支持事务回滚与一致性读。
  4. 簇(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)实时监控。

  1. 共享内存池
    • 数据缓冲区

      类型作用参数配置
      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%)。

  2. 会话私有内存
    • 排序区:单会话默认SORT_BUF_SIZE=2MB,大排序可扩展至MAX_SORT_SIZE=256MB
    • 哈希区:用于连接操作(参数HJ_BUF_SIZE=500),支持动态调整。
    • SSD缓冲区:针对SSD优化的二级缓存(参数SSD_BUF_SIZE=4096),减少机械磁盘访问。

四、线程架构:并发的精密调度

达梦采用 单进程多线程模型,核心线程通过V$THREADS监控:

  1. 监听线程(dm_lsnr_thd)
    • 绑定端口(默认5236),接收客户端连接请求。
    • 创建会话线程(dm_sql_thd),每个会话独占一个线程,会话ID通过V$SESSIONS查询。
  2. 工作线程(dm_tskwrk_thd)
    • 默认16个线程(参数WORKER_THREADS可调),处理SQL执行流程:

      解析SQL → 权限校验 → 生成执行计划 → 数据读写(逻辑读/物理读) → 返回结果

    • 硬解析优化:通过绑定变量(CURSOR_SHARING=FORCE)提升SQL复用率5
  3. IO线程(dm_io_thd)
    • 物理读:数据页未命中缓冲时,从磁盘读取至缓冲区(V$FILESTAT监控I/O延迟)。
    • 写脏页:缓冲区满或检查点触发时,异步刷盘(CKPT_FLUSH_COUNT=1000控制每次刷盘页数)。
  4. 日志线程组
    • 日志刷新(dm_redolog_thd):事务提交时刷REDO日志,支持同步/异步模式(RLOG_SYNC_FLUSH=0)。
    • 归档(dm_rsyswrk_thd):实时归档(参数ARCH_SEND_THRESHOLD=65536控制触发大小)。
  5. 调度线程(dm_sched_thd)
    • 自动维护任务:每秒执行一次,包括:
      • 清理失效缓存(MAX_CACHE_SIZE=1000限制SQL缓存条目)。
      • 动态扩展缓冲池(如数据缓冲区不足时按BUFFER_EXTEND_SIZE=256增量扩展)。
      • 触发检查点(CHECKPOINT_INTERVAL=1800秒)。

想更多了解达梦数据库,请关注达梦云适配中心。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿江在达梦

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值