请选择 进入手机版 | 继续访问电脑版

DM8线程

[复制链接]
科达工艺 发表于 2020-12-31 18:59:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
DM8线程

DM数据库实例在运行时由各种内存数据结构和一系列的线程组成,差异范例的线程完成差异的任务。线程通过一定的同步机制对数据结构进行并发访问和处理处罚,以完成客户提交的各种任务。 DM 数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。
DM进程中主要包罗监听线程、 IO 线程、工作线程、调理线程、日志线程等,下面分别对它们进行先容。
- DM数据库线程的检察
通过操纵系统检察DM8背景线程,首先查询进程号,我们在系统中查到实例对应的进程号为21797。
  1. [root@dm8-study ~]# ps -ef |grep dmserverdmdba     21797      1  1 14:38 ?        00:00:10 /dm8/bin/dmserver /dm8/data/DAMENG/dm.ini -noconsole
复制代码

根据进程号查找各个线程,以表格显示。
  1. [root@dm8-study ~]# ps -T -p 21797    PID   SPID TTY          TIME    CMD  21797  21797 ?        00:00:05 dmserver  21797  21809 ?           00:00:00 dm_quit_thd  21797  21810 ?        00:00:00 dm_io_thd  21797    21811 ?        00:00:00 dm_io_thd  21797  21812 ?        00:00:00    dm_io_thd  21797  21813 ?        00:00:00 dm_io_thd  21797  21816 ?      00:00:00 dm_chkpnt_thd  21797  21817 ?        00:00:00 dm_redolog_thd    21797  21818 ?        00:00:00 dm_hio_thd  21797  21819 ?           00:00:00 dm_hio_thd  21797  21820 ?        00:00:00 dm_hio_thd  21797    21821 ?        00:00:00 dm_hio_thd  21797  21822 ?        00:00:00    dm_sqllog_thd  21797  21823 ?        00:00:03 dm_purge_thd  21797     21824 ?        00:00:00 dmserver  21797  21825 ?        00:00:00    dm_tskwrk_thd  21797  21826 ?        00:00:00 dm_tskwrk_thd  21797     21827 ?        00:00:00 dm_tskwrk_thd  21797  21828 ?        00:00:00    dm_tskwrk_thd  21797  21829 ?        00:00:00 dm_tskwrk_thd  21797     21830 ?        00:00:00 dm_tskwrk_thd  21797  21831 ?        00:00:00    dm_tskwrk_thd  21797  21832 ?        00:00:00 dm_tskwrk_thd  21797     21833 ?        00:00:00 dm_tskwrk_thd  21797  21834 ?        00:00:00    dm_tskwrk_thd  21797  21835 ?        00:00:00 dm_tskwrk_thd  21797     21836 ?        00:00:00 dm_tskwrk_thd  21797  21837 ?        00:00:00    dm_tskwrk_thd  21797  21838 ?        00:00:00 dm_tskwrk_thd  21797     21839 ?        00:00:00 dm_tskwrk_thd  21797  21840 ?        00:00:00    dm_tskwrk_thd  21797  21841 ?        00:00:00 dm_trctsk_thd  21797     21842 ?        00:00:00 dm_wrkgrp_thd  21797  21843 ?        00:00:00    dm_wrkgrp_thd  21797  21844 ?        00:00:00 dm_wrkgrp_thd  21797     21845 ?        00:00:00 dm_wrkgrp_thd  21797  21846 ?        00:00:00    dm_wrkgrp_thd  21797  21847 ?        00:00:00 dm_wrkgrp_thd  21797     21848 ?        00:00:00 dm_wrkgrp_thd  21797  21849 ?        00:00:00    dm_wrkgrp_thd  21797  21850 ?        00:00:00 dm_wrkgrp_thd  21797     21851 ?        00:00:00 dm_wrkgrp_thd  21797  21852 ?        00:00:00    dm_wrkgrp_thd  21797  21853 ?        00:00:00 dm_wrkgrp_thd  21797     21854 ?        00:00:00 dm_wrkgrp_thd  21797  21855 ?        00:00:00    dm_wrkgrp_thd  21797  21856 ?        00:00:00 dm_wrkgrp_thd  21797     21857 ?        00:00:00 dm_wrkgrp_thd  21797  21858 ?        00:00:00    dm_audit_thd  21797  21859 ?        00:00:00 dm_sched_thd  21797     21860 ?        00:00:00 dm_lsnr_thd
