diff --git a/content/zh/post/whx/openGauss1.md b/content/zh/post/whx/openGauss1.md new file mode 100644 index 0000000000000000000000000000000000000000..02e7349878cab5e8a04cf15dd2463ebe91dec678 --- /dev/null +++ b/content/zh/post/whx/openGauss1.md @@ -0,0 +1,33 @@ ++++ +title = "openGauss社区入门(openGauss高性能学习小结)" +date = "2022-08-20" +tags = ["openGauss社区开发入门"] +archives = "2020-08" +author = "whx" +summary = "openGauss社区开发入门" +img = "" +times = "10:00" ++++ +## 1.1 CBO优化器 +openGauss优化器是基于代价的优化。在CBO优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、distinct值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/首元组返回代价最小的执行方式进行执行。 +## 1.2 支持LLVM +openGauss的LLVM(Low Level Virtual Machine)技术,提供了查询动态编译执行的能力。openGauss借助LLVM提供的库函数,依据查询执行计划树,将原本在执行器阶段才会确定查询实际执行路径的过程提前到执行初始化阶段,从而规避原本查询执行时候伴随的函数调用、逻辑条件分支判断以及大量的数据读取等问题,以达到提升查询性能的目的。 +## 1.3 向量化引擎 +openGauss提供向量化引擎,通常用在OLAP数据仓库类系统,因为分析型系统通常都是数据处理密集型负载,基本上都是采用顺序方式来访问表中大部分的数据,然后进行计算,最后将计算结果输出给终端用户。 +## 1.4 行列混合存储 +openGauss 支持行存储和列存储两种存储模型,用户可以根据应用场景,建表的时候选择行存储还是列存储表。一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不很多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。 +## 1.5 自适应压缩 +数据压缩是当前数据库采用的主要技术。数据类型不同,适用于它的压缩算法不同。对于相同类型的数据,其数据特征不同,采用不同的压缩算法达到的效果也不相同。自适应压缩正是从数据类型和数据特征出发,采用相应的压缩算法,实现了良好的压缩比、快速的入库性能以及良好的查询性能。 +## 1.6 SQL by pass +在典型的OLTP场景中,简单查询占了很大一部分比例。这种查询的特征是只涉及单表和简单表达式的查询,因此为了加速这类查询,提出了SQL-BY-PASS框架,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加速简单查询的执行速度。 +## 1.7 鲲鹏NUMA架构优化 +鲲鹏NUMA架构优化,主要面向鲲鹏处理器架构特点、ARMv8指令集等,进行相应的系统优化,涉及到操作系统、软件架构、锁并发、日志、原子操作、Cache访问等一系列的多层次优化,从而大幅提升了openGauss数据库在鲲鹏平台上的处理性能。 +## 1.8 支持线程池高并发 +线程池技术的整体设计思想是线程资源池化、并且在不同连接之间复用。系统在启动之后会根据当前核数或者用户配置启动固定一批数量的工作线程,一个工作线程会服务一到多个连接session,这样把session和thread进行了解耦。因为工作线程数是固定的,因此在高并发下不会导致线程的频繁切换,而由数据库层来进行session的调度管理。 +## 1.9 SMP并行执行 +openGauss的SMP并行技术是一种利用计算机多核CPU架构来实现多线程并行计算,以充分利用CPU资源来提高查询性能的技术。在复杂查询场景中,单个查询的执行较长,系统并发度低,通过SMP并行执行技术实现算子级的并行,能够有效减少查询执行时间,提升查询性能及资源利用率。SMP并行技术的整体实现思想是对于能够并行的查询算子,将数据分片,启动若干个工作线程分别计算,最后将结果汇总,返回前端。SMP并行执行增加数据交互算子(Stream),实现多个工作线程之间的数据交互,确保查询的正确性,完成整体的查询。 +## 1.10 Xlog no Lock Flush +对WalInsertLock进行优化,利用LSN(Log Sequence Number)及LRC(Log RecordCount)记录了每个backend的拷贝进度,取消WalInsertLock机制。在backend将日志拷贝至WalBuffer时,不用对WalInsertLock进行争抢,可直接进行日志拷贝操作。并利用专用的WalWriter写日志线程,不需要backend线程自身来保证xlog的Flush。 +## 1.11 Parallel Page-based Redo For Ustore +通过利用Prefix和suffix来减少update WAL log的写入,通过把回放线程分多个类型来解决Ustore DML WAL大多都是多页面回放问题;同时把Ustore的数据页面回放按照blkno去分发。 + diff --git a/content/zh/post/whx/openGauss2.md b/content/zh/post/whx/openGauss2.md new file mode 100644 index 0000000000000000000000000000000000000000..fec0a225046c18a7eba874734b326ae9f9307733 --- /dev/null +++ b/content/zh/post/whx/openGauss2.md @@ -0,0 +1,47 @@ ++++ +title = "openGauss社区入门(openGauss高可用学习小结)" +date = "2022-08-20" +tags = ["openGauss社区开发入门"] +archives = "2022-08" +author = "whx" +summary = "openGauss社区开发入门" +img = "" +times = "10:00" ++++ +## 1.1 主备机 +为了保证故障的可恢复,需要将数据写多份,设置主备多个副本,通过日志进行数据同步,可以实现节点故障、停止后重启等情况下,openGauss能够保证故障之前的数据无丢失,满足ACID特性。 +主备环境可以支持主备从和一主多备两种模式。主备从模式下,备机需要重做日志,可以升主,而从备只能接收日志,不可以升主。而在一主多备模式下,所有的备机都需要重做日志,都可以升主。主备从主要用于大数据分析类型的OLAP系统,能够节省 一定的存储资源。而一主多备提供更高的容灾能力,更加适合于大批量事务处理的 OLTP系统。 +主备之间可以通过switchover进行角色切换,主机故障后可以通过failover对备机进行升主。 +## 1.2 逻辑复制 +openGauss 提供逻辑解码功能,将物理日志反解析为逻辑日志。通过DRS等逻辑复制 工具将逻辑日志转化为SQL语句,到对端数据库回放,达到异构数据库同步数据的功 能。目前支持openGauss数据库与MySQL数据库、Oracle数据库之间的单向、双向逻辑复制。 +逻辑复制可以为数据库数据实时迁移、双库双活、支持滚动升级提供解决方案。 +DN通过物理日志反解析为逻辑日志,DRS等逻辑复制工具从DN抽取逻辑日志转换为 sql语句,到对端数据库(MySQL)回放。逻辑复制工具同时从MySQL数据库抽取逻辑日志,反解析为SQL语句之后回放到openGauss,达到异构数据库同步数据的目的。 +## 1.3 在线节点替换 +数据库内某节点出现硬件故障造成节点不可用或者实例状态不正常,当数据库没有加 锁,通过节点替换或修复故障实例来恢复数据库的过程中,支持用户DML操作,有限 场景支持用户DDL操作。 +## 1.4 逻辑备份 +openGauss 提供逻辑备份能力,可以将用户表的数据以通用的text或者csv格式备份到 本地磁盘文件中,并在同构/异构数据库中恢复该用户表的数据。 +通过逻辑备份特性,可以达成以下目的: +● 将用户数据备份到可靠性更高的存储介质中,提升用户表数据的可靠性。 +● 通过采用通用的数据格式,支持跨版本恢复和异构恢复。 +● 可以用于冷数据的归档。 +## 1.5 物理备份 +openGauss 1.1.0 提供物理备份能力,可以将整个数据库的数据以数据库内部格式备份到本地磁盘文件、OBS对象、NBU对象或爱数对象中,并在同构数据库中恢复整个数据库的数据。在基础之上,还提供压缩、流控、断点续备等高阶功能。 +物理备份主要分为全量备份和增量备份,区别如下:全量备份包含备份时刻点上数据库的全量数据,耗时时间长(和数据库数据总量成正比),自身即可恢复出完整的数据库;增量备份只包含从指定时刻点之后的增量修改数据,耗时时间短(和增量数据成正比,和数据总量无关),但是必须要和全量备份数据一起才能恢复出完整的数据 +库。 +## 1.6 作业失败自动重试 +批处理作业中,在由于网络异常、锁冲突等出错情况下能够保证作业自动重试。 +openGauss 数据库提供作业重试机制:gsql Retry。 +## 1.7 极致RTO +极致RTO开关开启后,xlog日志回放建立多级流水线,提高并发度,提升日志回放速度。 +● 支撑数据库主机重启后快速恢复的场景。 +● 支撑主机与同步备机通过日志同步,加速备机回放的场景。 +## 1.8 级联备机 +本特性主要基于当前一主多备的架构,在此基础上,支持级联备机连接备机。 +主机通过发送日志给备机实现同步,备机通过发送日志给级联备实现同步,其中主备之间日志同步可配置为同步或异步,备机与级联备之间只能以异步方式。 +## 1.9 延时回放 +支持通过配置GUC参数recovery_min_apply_delay设定延时时间,使某个备机延时一段时间回放来自主机的事务日志。 +## 1.10 备机增加删除 +openGauss支持从单机或者一主多备最多扩容至一主八备,支持新增级联备机,支持 在集群中存在故障备机的情况下新增备节点;支持从一主多备删除至单节点,支持备 机故障的情况下将其删除。 +支持在线新增和删除备节点,即可以在不影响主机业务的情况下进行新增和删除备节点。 + +