注册
达梦数据库学习17:达梦数据库线程简介
技术分享/ 文章详情 /

达梦数据库学习17:达梦数据库线程简介

Hi70KG 2023/08/22 2135 2 0

线程概述

DM进程中主要包括监听线程、IO线程、工作线程、调度线程、日志线程等

select distinct NAME,THREAD_DESC from v$threads; 行号 NAME THREAD_DESC ---------- -------------- ------------------------------------------------------------------------------------- 1 dm_wrkgrp_thd User working thread 2 dm_audit_thd Thread for flush audit logs 3 dm_sched_thd Server scheduling thread,used to trigger background checkpoint, time-related triggers 4 dm_lsnr_thd Service listener thread 5 dm_sql_thd User session thread 6 dm_sqllog_thd Thread for writing dmsql dmserver 7 dm_quit_thd Thread for executing shutdown-normal operation 8 dm_io_thd IO thread 9 dm_chkpnt_thd Flush checkpoint thread 10 dm_redolog_thd Redo log thread, used to flush log 11 dm_hio_thd IO thread for HFS to read data pages 12 dm_tskwrk_thd Task Worker Thread for SQL parsing and execution for sevrer itself 13 dm_sql_aux_thd User session auxiliary thread 14 dm_purge_thd Purge thread 15 dm_trctsk_thd Thread for writing trace information dm_wrkgrp_thd 用户工作线程 dm_audit_thd 刷写审核日志的线程 dm_sched_thd 服务器调度线程,用于触发后台检查点,与时间相关的触发器 dm_lsnr_thd 服务侦听器线程 dm_sql_thd 用户会话线程 dm_sqllog_thd 用于记录dmsql-dmserver运行日志的线程 dm_quit_thd 用于执行关机正常操作的线程 dm_io_thd IO线程,用于数据从磁盘读到内存和从内存写入磁盘 dm_chkpnt_thd 刷写检查点线程 dm_redolog_thd 重做日志线程,用于刷写日志落盘 dm_hio_thd HFS读取数据页的IO线程 dm_tskwrk_thd 用于服务器自身SQL解析和执行的任务工作线程 dm_sql_aux_thd 用户会话辅助线程 dm_purge_thd 清除线程,主要清除临时表空间等 dm_trctsk_thd 用于写入跟踪信息的线程

监听线程,dm_lsnr_thd

​ 主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。

工作线程(dm_tskwrk_thd和dm_wrkgrp_thd)

​ 工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。

​ DM8的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。为了保证用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。当会话连接超过预设的阀值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户请求,加入任务队列,等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。

IO线程(dm_io_thd、dm_hio_thd)

​ 当事务需要的数据页不在缓冲区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而把IO操作从工作线程中分离出来是明智的做法。IO线程的职责就是处理这些IO操作。通常情况下,DM Server需要进行IO操作的时机主要有以下三种。

(1)需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区。

(2)缓冲区满或系统关闭时,需要将部分脏数据页写入磁盘。

(3)检查点到来时,需要将所有脏数据页写入磁盘。

​ IO线程的个数是可配置的,可以通过设置dm.ini文件中的IO_THR_GROUPS参数来设置,默认情况下,IO线程的个数是两个。同时,IO线程处理IO的策略根据操作系统平台的不同会有很大差别,一般情况下,IO线程使用异步的IO将数据页写入磁盘,此时,系统将所有的IO请求直接递交给操作系统,操作系统在完成这些请求后才通知IO线程,这种异步IO的方式使得IO线程需要直接处理的任务很简单,即完成IO后的一些收尾处理并发出IO完成通知,如果操作系统不支持异步IO,此时IO线程需要完成实际的IO操作。

调度线程,dm_sched_thd

​ 调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒轮询一次,负责的任务有以下一些。

(1)检查系统级的时间触发器,如果满足触发条件,则生成任务加到工作线程的任务队列中并由工作线程执行。

(2)清理SQL缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项。

(3)检查数据重演捕获持续时间是否到期,到期则自动停止捕获。

