openGuass训练营学习笔记-闫伟

网友投稿 1737 2022-10-14

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

openGuass训练营学习笔记-闫伟

openGuass训练营学习笔记

1 openGuass的发展历程

​ 华为数据库最早诞生于运营商的需求,最初版本名称为GMDB,后来基于PostgreSQL-XC进行整体改造,再配合自研的存储引擎,发布了FusionInsight LibrA(天枰座),也就是大家听过较多的MPPDB,目前官网上还能找到一些FusionInsight LibrA的资料。

​ 同时在2015年,华为成立了另一项目组,纯自研了一款与Oracle非常相似的数据库,引擎名称为Zenith。在2015-2016年左右,华为基于MySQL研发了一款云原生数据库TaurusDB(这个时间段貌似有三款并行的数据库产品)。

​ 2018年左右,华为开始进行数据库整合,对数据库产品名定义为GaussDB。针对不同的场景,分为GaussDB 100(简单OLTP场景,单节点架构,基于Zenith引擎)、GaussDB 200(OLAP及数仓场景,MPPDB架构,基于Libra引擎)、GaussDB 300(HTAP场景,分布式架构,貌似是基于PostgreSQL-XL改造)三个对外的产品,在2019年又进行了再次整合,将GaussDB 100、GaussDB 300合并,产品名称变为GaussDB T(OLTP、HTAP场景)、GaussDB A(OLAP场景,原Gauss 200)。

​ 之后又基于华为云整体策略,Zenith内核貌似是弃用了,启用原Libra内核(内核名称改成了轩辕),GaussDB A变成了目前的华为云上DWS服务,GaussDB T变成了GaussDB for openGauss服务,同时也将openGauss开源。由于openGauss是基于GMDB发展而来(也就是基于PostgreSQL的产品路线),所以命令行和元数据库的信息看起来还是PostgreSQL,不过底层的存储引擎与PostgreSQL有不少改动。

6月30日,openGauss正式亮相

2 openGauss的体系架构讲解

​ openGauss是单机系统,在这样的系统架构中,业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并发,实现对数据处理的快速响应。同时通过日志复制可以把数据复制到备机,提供数据的高可靠和读扩展。

openGauss是支持主备部署

重要事情说三遍 ,openguass是线程线程线程,以PG为基础研发的高性能,高安全,高可靠的企业级数据库。

2.1支持的存储引擎:

复合应用场景行存储,支持业务数据频繁更新场景。列存储,支持业务数据追加和分析场景。内存表,支持高吞吐,低时延,极高性能场景

2.2 常见的部署方式

单机单机指的是只有一个数据库实例。双机双机指的是系统中存在主备数据库实例,主实例支持读写,备实例支持只读。一主多备一主多备指的是在系统存在一个主机,多个备机。最多支持8个备机。支持两地三中心部署方式

2.3 应用的场景

交易型应用大并发、大数据量、以联机事务处理为主的交易型应用,如电商、金融、O2O、电信CRM/计费等,应用可按需选择不同的主备部署模式。物联网数据在工业监控和远程控制、智慧城市的延展、智能家居、车联网等物联网场景下,传感监控设备多,采样率高,数据存储为追加模型,操作和分析并重的场景

2.4 总体介绍

(1)openGauss的运行时模型是采用线程池模型,在高并发场景下连接间切换代价小,效率高。这点与传统PG服务器使用的每个并发连接对应一个独立进程的进程模型不同。所以在多核支持和扩展方面openGauss有其优势。

(2)事务处理方面上,openGauss通过对NUMA引擎的优化,一定程度上解决了“五把大锁”的问题。同时,采用增量CheckPoint机制,能够降低CheckPoint对性能的影响。

注:“五把大锁”是指openGauss中的“Clog、WALInsert、WALWrite、ProcArray、XidGen”这五种锁,这些锁是用来保护数据库服务器内核的数据控制结构,在一定程度上是性能问题的瓶颈。通过对NUMA架构的深度优化和运用,优化了openGauss内部多核间并发问题。

(3)在数据存储方面,支持:行存储、列式存储、MOT等

(4)SQL引擎中引入AI引擎

2.5 openGauss SQL命令的处理流程

大致分为四个部分:SQL解析、查询优化、查询执行、存储引擎

SQL解析是逻辑优化,查询优化重写是物理优化。

在SQL解析方面:

(1) 词法分析:就是分析sql语句中的某些词,确定它的具体含义,如:select、+等。(2) 语法分析:有点类似于英语中的语法规则的样子,sql语句也有一定的语法规则,语法分析就是判断sql是否符合sql语法规则,会生成对应的语法树。(3) 语义分析:这个不同于词法分析,语义分析它是将语法分析中得到的语法书进行解析,检查的不再是关键词、运算符之类的,它检查的是列名、表名、函数名等数据。

在查询重写方面:

通过查询优化器提高sql执行性能。那为什么需要查询优化器呢?原因是因为比起人工优化查询优化器计算力更强大速度更快。SQL执行流程中openGauss数据库优化器默认使用的优化器就是基于代价的优化器,即CBO。CBO就是对执行路径进行代价估算,选择代价最低的执行路径,通过统计信息进行行数估算,行数估算是cost评估的基础,进而推算出算子的代价,依据若干的算子,路径的搜索,最后转成为执行树给执行器来执行。

在查询执行方面:

其逻辑控制主要是围绕着关系运算来实现的,包含以下几个算子:扫描算子、控制算子、物化算子、连接算子。

最后通过数据的读取/处理,分配事务,产生日志,进行主备的复制,最终落地到存储引擎中。

