达梦体系结构:进程架构
- 进程结构
- 监听线程
- 会话线程
- 工作线程
- IO线程
- 日志刷盘线程
- 日志归档线程
- 日志重做线程
- 调度线程
- 检查点线程
达梦数据库由数据库和实例构成:
- 数据库是指磁盘上存放的数据库文件的集合,包括参数文件、控制文件、数据文件、日志文件等。
- 实例是指一组运行的数据库进程/线程以及一块大型的共享内存。
进程结构
与Oracle多进程架构不同,达梦数据库采用的是单进程多线程的架构。
查看数据库进程:
[dmdba@localhost ~]$ ps -ef | grep dmserver
dmdba 1677 1 2 20:48 ? 00:00:02 /dm8/bin/dmserver path=/dm8/data/DAMENG/dm.ini -noconsole
dmdba 3349 3301 0 20:49 pts/1 00:00:00 grep dmserver[dmdba@localhost ~]$ ps -Tp 1677PID SPID TTY TIME CMD1677 1677 ? 00:00:02 dmserver1677 1776 ? 00:00:00 dm_sqllog_thd1677 1787 ? 00:00:00 dm_dpc_pthd1677 1788 ? 00:00:00 dm_dpc_pthd1677 1789 ? 00:00:00 dm_dpc_pthd1677 1790 ? 00:00:00 dm_dpc_pthd1677 1791 ? 00:00:00 dm_dpc_pthd1677 1792 ? 00:00:00 dm_dpc_pthd1677 1797 ? 00:00:00 dm_dpc_pthd1677 1798 ? 00:00:00 dm_dpc_pthd1677 1799 ? 00:00:00 dm_dpc_pthd1677 1800 ? 00:00:00 dm_dpc_pthd1677 1801 ? 00:00:00 dm_dpc_pthd1677 1802 ? 00:00:00 dm_dpc_pthd1677 1803 ? 00:00:00 dm_dpc_pthd1677 1807 ? 00:00:00 dm_dpc_pthd1677 1808 ? 00:00:00 dm_dpc_pthd1677 1809 ? 00:00:00 dm_dpc_pthd1677 2113 ? 00:00:00 dm_quit_thd1677 2133 ? 00:00:00 dm_io_thd1677 2134 ? 00:00:00 dm_io_thd1677 2135 ? 00:00:00 dm_io_thd1677 2136 ? 00:00:00 dm_io_thd1677 2137 ? 00:00:00 dm_io_thd1677 2138 ? 00:00:00 dm_io_thd1677 2139 ? 00:00:00 dm_io_thd1677 2140 ? 00:00:00 dm_io_thd1677 2141 ? 00:00:00 dm_io_thd1677 2142 ? 00:00:00 dm_io_thd1677 2143 ? 00:00:00 dm_io_thd1677 2144 ? 00:00:00 dm_io_thd1677 2145 ? 00:00:00 dm_io_thd1677 2146 ? 00:00:00 dm_io_thd1677 2147 ? 00:00:00 dm_io_thd1677 2148 ? 00:00:00 dm_io_thd1677 2153 ? 00:00:00 dmserver1677 2213 ? 00:00:00 dm_rsyswrk_thd1677 2214 ? 00:00:00 dm_rsyswrk_thd1677 2215 ? 00:00:00 dm_hio_thd1677 2216 ? 00:00:00 dm_hio_thd1677 2217 ? 00:00:00 dm_hio_thd1677 2218 ? 00:00:00 dm_hio_thd1677 2221 ? 00:00:00 dm_chkpnt_thd1677 2222 ? 00:00:00 dm_redolog_thd1677 2225 ? 00:00:00 dm_tskwrk_thd1677 2226 ? 00:00:00 dm_tskwrk_thd1677 2227 ? 00:00:00 dm_tskwrk_thd1677 2228 ? 00:00:00 dm_tskwrk_thd1677 2229 ? 00:00:00 dm_tskwrk_thd1677 2230 ? 00:00:00 dm_tskwrk_thd1677 2231 ? 00:00:00 dm_tskwrk_thd1677 2232 ? 00:00:00 dm_tskwrk_thd1677 2233 ? 00:00:00 dm_tskwrk_thd1677 2234 ? 00:00:00 dm_tskwrk_thd1677 2235 ? 00:00:00 dm_tskwrk_thd1677 2236 ? 00:00:00 dm_tskwrk_thd1677 2237 ? 00:00:00 dm_tskwrk_thd1677 2238 ? 00:00:00 dm_tskwrk_thd1677 2239 ? 00:00:00 dm_tskwrk_thd1677 2240 ? 00:00:00 dm_tskwrk_thd1677 2241 ? 00:00:00 dm_sqllog_thd1677 2242 ? 00:00:00 dm_sql_aux_thd1677 2243 ? 00:00:00 dm_purge_thd1677 2244 ? 00:00:00 dmserver1677 2245 ? 00:00:00 dm_trctsk_thd1677 2246 ? 00:00:00 dm_wrkgrp_thd1677 2247 ? 00:00:00 dm_wrkgrp_thd1677 2248 ? 00:00:00 dm_wrkgrp_thd1677 2249 ? 00:00:00 dm_wrkgrp_thd1677 2250 ? 00:00:00 dm_wrkgrp_thd1677 2251 ? 00:00:00 dm_wrkgrp_thd1677 2252 ? 00:00:00 dm_wrkgrp_thd1677 2253 ? 00:00:00 dm_wrkgrp_thd1677 2254 ? 00:00:00 dm_wrkgrp_thd1677 2255 ? 00:00:00 dm_wrkgrp_thd1677 2256 ? 00:00:00 dm_wrkgrp_thd1677 2257 ? 00:00:00 dm_wrkgrp_thd1677 2258 ? 00:00:00 dm_wrkgrp_thd1677 2259 ? 00:00:00 dm_wrkgrp_thd1677 2260 ? 00:00:00 dm_wrkgrp_thd1677 2261 ? 00:00:00 dm_wrkgrp_thd1677 2262 ? 00:00:00 dm_audit_thd1677 2263 ? 00:00:00 dm_audit_thd1677 2264 ? 00:00:00 dm_sched_thd1677 2265 ? 00:00:00 dm_lsnr_thd1677 3481 ? 00:00:00 dm_sql_thd
查看数据库进程资源消耗:
top -Hp 1677
与数据库进程相关的视图:
select * from v$process;select * from v$threads;
监听线程
监听进程对应的是 dm_lsnr_thd。监听进程用于在服务器端口上进行循环监听,一旦收到来自客户端的连接请求,监听进程被唤醒并生成一个会话进程,将申请的任务加入工作线程的任务队列,等待工作线程进行处理。
会话线程
会话线程对应的是 dm_sql_thd。每个会话对应一个会话线程。当数据库连接会话较多时,会话线程的数量也会很多。
会话对应的线程ID可以在视图V$SESSIONS
中查到。
select sess_id,thrd_id,trx_id,sql_id,state from v$sessions;
工作线程
工作线程对应的是 dm_tskwrk_thd和 dm_wrkgrp_thd。工作线程是达梦的核心线程,默认有16个工作线程。
IO线程
IO线程对应的是 dm_io_thd。主要用于以下三种场景:
- 需要访问的数据页不在内存中时,通过物理读将磁盘中的数据页读到内存中。
- 缓冲区满或者数据库关闭时,将内存中的脏数据刷到磁盘中。
- 执行检查点时,将内存中所有脏数据落盘。
日志刷盘线程
对应的进程是 dm_redolog_thd。负责日志刷盘。主要用于在事务提交或者检查点时将日志缓冲区中的REDO日志写入到磁盘中的日志文件中。
日志归档线程
对应的进程是 dm_rsyswrk_thd。用于REDO日志的归档。
日志重做线程
主要用于数据库恢复,日志重做线程会根据REDO日志进行并行的故障恢复。
调度线程
对应的进程是 dm_sched_thd。用于定时调度任务。包括但不限于以下场景:
- 检查系统级的事件触发器;
- 清理SQL缓存、计划缓存中的失效项,或者超出缓存限制后淘汰不常用的缓存项;
- 动态缓冲区检查。根据需要动态扩展或收缩系统缓冲池;
- 自动执行检查点;
- 会话超时检测;
- 必要时执行数据更新页刷盘;
- 唤醒等待的工作线程。
检查点线程
对应的进程是 dm_chkpnt_thd。负责CHECKPOINT检查点操作。检查点时,IO线程会将脏数据页刷到磁盘数据文件中。