复制代码
统计线程数量,加上进程共52个,只算线程共50个。
  1. [root@dm8-study ~]# ps -T -p 21797|wc -l52
复制代码
以树型结构显示进程下的线程号。
  1. [root@dm8-study ~]# pstree -p 21797dmserver(21797)─┬─{dmserver}(21809)                ├─{dmserver}(21810)                ├─{dmserver}(21811)                ├─{dmserver}(21812)                ├─{dmserver}(21813)                ├─{dmserver}(21816)                ├─{dmserver}(21817)                ├─{dmserver}(21818)                ├─{dmserver}(21819)                ├─{dmserver}(21820)                ├─{dmserver}(21821)                ├─{dmserver}(21822)                ├─{dmserver}(21823)                ├─{dmserver}(21824)                ├─{dmserver}(21825)                ├─{dmserver}(21826)                ├─{dmserver}(21827)                ├─{dmserver}(21828)                ├─{dmserver}(21829)                ├─{dmserver}(21830)                ├─{dmserver}(21831)                ├─{dmserver}(21832)                ├─{dmserver}(21833)                ├─{dmserver}(21834)                ├─{dmserver}(21835)                ├─{dmserver}(21836)                ├─{dmserver}(21837)                ├─{dmserver}(21838)                ├─{dmserver}(21839)                ├─{dmserver}(21840)                ├─{dmserver}(21841)                ├─{dmserver}(21842)                ├─{dmserver}(21843)                ├─{dmserver}(21844)                ├─{dmserver}(21845)                ├─{dmserver}(21846)                ├─{dmserver}(21847)                ├─{dmserver}(21848)                ├─{dmserver}(21849)                ├─{dmserver}(21850)                ├─{dmserver}(21851)                ├─{dmserver}(21852)                ├─{dmserver}(21853)                ├─{dmserver}(21854)                ├─{dmserver}(21855)                ├─{dmserver}(21856)                ├─{dmserver}(21857)                ├─{dmserver}(21858)                ├─{dmserver}(21859)                └─{dmserver}(21860)
复制代码
查询线程共50个。
  1. [root@dm8-study ~]# pstree -p 21797|wc -l50
复制代码
通过disql,在v$threads视图中查找各线程状态信息。
  1. SQL> select name, thread_desc from v$threads;行号     NAME           THREAD_DESC                                   ---------- -------------- ----------------------------------------------1          dm_quit_thd    Thread for executing shutdown-normal operation2          dm_io_thd      IO thread3          dm_io_thd      IO thread4          dm_io_thd      IO thread5          dm_io_thd      IO thread6          dm_chkpnt_thd  Flush checkpoint thread7          dm_redolog_thd Redo log thread, used to flush log8          dm_hio_thd     IO thread for HFS to read data pages9          dm_hio_thd     IO thread for HFS to read data pages10         dm_hio_thd     IO thread for HFS to read data pages11         dm_hio_thd     IO thread for HFS to read data pages行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------12         dm_sqllog_thd           Thread for writing dmsql dmserver13         dm_purge_thd           Purge thread14         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------15         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself16         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself17         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------18         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself19         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself20         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------21         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself22         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------23         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself24         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself25         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------26         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself27         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself28         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------29         dm_tskwrk_thd           Task Worker Thread for SQL parsing and execution for sevrer itself30         dm_trctsk_thd           Thread for writing trace information31         dm_wrkgrp_thd           User working thread行号     NAME         ---------- -------------           THREAD_DESC                                                                  ------------------------------------------------------------------32         dm_wrkgrp_thd           User working thread33         dm_wrkgrp_thd           User working thread行号     NAME          THREAD_DESC        ---------- ------------- -------------------34         dm_wrkgrp_thd User working thread35         dm_wrkgrp_thd User working thread36         dm_wrkgrp_thd User working thread37         dm_wrkgrp_thd User working thread38         dm_wrkgrp_thd User working thread39         dm_wrkgrp_thd User working thread40         dm_wrkgrp_thd User working thread41         dm_wrkgrp_thd User working thread42         dm_wrkgrp_thd User working thread43         dm_wrkgrp_thd User working thread44         dm_wrkgrp_thd User working thread行号     NAME         ---------- -------------           THREAD_DESC                                                                     ---------------------------------------------------------------------45         dm_wrkgrp_thd           User working thread46         dm_audit_thd           Thread for flush audit logs47         dm_wrkgrp_thd           User working thread行号     NAME         ---------- -------------           THREAD_DESC                                                                     ---------------------------------------------------------------------48         dm_sched_thd           Server scheduling thread,used to trigger background checkpoint, time-related triggers49         dm_lsnr_thd           Service listener thread50         dm_sql_thd           User session thread50 rows got已用时间: 1.025(毫秒). 执行号:506.
