OpenGauss体系架构

OpenGauss体系架构图

在这里插入图片描述

Opengauss体系具体部分

1、主体模块:Instance

(1)线程组
GaussMaster线程

作为数据库主线程,也称为Postmaster,负责全局协调与监控,包括:

  • 监听客户端连接请求,创建新会话线程(如Postgres线程)处理请求
  • 监控所有子线程状态,对异常退出的线程进行重启或数据库重初始化
  • 初始化共享内存、信号量池等核心资源,但不直接参与锁管理或数据操作
gaussdb线程

核心服务线程:

  • 处理客户端SQL请求,执行查询解析、优化、执行全流程
  • 通过共享缓冲区(如shared buffer、cstore buffer)访问数据,支持行存(OLTP)和列存(OLAP)引擎
  • 在非线程池模式下,每个客户端连接对应一个独立线程;线程池模式下复用线程资源
WalWriter线程

管理WAL日志的持久化:

  • 周期性地将WAL缓冲区内容写入磁盘日志文件(如pg_xlog目录),保障事务的原子性和持久性
  • 在归档模式下触发日志切换,将在线日志拷贝至归档目录
CheckPoint线程

触发检查点操作:

  • 全量检查点:强制将所有内存脏页同步到磁盘,保证数据库一致性
  • 增量检查点:分阶段滚动式刷盘,减少性能抖动,更新控制文件记录恢复起始点
  • 与BgWriter协作,通过双写机制防止数据页断裂,异常时从双写区域恢复
PageWriter

双写保护与脏页中转:

  • 双写机制(Double-Write):将共享缓冲区中的脏页先拷贝至双写区域(磁盘上的固定区域),再异步写入实际表文件。此举旨在防止因系统崩溃或I/O中断导致的数据页"折断"(Partial Write)问题

    例如:若某页写入表文件时仅完成部分操作,后续可通过双写区域的完整副本恢复数据一致性。

  • 脏页中转:完成双写后,将脏页转发给BgWriter线程进行最终刷盘操作,形成流水线式处理

BgWriter

后台异步刷盘与资源调度:

  • 脏页批量刷盘:持续扫描共享缓冲区,将PageWriter转发的脏页或未被双写机制覆盖的常规脏页批量写入表文件,减少随机I/O带来的性能波动
  • 检查点协作:在检查点(Checkpoint)触发前提前刷写部分脏页,避免检查点期间集中刷盘导致的性能陡降

(2)内存缓冲区

Shared Buffer(共享缓冲区):

  • 核心作用:作为全局共享内存区域,用于缓存频繁访问的数据页(如行存表、索引页),通过减少磁盘IO提升查询性能

WAL Buffer(事务日志缓冲区):

  • 核心作用: 临时存储WAL日志(事务操作的预写日志),保障事务的原子性和持久性
  • 协作机制
    • 异步刷盘:WalWriter线程周期性将日志写入磁盘(如pg_xlog目录),避免每次事务提交触发IO
    • 双写保护:结合PageWriter线程防止日志页断裂,异常时通过双写区域恢复
    • 参数建议:默认16MB,高并发事务场景可调高至64MB以减少日志溢出风险

Cstore Buffer(列存储缓冲区)

  • 核心作用

    专为列式存储引擎设计,缓存列数据块,优化OLAP场景的大数据量扫描性能

  • 技术特点

    • 压缩优化:支持列级字典压缩,减少内存占用并提升缓存效率
    • 向量化处理:结合SIMD指令加速列数据批量计算(如聚合、过滤)
    • 参数配置:默认128MB,需根据列存表占比动态调整

Temp Buffer(临时表缓冲区)

  • 核心作用

    存储临时表数据及复杂查询中间结果(如排序中间表、物化视图)

  • 管理策略

    • 会话隔离:每个Worker独立分配,避免并发操作冲突
    • 自动回收:会话结束后自动释放,支持ON COMMIT DELETE ROWS语义
    • 参数调优:默认8MB,复杂查询(如多表JOIN)建议调大以减少磁盘临时文件生成

Work Mem(工作内存)

  • 核心作用

    为单个会话的排序、聚合、哈希连接操作提供私有内存空间

  • 运行机制

    • 动态分配:按需分配,超出阈值时数据溢出到磁盘(如外部排序)
    • 并行优化:多线程场景下每个Worker独立分配,避免锁竞争
    • 参数调优:默认4MB,OLAP场景建议增大(如64MB)以加速大结果集处理
