达梦数据库(DM)线程管理笔记
一、DM 线程架构概述
架构类型 :DM 服务器采用“对称服务器构架”的单进程、多线程结构 。
优势 :有效利用系统资源,提供较高可伸缩性。
线程定义 :线程即操作系统线程,通过同步机制对数据结构并发访问处理,完成客户任务。
服务器进程 :共享服务器进程,允许多个用户连接。
二、DM 主要线程类型及功能
(一)监听线程
dm_lsnr_thd:Service listener thread
核心任务 :在服务器端口循环监听,接收客户端连接请求。
工作流程 :被唤醒后生成会话申请任务,加入工作线程任务队列。
启动与关闭 :系统启动后启动,关闭时首先被关闭。
优先级 :比普通线程优先级高,保证响应时间短。
端口说明 :配置端口范围 1024-65534,客户端工具及分布式数据库中各实例节点间通信端口由操作系统自动分配。
(二)工作线程
dm_wrkgrp_thd :User working thread
dm_tskwrk_thd:Task Worker Thread for SQL parsing and execution for sevrer itself
dm_lpq_thd: Local parallel working thread
功能定位 :核心线程,处理服务器各种任务及数据操作。
分类 :
任务工作线程 :处理内部生成任务,初始个数由 INI 参数 TASK_THREADS 指定,任务堆积时自动增加数量。
会话工作线程 :处理会话请求任务,分为非线程池模式(每会话对应一线程,减少切换代价)和线程池模式(由会话轮询线程接收请求,工作线程从任务队列处理,初始数量由 WORKER_THREADS * STHD_THREAD_NUM 指定)。
(三)IO 线程
dm_hio_thd: IO thread for HFS to read data pages
dm_io_thd: IO thread
职责 :处理数据库活动中的 IO 操作,避免工作线程直接读写数据页导致性能下降。
IO 触发时机 :
数据页不在缓冲区,需读入缓冲区。
缓冲区满或系统关闭,脏数据页写入磁盘。
检查点到来,所有脏数据页写入磁盘。
工作状态 :启动后通常睡眠,有 IO 请求时被唤醒处理,完成后继续睡眠。
配置 :个数可配置,通过 dm.ini 文件的 IO_THR_GROUPS 参数设置,默认 2 个。
IO 策略 :根据操作系统平台不同有差异,一般使用异步 IO 写入磁盘,操作系统完成请求后通知 IO 线程,简化 IO 线程任务。
(四)调度线程
dm_sched_thd: Server scheduling thread,used to trigger background checkpoint, time-related triggers
功能 :接管系统中所有定时调度任务,每秒轮询一次。
负责任务 :
检查并触发系统级时间触发器生成任务。
清理 SQL 缓存、计划缓存中失效项或淘汰不常用项。
执行动态缓冲区检查,根据需要动态调整系统缓冲池。
自动执行检查点,保证日志及时刷盘,减少故障恢复时间。
会话超时检测,超时自动断开连接。
必要时执行数据更新页刷盘。
唤醒等待的工作线程。
(五)日志 FLUSH 线程
dm_redolog_thd: Redo log thread, used to flush log
作用 :处理数据库修改产生的 REDO 日志刷盘,保证数据故障恢复一致性。
工作流程 :事务运行时 REDO 日志保留在日志缓冲区,事务提交或检查点执行时通知 FLUSH 线程刷盘。
性能优化 :日志顺序写入效率高,DM8 进一步优化,刷盘前合并不同缓冲区日志,减少 IO 次数。
归档相关 :实时归档时,日志通过网络发送到实时备库;本地归档时,生成归档任务由日志归档线程完成。
(六)日志归档线程
dm_rsyswrk_thd: Asynchronous archiving thread
<