2.6 执行引擎

扫描算子( Scan Plan Node)扫描节点负责从底层数据来源抽取数据, 数据来源可能是来自文件系统, 也可能来自网络。 一般而言扫描节点都位于执行树的叶子节点, 作为执行的数据输入来源, 典型代表SeqScan、 IndexScan、SubQueryScan关键特征: 输入数据、 叶子节点、 表达式过滤控制算子( Control Plan Node)控制算子一般不映射代数运算符, 是为了执行器完成一些特殊的流程引入的算子, 例如Limit、 RecursiveUnion、 Union关键特征: 用于控制数据流程物化算子( Materialize Plan Node)物化算子一般指算法要求, 在做算子逻辑处理的时候, 要求把下层的数据进行缓存处理, 因为对于下层算子返回的数据量不可提前预知, 因此需要在算法上考虑数据无法全部放置到内存的情况, 例如Agg、 Sort关键特征: 需要扫描所有数据之后才返回连接算子( Join Plan Node)这类算子是为了应对数据库中最常见的关联操作, 根据处理算法和数据输入源不同分成MergeJoin,SortJoin,HashJoin。关键特征: 多个输入

2.7 存储引擎

openGauss存储引擎是可插拔、自组装的,支持多个存储引擎来满足不同场景的业务诉求,目前支持行存储引擎、列存储引擎和内存引擎。

1)行存储引擎。主要面向OLTP(Online Transaction Processing,在线交易处理)场景设计,例如订货发货,银行交易系统。

(2)列存储引擎。主要面向OLAP(Online Analytical Processing,联机分析处理)场景设计,例如数据统计报表分析。

(3)内存引擎。主要面向极致性能场景设计,例如银行风控场景。

主要包含的管理器有事务管理器,锁管理器,日志管理器,缓冲区管理器,存储管理器,文件管理器。

2.8 openGauss NUMA 内核数据结构

主要的特点:

1、 线程绑核, 避免线程在核间偏移。2、 NUMA化数据结构改造, 减少跨核访问。3、 数据分区, 减少线程访问冲突。4、 算法调整, 减少单点瓶颈。5、 借助ARM原子指令, 减少计算开销。

2.8 MOT原理和优势

内存表:

• 基于事务的行存储引擎,与传统磁盘引擎并排的基于

磁盘的存储引擎

• 针对多核和大内存服务器优化:近线性可扩展性

• 符合ACID要求+严格可持久化+高可用性

• 完全集成到openGauss中,支持绝大部分SQL特性

(存储过程、函数…)

• 支持x86和ARM64鲲鹏

• 优点:

– 高吞吐量:3倍于磁盘表,6倍于PG 12.2

– 低延迟:事务加速3倍至5.5倍

– 严格一致性保障的HA和RTO

关键技术:

• 内存优化数据结构

• 无锁事务管理

• 无锁索引

• NUMA感知,事务本地内存

• 高效、可靠的持久化

• 查询本机编译(JIT)

优势1: 性能高、 CPU利用率高、 延迟低① 高度优化的全内存免锁存储引擎② 基于全内存优化实现的免锁索引③ 高度优化的并发访问控制④ 针对NUMA优化的内存管理, 预缓存对象池⑤ 针对NUMA高度优化的组提交

优势2: 生态好、 兼容好, 功能完整

① 有效利用openGauss现有的查询引擎,兼容PG生态② 兼容PG原生FDW和索引, SQL标准兼容度高, 功能完整③ 除PG原生FDW之外, 还支持存储过程、用户定义函数等功能

2.9 并发的解决

1)大并发问题解决方案

连接池是在客户端配置。应用通过连接池于服务器间进行连接,连接复用,避免连接的频繁创建核销毁。

线程池在数据库服务器上配置,控制数据库活动线程数量,线程复用,对系统业务起到流量控制作用。

l在高并发场景下,可以将连接池与线程池结合使用

(2)线程池实现原理

主线程有线程会话控制监听,用来分配会话,把会话分配给线程池组

每个线程池组有一个监听用来监听客户连接,并分配给具体线程

l每个线程池组可以和NUMA节点绑定

2.10 双机复制

双机交互协商:1、 程序版本IDENTIFY_VERSION2、 角色协商IDENTIFY_MODE3、 数据协商IDENTIFY_SYSTEM4、 日志LSN位置( 时间线, LSN)

主备双机支持同步和异步复制,应用可以根据业务场景选择合适的部署方式。同步复制保证数据的高可靠,一般需要一主两备部署,同时对性能有一定影响。异步复制一主一备部署即可,对性能影响小,但异常时可能存在数据丢失。openGauss支持页面损坏的自动修复,在主机页面发生损坏时,能够自动从备机修复损坏页面。openGauss支持备机并行日志恢复,尽量降低主机宕机时业务不可用的时间。

2.11 加密

处理查询时:

1、 三层秘钥管理机制: 根秘钥, 主秘钥和列加密秘钥。2、 客户端完成数据的加密和解密,服务器完成密态数据计算。3、 不需要加密的字段仍然是明文处理。

2.12 AI

AI4DB

AI IN DBMS

AI IN Kernel

DB4AI

AI IN SQL

全应用场景(SQL/DBMS/Kernel)、全用户(User/DBA/Dev)、全技术栈(AI框架/AI算法/机器学习/深度学习)、异构计算(鲲鹏/X86/GPU)

上一篇:HBase实战 | 从MySQL到HBase:数据存储方案转型的演进
下一篇:【运维技术】redis(一主两从三哨兵模式搭建)记录
相关文章

 发表评论

暂时没有评论,来抢沙发吧~