(3)后台辅助进程
WalSender/WalReceiver 线程

主备节点间WAL日志传输的发送和接收线程。

jemalloc_bg_thd

基于jemalloc的高内存管理后台线程,监控内存分配与碎片整理。

StatCollector

统计信息采集器,收集表和索引的访问特征,优化查询计划。

LWLLockMonitor

轻量级锁监控器,检测锁竞争和死锁风险。

Autovacuum相关
  • AutoVacLauncher
    自动清理任务调度器(如删除无效数据、更新统计信息)。
  • AutoVacWorker
    实际执行清理操作的工作线程。
Jobworker/percentworker/snaphotworker/ashworker

分别处理定时任务、资源配额监控、快照维护、性能采样等。

syslogger

系统日志收集线程,记录数据库运行状态和错误信息。

Jobworker线程

用于处理定时任务的核心线程组,由调度线程(JobScheduler工作线程(Jobworker 组成,负责周期性地执行用户预定义的数据库维护任务。

  • 任务调度(JobScheduler)
    • 调度线程通过扫描系统表pg_job获取任务配置(如执行周期、目标存储过程等),并根据预设时间触发任务。
    • 支持任务优先级管理,确保高优先级任务优先执行。
  • 任务执行(Jobworker)
    • 工作线程接收调度线程分配的JOB,执行具体操作(如统计信息收集、数据清理等)。
    • 每个Jobworker独立运行,支持并行处理多个任务,通过共享内存传递执行状态。

2、核心连接与驱动

  • 客户端程序
    JDBC/ODBC/Libpq/Psycopg等驱动的应用程序连接入口。
  • 连接驱动
    协议适配层,支持不同语言/协议(如Java的JDBC、Python的Psycopg)的通信。

3、OpenGauss配置文件

文件名称描述
postgresql.conf主配置文件,控制数据库服务器的全局运行参数,在数据库启动时会读取该文件,从该文件中获取监听地址、服务端口、内存分配、功能设置等配置信息。
pg_hba.conf客户端认证策略文件,定义允许连接的客户端及认证方式
pg_ident.conf操作系统用户与数据库用户的映射文件,主要用于 identpeer 认证
gaussdb.stateGaussDB 特有文件,记录数据库实例的运行时状态(如主备节点状态、健康检查结果等)

4、Database文件

文件功能/作用
base存储默认表空间 pg_default 的数据文件,每个数据库对应一个以 OID 命名的子目录
global存储全局系统表(如 pg_databasepg_authid)及控制文件 pg_control
pg_tblspc管理自定义表空间的符号链接目录,每个链接指向自定义表空间的物理路径
pg_xlog存储预写日志(WAL),确保事务持久性和崩溃恢复
pg_clog记录事务提交状态(提交/中止),通过 CLOG(事务提交日志)实现 MVCC 的可见性判断
pg_csnlog记录事务提交序列号(Commit Sequence Number),用于快照隔离级别下的可见性判断
pg_twophase存储两阶段提交(2PC)事务的预提交状态(如 PREPARE TRANSACTION),确保分布式事务的原子性
pg_serial管理序列(Sequence)的元数据,确保自增列在多会话下的唯一性
pg_multixact处理多事务并发锁(如行级锁),记录多个事务对同一数据行的锁定关系,防止死锁

5、opengauss其他重要文件

文件作用应用场景
Archived WAL(归档预写日志)将已提交事务的 WAL 日志文件从 pg_wal 目录备份至外部存储(如 NAS、对象存储),用于数据库崩溃恢复、主备同步及时间点恢复(PITR)灾难恢复、主备复制
pg_audit(审计扩展)记录数据库操作日志,满足合规性要求(如 ISO、金融审计),追踪 DDL、DML 及用户登录行为安全审计、操作回溯
pg_replslot(复制槽)管理主库与备库/逻辑订阅者之间的 WAL 日志保留策略,防止日志过早删除导致复制中断高可用、逻辑订阅
pg_llog(逻辑解码日志)存储逻辑复制槽的解码状态元数据,确保逻辑复制进程断连后能恢复至断点数据实时同步 登录行为
pg_replslot(复制槽)管理主库与备库/逻辑订阅者之间的 WAL 日志保留策略,防止日志过早删除导致复制中断高可用、逻辑订阅
pg_llog(逻辑解码日志)存储逻辑复制槽的解码状态元数据,确保逻辑复制进程断连后能恢复至断点数据实时同步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LILL...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值