首页 > 其他分享 >openGauss体系架构

openGauss体系架构

时间:2023-04-07 18:33:52浏览次数:34  
标签:体系 存储 架构 数据库 信息 线程 pg openGauss

一、体系架构图

openGauss体系架构_数据库

二、Instance部分

Instance部分其实主要指的是数据库运行时的内存部分。 openGauss属于单进程多线程模型的数据库,客户端可以使用JDBC/ODBC/Libpq/Psycopg等驱动程序,向openGauss的后端管理线程GaussMaster发起连接请求。

当 GaussMaster 线程接收到客户端程序发送过来的服务请求后,会根据收到的信息会立即fork()一个子线程,这个子线程对请求进行身份验证成功后成为对应的后端业务处理子线程( gaussdb )。之后该客户端发送的请求将由此业务处理子线程(gaussdb)负责处理。当业务处理子线程(gaussdb)接收到客户端发送过来的查询(SQL)后,会调用openGauss的SQL引擎对SQL语句进行词法解析、语法解析、语义解析、查询重写等处理操作,然后使用查询优化器生成最小代价的查询路径计划。之后,SQL执行器会按照已制定的最优执行计划对SQL语句进行执行,并将执行结果反馈给客户端。

在SQL执行器的执行过程中通常会先访问内存的共享缓冲区(如:shared buffer、cstore buffer、MOT等),内存共享缓冲区缓存数据库常被访问的索引、表数据、执行计划等内容, 共享缓冲区的高速RAM硬件,为SQL的执行提供了高效的运行环境,大幅减少了磁盘IO,极大地提升了数据库性能,是数据库非常重要的组件之一。

如图所示:

  1. shared buffer 是行存引擎默认使用的缓冲区,openGauss的行存引擎是将表按行存储到硬盘分区上,采用MVCC多版本并发控制,事务之间读写互不冲突,有着很好的并发性能,适合于OLTP场景。
  2. cstore buffers 是列存引擎默认使用的缓冲区,列存引擎将整个表按照不同列划分为若干个CU(Compression Unit,压缩单元),以CU为单位进行管理,适合于OLAP场景。

MOT 是内存引擎默认使用的缓冲区,openGauss的MOT内存引擎的索引结构以及整体的数据组织都是基于Masstree模型实现的,其乐观并发控制和高效的缓存块利用率使得openGauss可以充分发挥内存的性能,同时,在确保高性能的前提下,内存引擎有着与openGauss原有机制相兼容的并行持久化和检查点能力(CALC逻辑一致性异步检查点),确保数据的永久存储,适合于高吞吐低时延的业务处理场景。

SQL执行器在共享缓冲区中对数据页的操作会被记录到 WAL buffer 中,当客户端发起事务的commit请求时,WAL buffer的内容将被WalWriter线程刷新到磁盘并保存在WAL日志文件中,确保那些已提交的事务都被永久记录,不会丢失。 但需要注意的是,当walwriter的写操作跟不上时数据库实际的需求时,常规后端线程仍然有权进行WAL日志的刷盘动作。这意味着WALWriter不是一个必要的进程,可以在请求时快速关闭。

三、openGauss的后台辅助线程

线程名称

描述

jemalloc_bg_thd

管理并实现内存的动态分配

StatCollector

负责统计openGauss数据库的信息,包括:物理硬件资源使用信息、对象属性及使用信息、SQL运行信息、会话信息、锁信息、线程信息等,并且将这些收集到的统计信息保存在pgstat.stat文件中

Auditor

使用重定向的方式从管理线程、后台线程以及其他子线程获取审计数据,并保存在审计文件中

LWLockMonitor

负责检测轻量级锁(LWLock)产生的死锁,轻量级锁主要提供对共享内存的互斥访问控制,比如Clog buffer(事务提交状态缓存)、Shared buffers(数据页缓存)、Substran buffer(子事务缓存)等

sysLogger

使用重定向的方式捕获管理线程、后台线程以及其他子线程的stderr输出,并写入日志文件中

Jobworker

JOB线程分为调度线程和工作线程。调度线程(JobScheduler)会根据pg_job表里面定义的JOB周期,对已经过期的JOB进行调用,由工作线程(Jobworker)执行实际的JOB任务

