openGauss——体系结构

news2024/9/20 14:48:32

一、体系结构概览

二、驱动程序

客户端程序使用驱动程序,向openGauss的后端管理线程GaussMaster发起连接请求。openGauss目前支持以下四种驱动程序:

  • JDBC,用于Java连接
  • ODBC,开放数据库互连
  • Libpq,C语言程序接口
  • Psycopg,python访问接口

三、数据库实例

Instance部分其实主要指的是数据库运行时的内存部分。当 GaussMaster 线程接收到客户端程序发送过来的服务请求后,会根据收到的信息会立即fork()一个子线程,这个子线程对请求进行身份验证成功后成为对应的后端业务处理子线程( gaussdb )。

四、内存缓冲区

共享内存:数据库启动时将分配一个共享内存区域
私有内存:后台服务进程除访问共享内存外,还会申请一些私有内存,以便暂存一些不需要全局存储的数据。

共享内存区:shared buffer

访问数据页时检查该页是否已在共享数据缓冲区中

如果是,直接从内存中读取数据,否则从磁盘加载数据页到缓冲区再进行访问。

共享内存区:cstore buffer

列存引擎将整个表按照不同列划分为若干个CU(Compression Unit,压缩单元),以CU为单位进行管理,适合于OLAP场景

共享内存区:wal buffer

wal buffer记录数据块的修改,由walwriter线程负责写到xlog,确保已提交的事务不会丢失。

共享内存区:MOT

私有内存区

私有内存:maintence_work_me

 

本地内存区:temp_buffer

本地内存区:work_mem

 

 五、主要进程和线程

openGauss主要线程共有五个,分别为图中的GaussMaster进程、pagewriter线程、bgwriter线程、walwriter线程、checkpoint线程。

 

GaussMaster主进程

客户端发送服务请求至GaussMaster
GaussMaster fork gaussdb
子线程(gaussdb)接收到客户端发送过来的查询(SQL)后,会调用openGauss的SQL引擎对SQL语句进行处理

pagewriter线程

openGuass使用bgwriter和pagewriter两类线程来负责脏页的磁盘写入工作。pagewrite负责数据库检查点LSN的推进,将脏页数据拷贝至双写区域并落盘。pgwriter的工作流程大致如下:

 

bgwriter线程

Bgwriter是一个Background Writer进程的简称,Bgwriter会定时将缓存中一些已经更改的数据(脏缓冲区)写入到磁盘。BgWriter也是postmaster通过fork创建的子进程。它的工作流程大致如下:

 walwriter线程

WAL Writer(Write-Ahead Logging Writer)线程是负责将WAL(Write-Ahead Logging)日志缓冲区中的数据写入到持久化存储介质(通常是磁盘)中的后台进程。这个后台进程的实现涉及以下几个主要步骤:

 

checkpoint线程

检查点(CHECKPOINT)是一个事务日志中的点,所有数据文件都在该点被更新以反映日志中的信息,所有数据文件都将被刷新到磁盘。checkpoint线程是周期性触发的,每次触发会将全部脏页面刷到磁盘中。

openGauss后台辅助线程

opengauss的后台辅助线程是一组特殊的线程,它们在数据库运行期间负责执行一些重要的后台任务,以提高数据库的性能和可靠性

openGauss物理结构

openGauss相关文件如上所示,分为Database相关文件,配置文件以及其他重要文件 

       

六、常见问题

        在进行VACUUM(可能并发),CREATE INDEX,ALTER TABLE ADD FOREINGN KEY性能下降可以调整参数:maintenance_work_mem
        如果数据库中的写入操作频繁,导致大量脏页积压在内存中,PageWriter 线程可能无法及时处理所有的脏页,导致性能下降。
        明确各配置文件的作用:postgresql.conf openGauss的配置文件、pg_hba.conf基于主机的接入认证配置文件,pg_ident.conf    客户端认证的配置文件,gaussdb.state主要保存数据库当前的状态信息。        

七、总结

  • openGauss主要可以使用JDBC、ODBC、Libpq、Psycopg驱动与应用连接
  • openGauss数据库实例是OpenGauss数据库系统中的一个独立运行环境,它包含了一组相关的数据库对象和数据,可以独立地进行管理和操作。
  • 共享内存区域:shared buffer、 cstore buffers 、WAL buffer、MOT
  • 数据库中可以通过内存参数work_mem、shared_buffers等进行调优,或者根据实际情况选择是否开启参数enable_memory_limit。
  • 本地内存区主要有work_mem、temp_buffers、maintenance_work_mem三个内存区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMvc 以配置类的形式代替xml文件

