DM-进程与线程
概述
DM数据库系统是单进程多线程服务架构。
线程类型
监听线程、工作线程、IO线程、调度线程、日志FLUSH线程、日志归档线程、日志APPLY线程、定时器线程、逻辑日志归档线程、MAL系统相关线程、回滚段清理PURGE线程、审计写文件线程、重演捕获写文件线程等
各类线程说明
监听线程
监听线程的主要是在服务器端指定端口(默认5236)上循环监听客户端的连接请求。每收到一个客户端请求就会创建一个会话申请任务,加入到工作线程的任务队列中,等待工作线程处理。
工作线程
工作线程是DM 的核心线程,它从队列任务中取出任务,并进行对应的处理。
IO线程
IO线程负责对数据页的读写操作。可以通过设置dm.ini文件中的IO_THR_GROUPS参数来设置IO线程的数量。一般情况下,IO线程使用异步的IO将数据页写入磁盘,但当操作系统不支持异步IO时,它就必须要真实完成IO操作。
调度线程
调度线程负责定时调度的任务。调度线程每秒钟轮询一次,负责的任务有:
- 检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列由工作线程执行;
- 清理SQL缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
- 检查数据重演捕获持续时间是否到期,到期则自动停止捕获;
- 执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
- 自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据INI参数设置的自动检查点执行间隔定期执行检查点操作;
- 会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接;
- 必要时执行数据更新页刷盘;
- 唤醒等待的工作线程。
日志FLUSH线程
任何数据库的修改,都会产生重做REDO日志。事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知FLUSH线程进行日志刷盘。由于日志具备顺序写入的特点,比数据页分散IO写入效率更高。
MAL系统线程
MAL系统是DM内部高速通信系统,基于TCP/IP协议实现。它包含MAL监听线程、MAL发送工作线程、MAL接收工作线程等
查看线程信息
通过动态视图了解线程在工作过程中相关信息。也可以通过操作系统命令工具查看线程信息。
动态视图
- V$LATCHES:记录当前正在等待的线程信息
- V$THREADS:记录当前系统中活动线程的信息
- V$WTHRD_HISTORY:记录自系统启动以来,所有活动过线程的相关历史信息
- V$PROCESS:记录服务器进程信息
操作系统工具查看线程信息
1. 定位数据库的进程号
ps -ef|grep dmserver |grep -v grep
2. 依据上一步的进程查看
top -p <dmserver 进程号> -H
ps –Lf $pid