percentworker

根据percentile参数设置的值计算sql响应时间的百分比信息,目前percentile参数仅支持80和95

snapshotworker

收集snapshot信息,openGauss数据库的WDR报告依赖于snapshot

ashworker

统计历史活动会话相关信息

alarm

openGauss的告警检测线程

清理线程(AutoVacLauncher+AutoVacWorker)

AutoVacLauncher线程由Postmaster线程启动,它不断地将数据库需要做vacuum的对象信息保存在共享内存中,当表上被删除或更新的记录数超过设定的阈值时,会调用AutoVacWorker线程对表的存储空间执行回收清理工作

WalSender

运行在openGauss主备环境中主节点,发送预写日志给备节点

WalReceiver

运行在openGauss主备环境中备节点,接收预写日志记录

pagewriter

负责将脏页数据拷贝至双写(double-writer)区域并落盘,然后将脏页转发给bgwriter子线程进行数据下盘操作,如果发生数据页"折断"的问题,就会从双写空间里找到完整的数据页进行恢复

bgwriter

负责对共享缓冲区的脏页数据持续的进行刷盘操作,目的是让数据库线程在进行用户查询时可以很少或者几乎不等待写动作的发生,这样的机制同样也减少了检查点造成的性能下降

Checkpointer

周期性的发起数据库检查点,在这个检查点时刻,所有的数据文件都被更新,脏数据页也被刷新到磁盘,此刻数据库是一致的。openGauss支持全量检查点和增量检查点,增量检查点打开后会小批量的分阶段的滚筒式的去进行脏页刷盘

四、Database相关文件

目录名称

描述

base

openGauss数据库对象默认存储在该目录,如默认的数据库postgres、用户创建的数据库及关联的表等对象

global

存储openGauss共享的系统表或者说是共享的数据字典表

pg_tblspc

即是openGauss的表空间目录,里面存储openGauss定义的表空间的目录软链接,这些软链接指向openGauss数据库表空间文件的实际存储目录

pg_xlog

存储openGauss数据库的WAL日志文件

pg_clog

存储openGauss数据库事务提交状态信息

pg_csnlog

存储openGauss数据库的快照信息,openGauss事务启动时会创建一个CSN快照,在MVCC机制下,CSN作为openGauss的逻辑时间戳,模拟数据库内部的时序,用来判断其他事务对于当前事务是否可见

pg_twophase

存储两阶段事务提交信息,用来确保数据一致性

pg_serial

存储已提交的可序列化事务信息

pg_multixact

存储多事务状态信息,一般用于共享行级锁(shared row locks)

五、openGauss配置相关文件

文件名称

描述

postgresql.conf

openGauss的配置文件,在gaussmaster线程启动时会读取该文件,获取监听地址、服务端口、内存分配、功能设置等配置信息,并且根据该文件,在openGauss启动时创建共享内存和信号量池等

pg_hba.conf

基于主机的接入认证配置文件,主要保存鉴权信息(如:允许访问的数据库、用户、IP段、加密方式等)

pg_ident.conf

客户端认证的配置文件,主要保存用户映射信息,将主机操作系统的用户与openGauss数据库用户做映射

gaussdb.state

主要保存数据库当前的状态信息(如:主备HA的角色、rebuild进度及原因、sync状态、LSN信息等)

六、openGauss其他重要文件

目录名称

描述

Archived WAL

openGauss数据库WAL日志的归档目录,保存openGauss的历史WAL日志

pg_audit

存储openGauss数据库的审计日志文件

pg_replslot

存储openGauss数据库的复制事务槽数据

pg_llog

保存逻辑复制时的状态数据

标签:体系,存储,架构,数据库,信息,线程,pg,openGauss
From: https://blog.51cto.com/u_13236892/6176468

