DM数据库中的线程
DM使用单进程,多线程结构,线程分为多种类型,主要有监听线程、 IO 线程、工作线程、调度线程、日志线程等。
服务器在运行时由各种内存结构和多个线程组成,线程通过一定的同步机制对数据结构进行并发访问和处理。
线程的相关信息可以通过以下动态视图查看:
- V$LATCHES 记录当前正在等待的线程信息
- V$THREADS 记录当前系统中活动线程的信息
- V$WTHRD_HISTORY 记录自系统启动以来,所有活动过线程的相关历史信息。
- V$PROCESS 记录服务器进程信息
查看进程信息
SELECT *FROM V$PROCESS;
查看线程信息
不同种类的线程数量较多
SELECT *FROM V$THREADS;
去重并按照名称分组统计
SELECT DISTINCT NAME, COUNT(*) AS NUM FROM V$THREADS GROUP BY NAME ORDER BY NUM DESC;
查看线程备注信息
SELECT DISTINCT NAME, THREAD_DESC FROM V$THREADS;
查看等待的线程信息
SELECT *FROM V$LATCHES;
查看自系统启动以来,所有活动过线程的相关历史信息。
SELECT *FROM V$WTHRD_HISTORY;
监听线程
在服务器端口循环监听,当有连接请求时,监听线程被唤醒并生成会话申请任务,加入工作线程的任务队列等待处理。
此线程在系统启动完成后才启动,在系统关闭时首先关闭。监听线程比普通线程优先程度更高。
工作线程
DM服务器的核心线程。从任务队列中取出任务,并执行操作,负责所有实际的数据操作。有两个:dm_tskwrk_thd和 dm_wrkgrp_thd,当前为各16个。
此工作线程的初始个数由配置文件中的参数决定,会话增加时,工作线程也增加。一个会话上的所有任务由同一个工作线程完成,减少了线程切换代价。当
会话连接超过预设时,由会话轮询线程接收请求并加入工作线程的任务队列,等待工作线程依次执行。
在dm.ini配置文件中线程相关的参数有:
IO线程
DM将IO操作从工作线程分离出来,以此提高IO性能。
通常操作IO的时机有:
- 数据页不在缓冲区,需要读入。
- 缓冲区写满或系统关闭,此时将部分脏数据页写入磁盘。
- 生成检查点时,将所有脏数据页写入磁盘。
IO线程在启动后通常睡眠,当需要进行IO操作时唤醒线程。IO线程的个数可配置,通过dm.ini文件中IO_THR_GROUPS参数设置,一般默认两个,当操作系统支持异步IO时,IO线程要做的只是将IO请求递交给操作系统,操作系统完成后通知IO线程,当操作系统不支持异步IO时就需要IO线程完成实际的IO操作。
调度线程
操作系统中所有需要定时调度的任务,每秒轮询一次,主要负责以下内容:
- 检查系统级的时间触发器,满足触发条件则生成任务加入工作线程的任务队列中。
- 清理SQL缓存,计划缓存中的失效项,或超出缓存限制后淘汰不常用的缓存项。
- 检查数据重演捕获持续时间是否到期。
- 动态缓冲区检查,根据需要动态扩展或收缩系统缓冲池
- 执行检查点。
- 会话超时检测。
- 数据更新页刷盘。
- 唤醒等待的工作线程。
相关参数:
日志FLUSH线程
事务运行时,将生成的REDO日志暂存在日志缓冲区中,当事务提交或执行检查点时,通知FLUSH线程进行日志刷盘。日志顺序写入,相对于数据页分线的特点,写入效率更高,因此分开能获得更好的写入效率。
日志归档线程
包含异步归档线程,如配置非实时归档,由日志FLUSH线程产生的任务会分别加入日志归档线程,日志归档线程做具体操作。
日志APPLY线程
在数据守护系统中,存在日志APPLY线程。备库接收主库的物理REDO日志生成APPLY任务加入队列,APPLY线程从队列中取出并在备库上将日志重做,并生成自己的日志。
定时器线程
在指定的时间或周期内进行某种操作。
主要情景有:
- 逻辑日志异步归档。
- 异步归档日志发送
- 作业调度
定时器线程启动后,每秒检测一次定时器链表,查看是否满足触发条件,如满足,将执行权限转交给对应的线程处理。
此线程默认不启动,可在dm.ini中配置是否启动:TIMER_INI=1
逻辑日志归档线程
用在DM8的数据赋值中,可以加快异地访问的响应速度,包含本地逻辑日志归档线程和远程逻辑日志归档线程。
本地逻辑日志归档线程
从本地归档任务列表取出归档任务,生成到逻辑日志,并将逻辑日志写入逻辑日志文件。如当前逻辑日志的远程归档日志类型是同步异地归档且当前是强制刷盘,则生成异地归档任务加入到临时列表中。
远程逻辑日志归档线程
从远程归档任务列表中取出任务,并根据任务类型做响应处理,任务类型包括同步发送和异步发送。
MAL系统相关线程
用于DM内部通信的一组线程,基于TCP/IP实现。数据守护,数据复制,MPP,远程日志归档等功能依托MAL通信相关的线程实现。包括MAL监听线程,MAL发送工作线程,MAL接收工作线程等。
其他线程
还有如回滚段清理线程,审计写文件线程,重演捕获写文件线程等等。