DM 服务器使用“对称服务器构架”的单进程、多线程结构。
这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能。
DM 数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。
DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等。
(Oracle:专用模式为多进程结构,共享模式为单进程多线程结构;Mysql:单进程多线程结构)
监听线程
监听线程主要的任务是在服务器端口上进行循环监听,负责客户的连接请求,保证在处理大量客户连接时系统具有较短的响应时间。
工作线程
工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行
相应的处理,负责所有实际的数据相关操作。
IO 线程
主要用来处理数据库IO读写操作,IO线程在启动后,通常都处于睡眠状态
一般在以下几种情况下触发:
1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
3. 检查点到来时,需要将所有脏数据页写入磁盘。
调度线程
调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒钟轮询一次。
负责的任务有以下一些:
1. 检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列
由工作线程执行;
2. 清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
3. 检查数据重演捕获持续时间是否到期,到期则自动停止捕获;
4. 执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
5. 自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据 INI
参数设置的自动检查点执行间隔定期执行检查点操作;
6. 会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自
动断开连接;
7. 必要时执行数据更新页刷盘;
8. 唤醒等待的工作线程。
日志 FLUSH 线程
事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知 FLUSH 线程进行日志刷盘。
日志归档线程
日志归档线程包含异步归档线程,负责远程异步归档任务。
日志 APPLY 线程
主备环境中,在备库中应用从主库接收到REDO日志文件。
定时器线程
负责一些定时需要完成的任务,定时操作的事件如下:
1. 逻辑日志异步归档;
2. 异步归档日志发送(只有在 PRIMARY 模式下,且是 OPEN 状态下);
3. 作业调度。
默认情况下,达梦服务器启动的时候,定时器线程是不启动的。用户可以设置 dm.ini
中的 TIMER_INI 参数为 1 来设置定时器线程在系统启动时启动。
逻辑日志归档线程
当配置了数据复制,系统才会创建本地逻辑日志归档线程和远程逻辑日志归档线程,目的是为了加快异地访问的响应速度
MAL 系统相关线程
MAL 系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现。
MAL 系统内部包含一系列线程,有 MAL 监听线程、MAL 发送工作线程、MAL 接收工作线程等。
服务器的很多重要功能都是通过 MAL 系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。
其他线程
例如回滚段清理 PURGE 线程、审计写文件线程、重演捕获写文件线程等,这里不一一列出。
DM 线程相关的动态视图
V$LATCHES 记录当前正在等待的线程信息
V$THREADS 记录当前系统中活动线程的信息
V$WTHRD_HISTORY 记录自系统启动以来,所有活动过线程的相关历史信息。
V$PROCESS 记录服务器进程信息




