参考
opengauss辅助线程
业务处理线程
业务处理线程负责处理客户端请求的任务,当客户端发送连接请求给postmaster管理线程后,postmaster线程会分配相应的业务处理子线程(命名为gaussdb)给客户端使用,后面该客户端的请求和操作由该业务处理子线程负责。业务处理线程对应pg中的backend process进程。
WalWriter
写日志线程。该线程负责将内存中的预写日志页刷新到预写日志文件中。预写日志记录了opengauss数据文件的变更操作。数据库在执行sql操作时先将这些变更操作记录在预写日志文件,然后才定期刷数据到数据文件。
数据页写线程
将缓冲区的脏页落盘。
PageWriter
负责将脏页数据拷贝至双写(double-writer)区域并落盘,然后将脏页转发给bgwriter子线程进行数据下盘操作,这样可以防止该现象的发生,因为如果发生数据页"折断"的问题,就会从双写空间里找到完整的数据页进行恢复。
BgWriter
主要负责对共享缓冲区的脏页数据进行下盘操作,目的是让数据库线程在进行用户查询时可以很少或者几乎不等待写动作的发生(写动作由后端写线程完成)。
CheckPointer
检查点线程。将数据库中的脏页刷新到磁盘,确保检查点前的数据和日志一致。数据库崩溃时,只需要从checkpoint指定的redo点重做。周期性执行checkpoint操作可以减少恢复时间。
openGauss的检查点有全量检查点和增量检查点。增量检查点开关打开的时候将不再使用full_page_writes防止页面折断,而是依赖双(double-writer)特性保护,当增量检查点打开后会小批量分阶段的滚筒式进行脏页刷盘,同时更新lsn信息,回收不需要的xlog日志。
StatCollector
统计线程,负责统计opengauss数据库的信息。包括:硬件资源使用信息,对象属性及使用信息,sql运行信息等。这些信息被保存在pgstat.stat文件。
Vaccum Launcher & Vaccum Worker
清理线程。opengauss使用MVCC机制。导致,删除和更新操作不会立即释放存储空间,而是保留多个版本数据。当没有事务能访问某个版本的元组时,这样的元组实际上没有什么价值了。这样会使得操作频繁的表积累大量的过期数据,占用磁盘空间,当扫描查询数据时,需要更多的IO消耗,降低查询效率。所以需要一个线程对这些过期数据进行清理,并回收存储空间。
Vaccum Worker做实际的清理工作。Vaccum Launcher通过postmaster去启动Vaccum Worker做清理。
Arch
日志归档线程。主要功能是完成归档操作,把在线日志拷贝到归档目录
LWLockMonitor
轻量锁监控线程。轻量级锁(LWLock)主要提供对共享内存的互斥访问,比如Clog buffer(事务提交状态缓存)、Shared buffers(数据页缓存)、Substran buffer(子事务缓存)等。该轻量级锁监控线程主要检测轻量级锁(LWLock)产生的死锁。
Auditor
审计线程。从管理线程、后台线程以及其他子线程获取审计数据,并保存在审计文件中。
SysLogger
系统日志线程。用重定向的方式捕获管理线程、后台线程以及其他子线程的stderr输出。
AlarmChecker
告警检测线程。
JobScheduler
调度线程JobScheduler会根据pg_job表里面定义的JOB周期,对已经过期的JOB进行调用,由Jobworker线程执行实际的JOB任务。定时任务。
Startup
数据库启动线程。数据库启动时Postmaster主线程拉起的第一个子线程,主要完成数据库的日志REDO(重做)操作,进行数据库的恢复。日志REDO操作结束,数据库完成恢复后,如果不是备机,Startup线程就退出了。如果是备机,那么Startup线程一直在运行,REDO备机接收到新的日志
Reaper
子线程回收线程在openGauss数据库中被命名为Reaper,主要负责回收处于die状态的子线程。