体系结构概览
—— 数据库
DM 数据库指的是磁盘上存放在DM 数据库中的数据的集合
—— 实例
实例一般是由一组正在运行的DM 后台进程/线程以及一个大型的共享内存组成
DM存储结构
- DM物理结构
- DM物理结构
- 表空间和数据文件
一个表空间中包括一个或多个数据文件
一个数据文件仅归属于一个表空间
- 段、簇和块
段存在于表空间
段由区的集合构成
簇是数据块的集合
数据块会映射到磁盘块
DM内存结构
DM内存结构
公用内存池
• 不依赖于操作系统的内存管理
• 用于:
- 维护系统内部内存空间的分配与释放
- 减少对操作系统内存的系统调用
- 其大小由MEMORY_POOL参数确定
系统缓冲区
字典缓冲区
字典缓冲区:
• 快速访问表,视图等对象的描述
• 系统表到内存对象的映射
• 仅保留活动的数据库对象
• 采用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线程结构
监听线程
- 用于在服务器端口上进行循环监听,有来自客户的连接 请求,监听线程被唤醒并生成一个会话申请任务,加入工作 线程的任务队列,等待工作线程进行处理
IO线程
IO线程: 主要用于做以下几个方面的工作:
-
需要处理的数据块不在缓冲区中,此时需要将相关数据块读入缓冲区
-
缓冲区满或系统关闭时,此时需要将部分脏数据块写入磁盘
-
检查点到来时,需要将所有脏数据块写入磁盘
日志FLUSH线程 -
主要用于事务提交或检查点时将日志缓冲区中的REDO日志写入到日 志文件中
-
如果系统配置了实时归档,在 FLUSH线程日志刷盘前,会直接将日 志通过网络发送到实时备机
-
如果配置了本地归档或者远程同步归档,则生成归档任务,通过日 志归档线程完成
日志归档线程 -
包含同步归档线程和异步归档线程,前者负责本地归档和远程同步 归档任务,后者负责远程异步归档任务。如果配置了非实时归档,由日 志 FLUSH线程产生的任务会分别加入日志归档线程,日志归档线程负责 从任务队列中取出任务,按照归档类型做相应归档处理
工作线程 -
DM7内核的工作线程机制包括普通内核线程和用户态线程两种,普通 内核线程的切换完全由操作系统决定,但操作系统无法了解进程内部的运 行机制,只能采取通用的调度策略来管理各个内核线程;用户态线程在内 核线程内部自主调度,有效减少上下文切换;同时,由于内核线程数的 减少,进一步降低了冲突产生的概率,提升了系统性能,非常适合高并 发的应用场景
调度线程 -
检查系统级的时间触发器
-
清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的 缓存项
-
动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池
-
自动执行检查点
-
会话超时检测
-
必要时执行数据更新页刷盘
-
唤醒等待的工作线程
日志重做线程
- 主要用于系统故障恢复,日志重做线程根据REDO日志进行并行的故 障恢复