1、配置类 1.1、创建Mvc 项目之后创建 MyWebApplicationInitializer 类 实现接口 WebApplicationInitializer public class MyWebApplicationInitializer implements WebApplicationInitializer {Overridepublic void onStartup(ServletContext servletContext) throws Serv…

大数据-101 Spark Streaming DStream转换 窗口操作状态 跟踪操作 附带多个案例

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

windows安装pytorch精简版(英伟达GPU)

1 下载anaconda 官网:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择下载Anaconda-1.4.0-Windows-x86.exe 2 创建虚拟环境 以管理员身份打开Anaconda Prompt conda env list conda creat -n yolov8 python3.8 创建过程中有提示,填…

【图文详解】idea码云环境搭建

公众号:墨轩学习网-----B站:墨轩大楼 欢迎关注!!! 一、码云简介 目前开源中国的四大框架,即四条产品线:开源中国社区、众包、码云和招聘。 码云是开源中国推出的基于Git的代码托管服务&#…

鸿蒙HarmonyOS开发:创建新的Lite工程

当开始开发一个应用/服务时,首先需要根据工程创建向导,创建一个新的工程,工具会自动生成对应的代码和资源模板。 说明 在运行DevEco Studio工程时,建议每一个运行窗口有2GB以上的可用内存空间。 创建和配置新工程 DevEco Studio提…

如何应对市场变革的战略利器之敏捷企业架构实践全景指南

敏捷与企业架构融合的必然性 在全球化和数字化的双重推动下,市场竞争的激烈程度前所未有。企业必须迅速适应市场的变化,以在激烈的竞争中脱颖而出。然而,传统的企业架构往往侧重于长期战略规划,尽管它在维持企业的稳定性方面功不…

阿贝云评测:免费虚拟主机与免费云服务器的优势对比

阿贝云作为一家知名云服务提供商,以其稳定可靠的服务质量在业界享有盛誉。其中,其免费虚拟主机和免费云服务器备受用户喜爱。在这篇评测中,我们将对这两种服务进行详细对比。 首先,就免费虚拟主机而言,阿贝云提供的免费…

图片工具箱:一键批量加水印,守护创意,提升效率!

前言 你是否曾在处理海量图片时,被繁琐的步骤和漫长的等待时间折磨得苦不堪言?是否梦想过拥有一款神器,能让你的图片处理工作变得轻松愉快,从此告别加班的烦恼,迎接升职加薪的曙光?那么,让我向…

我主编的电子技术实验手册(18)——认识电感

本专栏是笔者主编教材(图0所示)的电子版,依托简易的元器件和仪表安排了30多个实验,主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】,精心设计的【实验步骤】,全面丰富的【思考习…

Golang学习笔记-Golang中的锁

同步原语和锁 Golang作为一个原生支持用户态的语言,当提到并发进程,多线程的时候,是离不开锁的,锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多个 Goroutine 在访问同一…

数据库的范式

作用是减小表的冗余。 防止插入删除更新异常。 第一、第二、第三、第四、BC范式。并且不是越高越好。 第一范式:1NF的定义为:符合1NF的关系中的每个属性都不可再分。表1所示的情况,就不符合1NF的要求。 …

终端Tabby介绍和使用

介绍一款开源的跨平台终端模拟器,支持系统:Windows、macOS、Linux 下载安装 下载链接:Release Alpha 164 Eugeny/tabby GitHub 下载适合自己环境的版本: 选项说明 【1】Enable analytics选项的作用主要是允许Tabby收集和分析…

【数据集】遥感影像建筑物变化检测对比实验常用数据集分享

整理了几个变化检测的对比试验中常用的变化检测数据集(建筑物) LEVIR-CD 下载链接: https://justchenhao.github.io/LEVIR/ 数据介绍: 用于建筑物变化检测数据集 分辨率:0.5m 尺寸:1024*1024 数量:637组&…

python-求和again(赛氪OJ)

[题目描述] 最近小理遇到了麻烦的问题,你能帮帮他吗? 题目是这样的:计算 SUM(n)123...10^n 。输入格式: 输入包含多组数据,每组数据一行,包括一个整数 n 。当 n−1 时输入终止。输出格式: 对于每…

经济学有哪些分支,分别研究什么?

经济学的分支众多,每个分支都专注于研究经济领域的不同方面。 以下是一些主要经济学分支及其研究内容的概述: 微观经济学: 研究个体经济单位(如家庭、企业)的决策过程以及这些决策如何影响资源分配、市场结构和价格形…

viewBinding的使用(android studio)

引入 在开发安卓软件的时候,我们会大量的使用点击事件。通常情况下,我们是这样做的:将在xml文件里把目标组件添加id属性,如下: 然后在activity里面通过findViewById(R.id.back) 得到一个对象,通过对象调用…

BAT32G137国产项目通用第十节:FreeRTOS 计数信号量

主题:计数信号量可以用于资源管理,允许多个任务获取信号量访问共享资源,但会限制任 务的最大数目。访问的任务数达到可支持的最大数目时,会阻塞其他试图获取该信号量的 任务,直到有任务释放了信号量。 1.常用信号量函数接口 ①创建计数信号量 xSemaphoreCreateCounting()…

AMEYA360:ROHM发售4款非常适用于工业电源的SOP封装通用AC-DC控制器IC

全球知名半导体制造商ROHM(总部位于日本京都市)开发出PWM控制方式*1FET外置型通用控制器IC,非常适用于工业设备的AC-DC电源。目前已有支持各种功率晶体管的4款新产品投入量产,包括低耐压MOSFET驱动用的“BD28C55FJ-LB”、中高耐压MOSFET驱动用的“BD28C5…

树莓派制成的 — 带运动检测和摄像头的安防系统

自动布防/撤防、运动检测、带图片的移动通知 项目所用物品 硬件组件 Raspberry Pi 1 Model A 一个:任何支持摄像头模块的 Raspberry Pi 均可 Raspberry Pi 摄像头模块一个 USB WLAN/WiFi适配器一个:必须支持监控模式,推荐使用RT5370 M…

NGINX高性能web服务器

1.web服务器介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版…