达梦数据库(DM)线程管理

目录标题

  • 达梦数据库(DM)线程管理笔记
    • 一、DM 线程架构概述
    • 二、DM 主要线程类型及功能
      • (一)监听线程
      • (二)工作线程
      • (三)IO 线程
      • (四)调度线程
      • (五)日志 FLUSH 线程
      • (六)日志归档线程
      • (七)日志 APPLY 线程
      • (八)定时器线程
      • (九)MAL 系统相关线程
      • (十)其他线程
    • 三、线程信息查看
    • 附录:线程&进程
      • 使用`ps`命令查看线程
        • 1. **显示所有线程**
        • 2. **显示所有线程的详细信息**
        • 3. **查看所有进程的线程**
      • 使用`top`命令查看线程
      • 使用`htop`命令查看线程
      • 使用`pthread`库的线程
      • 总结


达梦数据库(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 触发时机
    1. 数据页不在缓冲区,需读入缓冲区。
    2. 缓冲区满或系统关闭,脏数据页写入磁盘。
    3. 检查点到来,所有脏数据页写入磁盘。
  • 工作状态:启动后通常睡眠,有 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
  • 功能:接管系统中所有定时调度任务,每秒轮询一次。
  • 负责任务
    1. 检查并触发系统级时间触发器生成任务。
    2. 清理 SQL 缓存、计划缓存中失效项或淘汰不常用项。
    3. 执行动态缓冲区检查,根据需要动态调整系统缓冲池。
    4. 自动执行检查点,保证日志及时刷盘,减少故障恢复时间。
    5. 会话超时检测,超时自动断开连接。
    6. 必要时执行数据更新页刷盘。
    7. 唤醒等待的工作线程。

(五)日志 FLUSH 线程

dm_redolog_thd:	Redo log thread, used to flush log
  • 作用:处理数据库修改产生的 REDO 日志刷盘,保证数据故障恢复一致性。
  • 工作流程:事务运行时 REDO 日志保留在日志缓冲区,事务提交或检查点执行时通知 FLUSH 线程刷盘。
  • 性能优化:日志顺序写入效率高,DM8 进一步优化,刷盘前合并不同缓冲区日志,减少 IO 次数。
  • 归档相关:实时归档时,日志通过网络发送到实时备库;本地归档时,生成归档任务由日志归档线程完成。

(六)日志归档线程

dm_rsyswrk_thd:	Asynchronous archiving thread
  • 功能:包含异步归档线程,负责远程异步归档任务。
  • 任务处理:非实时归档时,日志 FLUSH 线程产生的任务加入该线程任务队列,按归档类型处理。
  • 分离目的:与日志 FLUSH 线程分开,避免影响系统性能,除远程实时归档外,本地归档、远程异步归档可脱离 FLUSH 线程。

(七)日志 APPLY 线程

  • 应用场景:配置数据守护的系统中存在。
  • 工作方式:服务器作为备库时,接收主库物理 REDO 日志生成 APPLY 任务,APPLY 线程从队列取出任务在备库重做日志,保持与主库数据同步一致,备库数据对用户只读,可承担报表、查询任务,均衡主库负载。

(八)定时器线程

  • 设计目的:满足用户在特定时间点或时间段内进行操作的需求,如备份、作业调度等。
  • 工作原理:启动后每秒检测定时器链表,查看定时器是否满足触发条件,满足则执行相应任务。
  • 启动配置:默认不启动,可通过设置 dm.ini 文件的 TIMER_INI 参数为 1,在系统启动时启动。

(九)MAL 系统相关线程

dm_mal_lsnr_thd:	Mail listening thread
dm_mal_mgr_thd:	Thread for checking mail system or pre-commited transactions in MPP
dm_mal_recv_thd:	Thread for receiving Mail
  • 系统介绍:MAL 系统是 DM 内部高速通信系统,基于 TCP/IP 协议实现,很多重要功能通过该系统通信,如数据守护、MPP、远程日志归档等。
  • 线程组成:包含 MAL 监听线程、MAL 发送工作线程、MAL 接收工作线程等。

(十)其他线程

  • 说明:DM 数据库系统中还存在其他线程,如回滚段清理 PURGE 线程、审计写文件线程等,用于特定功能,此处未详细列出。

三、线程信息查看

  • 动态性能视图:DM 提供 V L A T C H E S 、 V LATCHES、V LATCHESVTHREADS、V$PROCESS 等动态性能视图,用户可通过它们直观了解当前系统中工作线程及相关信息。
  • 详细定义:视图详细定义可参考本手册附录 2“动态性能视图”。

参考资料:管理 DM 线程

ps -L -p 223 | awk 'NR > 1 { print $5 }' |  sort | uniq -c | sort

ps -L -p 223 | awk 'NR > 1 { count++ } END { print "Total threads: " count }'

在这里插入图片描述

SELECT * FROM V$PROCESS;

SELECT * FROM V$THREADS;
SELECT DISTINCT name, THREAD_DESC FROM V$THREADS ORDER BY name ASC;
dm_audit_thd	Thread for flush audit logs
dm_chkpnt_thd	Flush checkpoint thread
dm_dpc_pthd	Worker thread for DPC
dm_dw_bro_thd	Thread for brocasting instance information
dm_hio_thd	IO thread for HFS to read data pages
dm_io_thd	IO thread
dm_lpq_thd	Local parallel working thread
dm_lsnr_thd	Service listener thread
dm_mal_lsnr_thd	Mail listening thread
dm_mal_mgr_thd	Thread for checking mail system or pre-commited transactions in MPP
dm_mal_recv_thd	Thread for receiving Mail
dm_mal_tsk_thd	Mail working thread
dm_purge_thd	Purge thread
dm_quit_thd	Thread for executing shutdown-normal operation
dm_redolog_thd	Redo log thread, used to flush log
dm_rsyswrk_thd	Asynchronous archiving thread
dm_sched_thd	Server scheduling thread,used to trigger background checkpoint, time-related triggers
dm_sql_aux_thd	User session auxiliary thread
dm_sql_thd	User session thread
dm_sqllog_thd	Thread for writing dmsql dmserver
dm_trctsk_thd	Thread for writing trace information
dm_tskwrk_thd	Task Worker Thread for SQL parsing and execution for sevrer itself
dm_utsklsnr_thd	Thread for listening net
dm_wrkgrp_thd	User working thread

在这里插入图片描述

附录:线程&进程

使用ps命令查看线程

1. 显示所有线程

要查看某个进程的所有线程,可以使用ps命令的-L选项。例如:

ps -L -p <进程ID>
  • -L:显示线程信息。
  • -p <进程ID>:指定要查看的进程ID。

示例
假设你想查看进程ID为1234的所有线程,可以运行:

ps -L -p 1234

输出示例:

  PID   LWP TTY          TIME CMD
 1234  1234 pts/0    00:00:00 myapp
 1234  1235 pts/0    00:00:00 myapp
 1234  1236 pts/0    00:00:00 myapp
  • PID:进程ID。
  • LWP:线程ID(Light Weight Process)。
  • TTY:终端设备。
  • TIME:累计CPU时间。
  • CMD:命令名称。
2. 显示所有线程的详细信息

如果你想查看更详细的线程信息,可以结合ps的其他选项。例如,使用-o选项可以指定要显示的字段:

ps -L -p <进程ID> -o pid,lwp,tid,comm,psr
  • -o:指定要显示的字段。
    • pid:进程ID。
    • lwp:线程ID。
    • tid:线程ID(与lwp相同)。
    • comm:命令名称。
    • psr:线程当前运行的CPU编号。

示例

ps -L -p 1234 -o pid,lwp,tid,comm,psr

输出示例:

  PID   LWP   TID COMMAND  PSR
 1234  1234  1234 myapp    0
 1234  1235  1235 myapp    1
 1234  1236  1236 myapp    0
3. 查看所有进程的线程

如果你想查看系统中所有进程的线程,可以省略-p选项:

ps -L -o pid,lwp,tid,comm,psr

这将列出系统中所有线程的详细信息。

使用top命令查看线程

top命令也可以用来查看线程信息。通过按H键,top会切换到线程视图,显示每个线程的详细信息。

示例

  1. 启动top命令:
    top
    
  2. H键切换到线程视图。

使用htop命令查看线程

htop是一个更友好的进程查看工具,它默认显示线程信息。你可以通过以下命令安装htop(如果尚未安装):

sudo apt-get install htop  # Debian/Ubuntu
sudo yum install htop      # CentOS

启动htop后,你可以直接看到每个进程的线程信息。

使用pthread库的线程

如果你在编写C/C++程序并使用pthread库创建线程,可以通过pthread_self()函数获取当前线程的ID,并通过pthread_getattr_np()函数获取线程的详细属性。

总结

  • 使用ps -L可以查看指定进程的所有线程。
  • 使用ps -L -o可以指定要显示的字段,获取更详细的线程信息。
  • 使用tophtop可以动态查看线程的运行状态。

希望这些信息对你有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02.10 TCP之文件传输

1.思维导图 2.作业 服务器代码&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> …

Node.js 环境配置

什么是 Node.js Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境&#xff0c;它允许你在服务器端运行 JavaScript。传统上&#xff0c;JavaScript 主要用于浏览器中的前端开发&#xff0c;而 Node.js 使得 JavaScript 也能够在服务器上执行&#xff0c;…

【办公类-53-04】20250209Python模仿制作2024学年第二学期校历

背景需求&#xff1a; 马上开学了&#xff0c;又要制作校历&#xff08;删划节假日&#xff09;。之前我都是用网络的图片&#xff0c;然后在PPT里修改。 存在问题&#xff1a; 网络校历是从周日开始的&#xff0c;但日常我们老师做教案&#xff0c;都是默认从周一到周五&…

KERL文献阅读分享:知识图谱与预训练语言模型赋能会话推荐系统

标题期刊年份Knowledge Graphs and Pre-trained Language Models enhanced Representation Learning for Conversational Recommender SystemsJournal of LaTeX Class Files2021 &#x1f4c8;研究背景 在数字时代&#xff0c;个性化推荐系统已经成为了我们生活的一部分。从电…

强一致性算法:Raft

目录 什么是 Raft 算法&#xff1f; Leader的选举 投票分裂后的选举过程 Raft算法日志复制过程 修复不一样的日志 数据安全性的保证 什么是 Raft 算法&#xff1f; Raft 算法是一种是一种用于管理复制日志的强一致性算法&#xff0c;用于保证分布式系统中节点数据的一致…

[MyabtisPlus]PG的TIMESTAMPTZ不支持转换为LocalDateTime

背景 数据库用的是PG&#xff0c;且created_time字段用的是带时区的timestamptz类型&#xff1a; 用MyabtisPlus(MP)的的代码生成&#xff0c;默认生成的是JDK8的LocalDateTime类型&#xff1a; 结果&#xff0c;在查询时候&#xff0c;无法做到实体类的类型自动转换&#xff0…

cliproxy代理服务使用指南

Cliproxy代理服务使用指南 一、引言 Cliproxy&#xff0c;作为一款高效稳定的代理服务工具&#xff0c;广泛应用于跨境电商、数据分析、网络爬虫、远程办公等领域。本指南旨在帮助用户快速上手Cliproxy&#xff0c;充分利用其代理服务&#xff0c;提升工作效率与数据安全。 二、…

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…

防火墙术语大全( Firewalld Glossary of Terms)

防火墙术语大全 防火墙作为网络安全中不可或缺的设备&#xff0c;在各种网络架构中扮演着至关重要的角色。无论是企业级防火墙、云防火墙还是家用路由器内置的防火墙&#xff0c;它们的工作原理和配置策略都离不开一系列专业术语的支撑。对于网络工程师来说&#xff0c;掌握这…

【蓝耘元生代智算云平台】一键部署 DeepSeek人工智能模型

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

配置@别名路径,把@/ 解析为 src/

路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js &#xff0c;内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定&#xff1a; 使用 表示src文件所在路径: path.resolve(__dirname,src)…

力扣hot100刷题第一天

哈希 1. 两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。你可以按任意…

【前端】几种常见的跨域解决方案代理的概念

几种常见的跨域解决方案&代理的概念 一、常见的跨域解决方案1. 服务端配置CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff1a;2. Nginx代理3. Vue CLI配置代理&#xff1a;4 .uni-app在manifest.json中配置代理来解决&#xff1a;5. 使用WebSocket通讯…

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案:

以下是基于巨控GRM241Q-4I4D4QHE模块的液位远程控制系统技术方案&#xff1a; 一、系统概述 本系统采用双巨控GRM241Q模块构建4G无线物联网络&#xff0c;实现山上液位数据实时传输至山下水泵站&#xff0c;通过预设逻辑自动控制水泵启停&#xff0c;同时支持APP远程监控及人工…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名&#xff0c;在百度地图网站上搜索到的地点可能是商业网点&#xff0c;在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中&#xff0c;搜索地名&#xff0c;如“乱石头川”&#xff0c;该地名会出…

Photoshop自定义键盘快捷键

编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…

carbon 加入 GitCode:Golang 时间处理的 “瑞士军刀”

在 Golang 的开发生态中&#xff0c;时间处理领域长期存在着诸多挑战。高效、精准的时间处理对于各类软件应用的稳定运行与功能拓展至关重要。近日&#xff0c;carbon 正式加入 GitCode&#xff0c;为 Golang 开发者带来一款强大且便捷的时间处理利器&#xff0c;助力项目开发迈…

项目总结: 应用程序的扩展bundle化,自定义classLoader

目录 描述事情实现的简单说明主应用业务1业务2 实现细节描述更多总结 描述事情 应用程序的主逻辑要做一件事&#xff0c;也提供了扩展。即如果想干预这个逻辑&#xff0c;业务可以自己扩展。 设计图如下&#xff1a; 应用&#xff1a;application, AppClassLoader加载&#…

基于javaweb的SpringBoot电影推荐系统

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 运行环境开发工具适用功能说明项目介绍环境需要技术栈使用说明 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclips…

linux部署ollama+deepseek+dify

Ollama 下载源码 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz启动 export OLLAMA_HOST0.0.0.0:11434 ollama serve访问ip:11434看到即成功 Ollama is running 手动安装deepseek…