(4)执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池。

(5)自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据INI参数设置的自动检查点执行间隔定期执行检查点操作。

(6)会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接。

(7)必要时执行数据更新页刷盘。

(8)唤醒等待的工作线程。

日志FLUSH线程,dm_redolog_thd

​ 任何数据库的修改,都会产生重做(REDO)日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知FLUSH线程进行日志刷盘。由于日志具备顺序写入的特点,比数据页分散IO写入效率更高,因此,日志FLUSH线程和IO线程分开,能获得更快的响应速度,保证整体的性能。DM的日志FLUSH线程进行了优化,在刷盘之前,对不同缓冲区内的日志进行合并,减少了IO次数,进一步提高了性能。如果系统配置了实时归档,在FLUSH线程日志刷盘前,会直接将日志通过网络发送到实时备机。如果配置了本地归档或者远程同步归档,则生成归档任务,通过日志归档线程完成。

日志归档线程,dm_rsyswrk_thd

​ 日志归档线程包含同步归档线程和异步归档线程,前者负责本地归档和远程同步归档任务,后者负责远程异步归档任务。如果配置了非实时归档,由日志FLUSH线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档类型做相应归档处理。将日志FLUSH线程和日志归档线程分开的目的是减少不必要的效率损失,除了远程实时归档外,本地归档、远程同步归档、远程异步归档都可以脱离FLUSH线程来做,如果放在FLUSH线程中一起做,则会严重影响系统性能。

1.本地逻辑日志归档线程

​ 本地归档线程从本地归档任务列表中取出一个归档任务,生成到逻辑日志,并将逻辑日志写入到逻辑日志文件中。如果当前逻辑日志的远程归档类型是同步异地归档并且当前的刷盘机制是强制刷盘,那么就生成一个异地归档任务加入到临时列表中。

2.远程逻辑日志归档线程

​ 远程归档线程从远程归档任务列表中取出一个归档任务,并根据任务的类型进行相应的处理。任务的类型包括同步发送和异步发送。

日志APPLY线程

​ 在配置了数据守护的系统中,创建了一个日志APPLY线程。当服务器作为备库时,每次接收到主库的物理REDO日志生成一个APPLY任务加入到任务队列,APPLY线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。备库数据对用户只读,可承担报表、查询等任务,均衡主库的负载。

定时器线程

​ 在数据库的各种活动中,用户常常需要数据库完成在某个时间点开始进行某种操作,如备份;或者是在某个时间段内反复进行某种操作等。定时器线程就是为这种需求而设计的。

通常情况下,DM Server需要进行定时操作的事件主要有以下几种:

逻辑日志异步归档;

异步归档日志发送(只有在PRIMARY模式下,且是OPEN状态下);

作业调度。

​ 定时器线程启动之后,每秒检测一次定时器链表,查看当前的定时器是否满足触发条件,如果满足,则把执行权交给设置好的任务,如逻辑日志异步归档等。

​ 默认情况下,达梦服务器启动的时候,定时器线程是不启动的。用户可以设置dm.ini中的TIMER_INI参数为1来设置定时器线程在系统启动时启动。

MAL系统相关线程

​ MAL系统是DM内部高速通信系统,基于TCP/IP协议实现。服务器的很多重要功能都是通过MAL系统实现通信的,例如数据守护、数据复制、MPP、远程日志归档等。MAL系统内部包含一系列线程,有MAL监听线程、MAL发送工作线程、MAL接收工作线程等。

其他线程。

disql 客户端线程,在客户端 dm_sql_thd 用户会话服务线程,在服务端 dm_quit_thd 执行正常关闭数据库的线程 dm_purge_thd purge线程 主要负责回滚段清理 dm_trctsk_thd 日志信息记录线程,主要负责数据库告警跟踪信息写入告警日志文件中 dm_audit_thd 审计线程,主要负责审计日志记录与更新 dm_chkpnt_thd 检查点线程,主要负责CKPT_LSN的管理 dm_sqllog_thd 写 dmsql dmserver。

达梦社区技术https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服