复制代码

在disql中通过v$process视图查找实例的进程信息
  1. SQL> select * from v$process;行号     PID         PNAME    TRACE_NAME TYPE$      ---------- ----------- -------- ---------- -----------1          21797       dmserver            1已用时间: 1.097(毫秒). 执行号:507.
复制代码

线程功能先容


  • 监听线程
监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被叫醒并生成一个会话申请任务,加入工作线程的任务队列,期待工作线程进行处理处罚。
它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了包管在处理处罚大量客户连接时系统具有较短的响应时间,监听线程比寻常线程优先级更高。
2.工作线程
工作线程是 DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的范例进行相应的处理处罚,负责所有实际的数据相关操纵。
DM8的初始工作线程个数由设置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理处罚请求。为了包管用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。当会话连接凌驾预设的阀值时,工作线程数目不再增加,转而由会话轮询线程吸收所有用户请求,加入任务队列,期待工作线程一旦空闲,从任务队列依次摘取请求任务处理处罚。
3.IO 线程
在数据库运动中, IO 操纵向来都是最为耗时的操纵之一。当事务需要的数据页不在缓冲区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而把 IO 操纵从工作线程中分离出来则是明智的做法。 IO 线程的职责就是处理处罚这些 IO 操纵。
通常情况下, DM Server 需要进行 IO 操纵的时机主要有以下三种:
(1)需要处理处罚的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
(2)缓冲区满或系统关闭时,此时需要将部门脏数据页写入磁盘;
(3)查抄点到来时,需要将所有脏数据页写入磁盘。
IO 线程在启动后,通常都处于睡眠状态,当系统需要进行 IO 时,只需要发出一个 IO请求,此时 IO 线程被叫醒以处理处罚该请求,在完成该 IO 操纵后继续进入睡眠状态。
IO 线程的个数是可设置的,可以通过设置 dm.ini 文件中的 IO_THR_GROUPS 参数来设置,默认情况下, IO 线程的个数是 2 个。同时, IO 线程处理处罚 IO 的战略根据操纵系统平台的差异会有很大差异,一般情况下, IO 线程使用异步的 IO 将数据页写入磁盘,此时,系统将所有的 IO 请求直接递交给操纵系统,操纵系统在完成这些请求后才通知 IO 线程,这种异步 IO 的方式使得 IO 线程需要直接处理处罚的任务很简单,即完成 IO 后的一些收尾处理处罚并发出 IO 完成通知,如果操纵系统不支持异步 IO,此时 IO 线程就需要完成实际的 IO 操纵。
4.调理线程
调理线程用于接管系统中所有需要定时调理的任务。调理线程每秒钟轮询一次,负责的任务有以下一些:
(1)查抄系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列
由工作线程执行;
(2)清理 SQL 缓存、筹划缓存中失效的项,大概超出缓存限制后淘汰不常用的缓存项;
(3)查抄数据重演捕捉持续时间是否到期,到期则自动停止捕捉;
(4)执行动态缓冲区查抄。根据需要动态扩展或动态收缩系统缓冲池;
(5)自动执行查抄点。为了包管日志的及时刷盘,减少系统故障时规复时间,根据 INI参数设置的自动查抄点执行隔断定期执行查抄点操纵;
(6)会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接;
(7)须要时执行数据更新页刷盘;
(8)叫醒期待的工作线程。
5.日志 FLUSH 线程
任何数据库的修改,都会产生重做 REDO 日志,为了包管数据故障规复的一致性, REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的 REDO 日志保留在日志缓冲区中,当事务提交大概执行查抄点时,会通知 FLUSH 线程进行日志刷盘。由于日志具备顺序写入的特点,比数据页分散 IO 写入效率更高。日志 FLUSH 线程和 IO 线程分开,能得到更快的响应速度,包管整体的性能。 DM8 的日志 FLUSH 线程进行了优化,在刷盘之前,对差异缓冲区内的日志进行归并,减少了 IO 次数,进一步提高了性能。
如果系统设置了实时归档, 在 FLUSH 线程日志刷盘前,会直接将日志通过网络发送到实时备库。如果设置了本地归档,则生成归档任务,通过日志归档线程完成。
6.日志归档线程
日志归档线程包罗异步归档线程,负责远程异步归档任务。如果设置了非实时归档,由日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取出任务,按照归档范例做相应归档处理处罚。将日志 FLUSH 线程和日志归档线程分开的目的是为了减少不须要的效率损失,除了远程实时归档外,本地归档、 远程异步归档都可以脱离 FLUSH 线程来做,如果放在 FLUSH 线程中一起做会严重影响系统性能。
7.日志 APPLY 线程
在设置了数据守护的系统中,创建了一个日志 APPLY 线程。当服务器作为备库时,每次吸收到主库的物理 REDO 日志生成一个 APPLY 任务加入到任务队列, APPLY 线程从任务队列中取出一个任务在备库上将日志重做,并生成自己的日志,保持和主库数据的同步或一致,作为主库的一个镜像。 备库数据对用户只读,可负担报表、查询等任务,平衡主库的负载。
8.定时器线程
在数据库的各种运动中,用户经常需要数据库完成在某个时间点开始进行某种操纵,如备份;大概是在某个时间段内反复进行某种操纵等。定时器线程就是为这种需求而设计的。通常情况下, DM Server 需要进行定时操纵的事件主要有以下几种:
(1)逻辑日志异步归档;
(2)异步归档日志发送(只有在 PRIMARY 模式下,且是 OPEN 状态下);
(3)作业调理。
定时器线程启动之后,每秒检测一次定时器链表,检察当前的定时器是否满足触发条件,如果满足,则把执行权交给设置好的任务,如逻辑日志异步归档等。
默认情况下,达梦服务器启动的时候,定时器线程是不启动的。用户可以设置 dm.ini中的 TIMER_INI 参数为 1 来设置定时器线程在系统启动时启动。
9.逻辑日志归档线程
逻辑日志归档用于 DM8 的数据复制中,目的是为了加速异地访问的响应速度,包罗本地逻辑日志归档线程和远程逻辑日志归档线程。当设置了数据复制,系统才会创建这两个线程。 (1)本地逻辑日志归档线程
本地归档线程从本地归档任务列表中取出一个归档任务,生成到逻辑日志,并将逻辑日志写入到逻辑日志文件中。如果当前逻辑日志的远程归档范例是同步异地归档并且当前的刷盘机制是强制刷盘,那么就生成一个异地归档任务加入到暂时列表中。
(2)远程逻辑日志归档线程
远程归档线程从远程归档任务列表中取出一个归档任务,并根据任务的范例进行相应的处理处罚。任务的范例包罗同步发送和异步发送。
10.MAL系统相关线程
MAL系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现。服务器的许多重要功能都是通过 MAL 系统实现通信的,比方数据守护、数据复制、 MPP、远程日志归档等。 MAL 系统内部包罗一系列线程,有 MAL 监听线程、 MAL 发送工作线程、 MAL 吸收工作线程等。
11.其他线程
事实上, DM 数据库系统中还不止以上这些线程,在一些特定的功能中会有差异的线程,比方回滚段清理 PURGE 线程、审计写文件线程、重演捕捉写文件线程等。
12.线程信息的检察
为了增加用户对 DM 数据库内部信息的了解,以及方便数据库管理员对数据库的维护,DM 提供了许多动态性能视图,通过它们用户可以直观地了解当前系统中有哪些线程在工作,以及线程的相关信息。DM 线程相关的动态视图如下:V                              L                      A                      T                      C                      H                      E                      S                      :                      记                      录                      当                      前                      正                      在                      等                      待                      的                      线                      程                      信                      息                      ;                      V                          LATCHES:记录当前正在期待的线程信息;V               LATCHES:记录当前正在等待的线程信息;VTHREADS:记录当前系统中运动线程的信息;V                              W                      T                      H                      R                               D                         H                              I                      S                      T                      O                      R                      Y                      V                          WTHRD_HISTORY V               WTHRDH​ISTORYVPROCESS:记录自系统启动以来,所有运动过线程的相关汗青信息;V$PROCESS:记录服务器进程信息。

来源:https://blog.csdn.net/twotreeslanch/article/details/111991647
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )