暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OpenGauss体系结构

原创 计议 2021-03-30
3651





-----体系结构-内存结构
1、共享内存
类似于oracle的SGA,数据库启动时将分配一个共享内存区域,主要包括以下:
1)shared_buffers: 设置服务器使用的行存缓冲区的数量,控制行存缓冲区大小对表或索引的操作都是在内存中进行的如果访问的相关数据或者索引不在此内存区,将从持久性存储加载到 此处,并直接对其进行操作。
2)cstore_buffers:设置服务器使用的列存缓冲区的数量,控制列存缓冲区大小。
3)WAL buffer 是在写入磁盘之前WAL数据的缓冲区
2、本地内存
后台服务进程除访问共享内存外,还会申请一些本地内存,以便暂存一些不需要全局存储的数据。 类似于oracle的PGA为每个backend process 分配一个本地存储area,
主要包括以下:
1)work_mem :order by 和distinct操作对元组进行排序,通过merge-join和hash-join操作对表进行连 接时使用
2)maintenance_work_mem :某些维护操作(例如VACUUM,REINDEX)使用
3)temp_buffers :临时表使用

共享内存
类似于oracle的SGA,openGuass server 所有的 backgroud process 使用的内存。openGauss服务器启动时将分配一个共享内存区域,
主要包括以下:
shared_buffers (行): openGauss对表或索引的操作都是在内存中进行的,如果访问的相关数据或者索引不在此区域,将从持久性 存储加载到此处,并直接对其进行操作。 相当于 Oracle的Data Buffer Cache。
cstore_buffers(列): openGauss支持了列存表,通过cstore_buffers,设置服务器使用的列存缓冲区的数量, 控制列存缓冲区大小。
WAL buffer: 在服务端出现问题的时候,确保数据不会丢失,在写到磁盘之前,wal buffer 是 wal log 的缓存区域。相当于 Oracle的redo log

shared_buffers
设置数据库服务器将使用的共享内存缓冲区量。如果指定值时没有单位,则以块为单位,即BLCKSZ字节,通常为8kB.(BLCKSZ 的非默认 值改变最小值。) 此参数只能在服务器启动时设置。
cstore_buffers
openGauss支持了列存表,通过cstore_buffers,设置服务器使用的列存缓冲区的数量, 控制列存缓冲区大小
wal_buffers:
用于还未写入磁盘的 WAL 数据的共享内存量。在每次事务提交时,WAL 缓冲区的内容被写出 到磁盘。


------体系结构-进程结构
单进程多线程架构:
单进程:服务器进程 单个GaussMaster(postmaster)进程
多线程:后台工作线程:
多个后台辅助线程

进程结构-守护进程与服务线程
系统里面称为GaussMaster,源代码中称为postmaster
是管理整个数据库系统的操作,是数据库的总控进程,负责启动和关闭数据库。 如果后端线程挂掉,它负责重置系统。 postmaster 进程的主要作用:
1 数据库初始化时,为后端线程设置共享内存结构;
2 负责数据库的启、停 ;
3 监听客户端连接 ; 为每个客户端连接 fork 单独的 gaussdb(postgres) 服务线程 ;
4 管理与数据库运行相关的辅助线程 。
5 线程垃圾回收:当后端服务线程紧急退出或者内核dump时,清理后端线程;
6 错误报告

进程线程结构-守护进程与服务线程
工作机制:客户端连接数据库
当客户端调用接口库向数据库发起连接请求,守护进程 GaussMaster(postmaster )会 fork 单独的服务线程gaussdb(postgres)为 客户端提供服务,
此后将由 gaussdb (postgres)线程为客户端执行各种命令,客户端也不再需要 GaussMaster(postmaster ) 中转,
直接与服务线程gaussdb(postgres) 通信,直至客户端断开连接,
数据库使用基于消息的协议用于前端和后端(服务器和客户端)之间通信 。 通信都是通过一个消息流进行,消息的第一个字节标识消息类型,
后面跟着的四个字节声明消息 剩下部分的长度,该协议在 TCP/IP 和 Unix 域套接字上实现。 服务器作业之间通过信号和 共享内存通信,以保证并发访问时的数据完整性

线程结构-辅助线程
除了守护进程 GaussMaster(postmaster ) 和服务线程 gaussdb(postgres)外, openGuass 在运行期间还需要一些辅助线程才能工作,这些先程包括 :
1)BgWriter(background writer)
2)AutoVacLauncher(autovacuum launcher和worker)
3)WalWriter(WAL writer)
4)StatCollector(statistics collector)
5)SysLogger
6)PageWriter
7)AlarmChecker
8)aiocompleter
9)pgaudit

进程结构-辅助线程
10)LWLockMonitor
11)checkpointer
12)twophasecleaner
13)threadpool_listener
14) threadpool_worker
15) threadpool_controler
16)threadpool_group
17)threadpool_scheduler

-------体系结构--数据库物理结构
数据库软件目录结构
数据库的文件默认保存在initdb时创建的数据目录中。在数据目录中有很多类型、功 能不同的目录和文件,除了数据文件之外,
还有参数文件、控制文件、数据库运行 日志及预写日志等

数据库物理结构-物理文件
参数文件
控制文件
redo日志(WAL)
数据文件
日志文

数据库物理结构-其它配置文件- pg_hba.conf、 pg_ident.conf
l pg_hba.conf
这个是黑白名单的设置。文件里有详细的参数说明。 l pg_ident.conf openGuass User Name Maps Refer to the PostgreSQL documentation,
chapter "Client Authentication" for a complete description. l mot.conf 主要涉及REDO LOG, CHECKPOINT ,RECOVERY,STATISTICS,ERROR LOG,MEMORY,
GARBAGE COLLECTION, JIT

数据库物理结构-其它配置文件pg_hba.conf
客户端认证是由一个配置文件(通常名为pg_hba.conf并被存放在数据库集簇目录中)控制(HBA表示 基于主机的认证)。
在initdb初始化数据目录时,它会安装一个默认的pg_hba.conf文件。不过我们也可以 把认证配置文件放在其它地方; 参阅hba_file配置参数。
pg_hba.conf文件的常用格式是一组记录,每行一条。空白行将被忽略, #注释字符后面的任何文本也 被忽略。记录不能跨行。
一条记录由若干用空格 和/或制表符分隔的域组成。如果域值用双引号包围,那 么它可以包含空白。在数据库、用户或地址域中 引用一个关键字
(例如,all或replication)将使该词失去 其特殊 含义,并且只是匹配一个有该名字的数据库、用户或主机

数据库物理结构-控制文件-pg_control
作用:控制文件在数据库目录的global目录下。控制文件记录了数据库的重要信息。controlfile记录了数据库运行的一些信息,比如数据库id,是否open,wal的位置,
checkpoint的位置等。controlfile是很重要的文件,关系到数据库部署和调整。 位置:$PGDATA/global/pg_control

数据库物理结构-相关概念
空闲空间映射(FSM)
• 每一个表和索引(除了哈希索引)都有一个空闲空间映射(FSM)来保持对关系中可用空间的跟踪
• 伴随主关系数据被存储在一个独立的关系分支中,以关系的文件节点号加上一个_fsm后缀命名
• FSM文件是执行VACUUM操作时,或者是为了插入行而第一次查询FSM文件时才会创建
• openGuass使用了树形结构组织FSM文件
• FSM可以在数据插入时快速找到满足大小要求的空闲空间,从而复用空闲空间

见性映射(VM)
• 为了能加快VACUUM清理的速度和降低对系统I/O性能的影响,V8.4版本以后为每个数据文件加了 一个后缀为“__vm “的文件
• 每一个表都有一个可见性映射(VM)用来跟踪哪些页面只包含已知对所有活动事务可见的元组, 它也跟踪哪些页面只包含未被冻结的元组。
• 它随着主关系数据被存储在一个独立的关系分支中,以该关系的文件节点号加上一个_vm后缀命名
• 有了这个文件后,通过VACUUM命令扫描这个 文件时,如果发现VM文件中这个数据块上的位表 示该数据块没有需要清理的行,则会跳过对这个数据块的扫描,从而加快VACUUM清理的速度。






「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论