相关文章

  • 建设数据资产一体化管控体系,某大型医药集团实现数据长效赋能业务发展
    某大型医药集团成立于1994年,是一家植根中国、创新驱动的全球化医药健康产业集团,业务覆盖制药、医疗器械、医学诊断、医疗健康服务、医药商业等医药健康全产业链。01传统数据应用体系无法满足集团业务发展需求数字化转型大背景下,该医药集团旗下成员企业逐步搭建起各类系统来支撑自......
  • 分布式存储技术(下):宽表存储与全文搜索引擎的架构原理、特性、优缺点解析
    对于写密集型应用,每天写入量巨大,数据增长量无法预估,且对性能和可靠性要求非常高,普通关系型数据库无法满足其需求。对于全文搜索和数据分析这类对查询性能要求极高的场景也是如此。为了进一步满足上面两类场景的需求,有了宽表存储和搜索引擎技术,本文将对他们的架构、原理、优缺点做介......
  • 分布式存储技术(下):宽表存储与全文搜索引擎的架构原理、特性、优缺点解析
    对于写密集型应用,每天写入量巨大,数据增长量无法预估,且对性能和可靠性要求非常高,普通关系型数据库无法满足其需求。对于全文搜索和数据分析这类对查询性能要求极高的场景也是如此。为了进一步满足上面两类场景的需求,有了宽表存储和搜索引擎技术,本文将对他们的架构、原理、优缺点做介......
  • 一个原创宇宙学/盒子体系
    首先,定义"多元宇宙"为一系列宇宙的集合。单个宇宙是无穷大的,有无穷个这些宇宙中可能存在的规则(设无穷为\(n\))。每个宇宙可能存在或者不存在这些规则,"多元宇宙"包含规则所有存在以及不存在的情况,这样"多元宇宙"包含\(2^n\)个无穷大的宇宙。然而看上去有\(n\)可能存在的规则,实际......
  • TOTAL:AWS 认证解决方案架构师助理 (SAA-C03)
    TOTAL:AWS认证解决方案架构师助理(SAA-C03)超值:通过AWSCertifiedSolutionsArchitect–AssociateSAA-C03考试+AWSEssentials和2次免费练习考试课程英文名:TOTALAWSCertifiedSolutionsArchitectAssociate(SAA-C03)此视频教程共15.9GB,中英双语字幕,画质清晰无......
  • 架构师日记-为什么数据一致性那么难
    作者:京东零售 刘慧卿一前言在现代大型分布式软件系统中,有一个绕不过去的课题,那就是如何保证系统的数据一致性。著名的Paxos算法(Megastore、Spanner),Raft协议(ETCD、TiKV、Consul),ZAB协议(ZooKeeper)等分布式一致性解决方案,都是在此背景下而诞生的。数据一致性保障为什么难呢?先来看一......
  • 美团视觉GPU推理服务部署架构优化实践
    面对在线推理服务使用的GPU资源不断增加、GPU利用率普遍较低的挑战,美团视觉研发团队决定通过模型结构拆分和微服务化进行优化,他们提出了一种通用高效的部署架构,来解决这种常见的性能瓶颈问题。以“图像检测+分类”服务为例,优化后的服务压测性能指标GPU利用率由40%提升至100%,QPS也提......
  • EasyMR 安全架构揭秘:如何管理 Hadoop 数据安全
    2017年,美国信用评级机构Equifax遭受黑客攻击,导致1.4亿个人的敏感信息泄露;2020年,发生了SolarWinds公司的软件供应链遭受恶意代码攻击事件,涉及多个行业和国家;2022年,网信办依据《数据安全法》等法律法规,对滴滴公司开出人民币80.26亿元的巨额罚款,对互联网企业敲响数据安全警钟。......
  • 微前端架构:将应用拆分为多个小型模块,实现模块化设计
    随着技术的不断发展和应用场景的不断变化,微前端架构也将不断演化和完善,成为更加成熟和稳定的前端架构模式,为开发者和企业带来更多的价值和机会。互联网应用的不断发展和迭代,传统的单体应用架构已经逐渐无法满足现代应用的需求。为了更好地适应快速变化的市场和业务需求,微服务和微......
  • Go 语言体系下的微服务框架选型: Dubbo-go
    本文介绍了Go微服务体系发展与选型,过去一年优雅上下线以及对未来的展望。作者简介:牛学蔚(GitHub:@justxuewei):ApacheDubboPMC,对云原生、中间件、容器等领域有浓厚兴趣,活跃在Dubbo和Katacontainers两个开源项目中。一、Go微服务体系发展与选型随着微服务技术的快速发展,其在......