openGauss逻辑架构

openGauss逻辑架构

openGauss逻辑架构图在openGauss源码doc目录下,见下图。


openGauss-architecture.png

线程管理

列举了openGauss的后台线程。

  • 业务处理线程池
    业务处理线程(gaussdb)负责处理客户端请求的任务。高并发场景下,推荐使用线程池。
    -- 线程模式在高并发下,线程切换频繁会导致性能下降;所有线程共享内存,可能出现线程把内存写坏了,其他线程感知不到,出现错误。openGauss实现线程池通过线程利用来解决线程频繁切换的问题
    线程池的实现:
  1. 客户端向数据库发起连接请求,数据库主线程创建会话,将会话分发给线程组,加入到线程组的epoll列表中
  2. 线程组的监听线程负责监听epoll列表中的所有客户端连接
  3. 线程组监听线程监听到客户端任务请求,将会话分配给空闲的线程组worker线程。任务完成后,worker线程返还会话给监听线程,如无其他等待响应请求的会话,则worker线程标记为空闲状态
  4. 线程组worker线程在客户端断开连接后,关闭连接,并释放相关资源
  5. 每个线程组可以与一个NUMA节点绑定
  • 日志写线程
    日志写线程(WALwriter)将WAL buffer的内容刷新到磁盘并保存在WAL日志中,确保已提交的事务都被永久记录,不会丢失。
  • 数据页写线程
    数据页写线程包括:pagewriter和bgwriter。
    pagewriter线程负责将脏页写入双写文件,推进整个数据库的检查点。
    bgwriter线程主要将pagewriter转发过来的脏页落盘。
  • 检查点线程
    检查点线程(checkpointer),周期性发起数据库检查点。
    检查点(checkpoint)是一个事务日志中的点,所有数据文件都在该点被更新以反映日志中的信息,所有数据文件都将被刷新到磁盘。
  • 统计线程
    统计线程(statscollector)进行数据库统计信息收集,并将这些信息保存在pgstat.stat文件中。
  • 日志发送线程
    日志发送线程(WALsender),在主节点将预写日志发送到备节点。
  • 日志接收线程
    日志接收线程(WALreceiver),在备节点接收主节点发送过来的预写日志。
  • 清理线程
    清理线程(autovacuum)主要负责清理dead tuples,冻结事务id,清理不需要的clog部分,更新目标表的FSM、VM,更新部分统计信息。
  • 归档线程
    归档线程,数据库打开归档功能时启动的一个线程,此线程用于将数据库日志归档到指定的路径。
  • 管理线程
    管理线程可以看作是一个消息转发中心,在接收到请求后,启动相应的子线程完成相关操作。

通信管理

  • 通信协议处理
    openGauss数据库使用的前端后端协议,根据连接状态的不同,存在几种不同的子协议。
  • 控制命令信号处理
    信号是一种软件中断机制,openGauss数据库线程之间的通讯离不开这些信号。

SQL引擎

  • SQL解析器
    解析接收到的SQL命令,生成语法树。
  • SQL查询重写
    利用已有语句特征和关系代数运算生成更高效的等价语句。
  • SQL优化
    枚举不同的候选执行路径,根据代价估算,选择最优的执行路径。
  • SQL执行
    SQL执行器遍历执行计划树,根据计划树的具体逻辑完成操作。
  • DDL命令处理
    解析DDL命令语法,查询数据字典执行更新操作。
  • 存储过程解析
    存储过程是一组可以完成特定功能的SQL语句集合,经编译后存储在数据库中。对存储过程的解析在SQL引擎中完成。

存储引擎

  • 行存
    将表以行为单位存储在硬盘。
  • 列存
    列存的基本单位是CU(压缩单元),表中一列的一部分数据组成的压缩数据块。
  • 内存表
    基于全内存态的数据存储,为openGauss提供了高吞吐的实时数据处理分析能力和极低的事务处理延时。
  • CSN快照
    CSN:在openGauss内部,使用的一个全局自增的长整数作为逻辑的时间戳,它模拟数据库内部的时序。openGauss事务启动时会创建CSN快照。
  • 大内存缓冲管理
    与外部文件系统进行page页面交换并作缓冲,对内存共享页面的脏页进行LRU算法淘汰并刷盘。
  • 日志管理
    采用多个Log Writer线程并行写的机制。
  • 空闲空间管理
    清理数据库中的历史版本数据。
  • 索引管理
    主要管理索引结构,如索引创建,更新,删除等。
  • 并行日志回放
    将重做日志中已记录的数据文件变更操作重新应用到系统/页面中的过程,主要发生在故障恢复或者主备数据同步的备节点上。
  • 锁管理
    对事务并发访问过程中数据库对象的加锁操作进行管理。
  • 存储管理适配
    对存储介质层的管理,对不同的存储介质进行适配封装,对上层数据页面访问屏蔽底层真正存储系统的差异,例如管理HDD的使用、管理SSD的使用。
  • 增量检查点
    增量检查点会小批量的分阶段的滚筒式的去进行脏页刷盘,同时更新lsn信息,回收不需要的xlog日志。
  • NUMA 数据结构
    通过numa绑核,减少跨核内存访问的时延问题,提升CPU利用率,提升多线程间同步性能,xlog日志批量插入,热点数据分散处理。

安全管理

  • 身份管理
    openGauss使用了一系列的认证机制来实现,通过认证模块限制用户对数据库的访问,通过口令认证、证书认证等机制保障认证过程中的安全,通过黑白名单限制访问IP,通过数据库属性或用户属性限制连接数。
  • 访问控制
    基于角色的访问控制机制,控制数据库资源和对象的访问权限。
  • 通信加密
    openGauss提供了数据加密、数据脱敏、加密数据导入导出等机制保障数据的隐私安全。
  • 审计
    openGauss提供了基础审计能力,审计内容包括事件的发起者,事件的发生时间和事件的内容。

通用组件

  • 数据字典
    数据库的元数据,可以通过查询数据字典查看数据库的相关信息,如数据库对象的属性等。
  • 内存管理
    根据openGauss的配置参数,规划数据库各种内存的分配。
  • 数据类型
    数据库中数据的属性。
  • 内置函数
    数据库内定义的子程序,实现特定的功能需求。

工具

  • 客户端命令行工具
    gsql
  • 数据库实例控制工具
    实例初始化(gs_initdb),实例启停(gs_ctl) 等。
  • 物理备份/恢复工具
    gs_basebackup
  • 逻辑导入导出工具
    gs_dump,gs_dumpall
  • OM安装
    gs_om

客户端驱动

  • 命令行接口(CLI)
    gsql客户端
  • Java数据库连接(JDBC)
    openGauss提供了对JDBC 4.0特性的支持
  • 开放式数据库连接(ODBC)
    openGauss提供了对ODBC 3.5的支持
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容