达梦数据库的体系结构

主要介绍关于dm7数据库的存储、内存、线程结构

  • 体系结构概览
  • DM存储结构
  • DM内存结构
  • DM线程

体系结构概览

—— 数据库

DM 数据库指的是磁盘上存放在DM 数据库中的数据的集合

—— 实例

实例一般是由一组正在运行的DM 后台进程/线程以及一个大型的共享内存组成
达梦数据库的体系结构_第1张图片

DM存储结构

  1. DM物理结构
    达梦数据库的体系结构_第2张图片
  2. DM物理结构
    达梦数据库的体系结构_第3张图片
  3. 表空间和数据文件
    一个表空间中包括一个或多个数据文件
    一个数据文件仅归属于一个表空间
    达梦数据库的体系结构_第4张图片
  4. 段、簇和块
    段存在于表空间
    段由区的集合构成
    簇是数据块的集合
    数据块会映射到磁盘块
    达梦数据库的体系结构_第5张图片

DM内存结构

DM内存结构
达梦数据库的体系结构_第6张图片
公用内存池
• 不依赖于操作系统的内存管理
• 用于:

  1. 维护系统内部内存空间的分配与释放
  2. 减少对操作系统内存的系统调用
  3. 其大小由MEMORY_POOL参数确定

系统缓冲区
达梦数据库的体系结构_第7张图片
字典缓冲区

字典缓冲区:
• 快速访问表,视图等对象的描述
• 系统表到内存对象的映射
• 仅保留活动的数据库对象
• 采用LRU算法淘汰
• 大小由DICT_BUF_SIZE参数决定

日志缓冲区

• 用于

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

• 大小由LOG_BUF_SIZE参数决定

  • 单位为页数量,默认为256页
  • 大小必须为2 的N 次方

排序/散列缓冲区

排序缓冲区:
• 用于

  • 数据排序的内存缓冲区
  • 大小由SORT_BUF_SIZE参数决定

散列缓冲区:
• 用于

  • 哈希连接的内存缓冲区
  • 大小由HJ_BUF_SIZE参数决定

SQL缓冲区

SQL缓冲区:
• 用于

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

• USE_PLN_POOL参数为1或2时启用
• 大小由CACHE_POOL_SIZE参数决定

DM线程

DM线程结构
达梦数据库的体系结构_第8张图片
监听线程

  • 用于在服务器端口上进行循环监听,有来自客户的连接 请求,监听线程被唤醒并生成一个会话申请任务,加入工作 线程的任务队列,等待工作线程进行处理
    达梦数据库的体系结构_第9张图片
    IO线程

IO线程: 主要用于做以下几个方面的工作:

  • 需要处理的数据块不在缓冲区中,此时需要将相关数据块读入缓冲区

  • 缓冲区满或系统关闭时,此时需要将部分脏数据块写入磁盘

  • 检查点到来时,需要将所有脏数据块写入磁盘
    达梦数据库的体系结构_第10张图片
    日志FLUSH线程

  • 主要用于事务提交或检查点时将日志缓冲区中的REDO日志写入到日 志文件中

  • 如果系统配置了实时归档,在 FLUSH线程日志刷盘前,会直接将日 志通过网络发送到实时备机

  • 如果配置了本地归档或者远程同步归档,则生成归档任务,通过日 志归档线程完成
    达梦数据库的体系结构_第11张图片
    日志归档线程

  • 包含同步归档线程和异步归档线程,前者负责本地归档和远程同步 归档任务,后者负责远程异步归档任务。如果配置了非实时归档,由日 志 FLUSH线程产生的任务会分别加入日志归档线程,日志归档线程负责 从任务队列中取出任务,按照归档类型做相应归档处理
    达梦数据库的体系结构_第12张图片
    工作线程

  • DM7内核的工作线程机制包括普通内核线程和用户态线程两种,普通 内核线程的切换完全由操作系统决定,但操作系统无法了解进程内部的运 行机制,只能采取通用的调度策略来管理各个内核线程;用户态线程在内 核线程内部自主调度,有效减少上下文切换;同时,由于内核线程数的 减少,进一步降低了冲突产生的概率,提升了系统性能,非常适合高并 发的应用场景
    达梦数据库的体系结构_第13张图片
    调度线程

  • 检查系统级的时间触发器

  • 清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的 缓存项

  • 动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池

  • 自动执行检查点

  • 会话超时检测

  • 必要时执行数据更新页刷盘

  • 唤醒等待的工作线程

日志重做线程

  • 主要用于系统故障恢复,日志重做线程根据REDO日志进行并行的故 障恢复
    达梦数据库的体系结构_第14张图片

你可能感兴趣的:(达梦数据库的体系结构)