【华为智能基座】Gauss数据库学习记录(一)

【华为智能基座】Gauss数据库学习记录(一),第1张

目录
  • 引言
  • 什么是openGauss呢?
    • 产品特点
    • 软件架构
    • 典型组网
  • openGauss运行环境
    • 支持的硬件平台
    • 支持的 *** 作系统
  • openGauss基本功能
  • openGauss企业级增强特性
    • 数据分区:
    • 向量化执行和行列混合引擎:
    • 高可靠事务处理:
    • 高并发&高性能:
    • SQL自诊断:
    • 内存表:
    • 主备双机:
  • openGauss系统框架
    • 数据库逻辑结构
    • 数据库物理结构

引言

近期,报名参加了校内与华为合作的“智能基座”系列课程之一的“数据库”课程学习,通过这段时间的了解,感觉与openGauss相关的资料不多,所以,想通过写些博客来记录自己的学习过程,并分享一些openGauss的知识和一些个人在实 *** 过程中遇到的报错以及解决方案给大家。
本篇主要是向大家介绍openGauss的概述等理论知识。

什么是openGauss呢?

openGauss是一款高性能、高安全、高可靠的企业级开源关系型数据库。采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。同时,openGauss还是一个单机数据库,具备关系型数据库的基本功能,以及企业特性的增强功能。

产品特点

openGauss相比其他开源数据库主要有复合应用场景、高性能和高可用等产品特点。

软件架构

openGauss主要包含了openGauss服务器,客户端驱动,OM等模块。

  • openGauss主备(Datanode):负责存储业务数据(支持行存、列存、内存表存储)、执行数据查询任务以及向客户端驱动返回执行结果。
  • 客户端驱动(Client Driver):负责接收来自应用的访问请求,并向应用返回执行结果;负责与openGauss实例的通信,下发SQL在openGauss实例上执行,并接收命令执行结果。
  • OM:运维管理模块(Operation Manager)。提供集群日常运维、配置管理的管理接口、工具。
  • Storage:服务器的本地存储资源,持久化存储数据。
  • openGauss是单机系统,在这样的系统架构中,业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并发,实现对数据处理的快速响应。同时通过日志复制可以把数据复制到备机,提供数据的高可靠和读扩展。
  • openGauss实例包含主、备两种类型,支持一主多备。建议将主、备openGauss实例分散部署在不同的物理节点中。
典型组网

为了保证整个应用数据的安全性,建议将openGauss的典型组网划分为两个独立网络:前端业务网络和数据管理存储网络。

  • 前端业务网络:外部客户端通过此网络访问openGauss数据库
  • 数据库管理存储网络:DBA通过此网络调用OM脚本管理和维护openGauss实例。同时,用于openGauss主备通信组网。数据库管理存储网络也是应用执行系统监控的网络。

    该典型组网有如下优点:
  • 业务网络与数据库管理存储网络的隔离,有效保护了后端存储数据的安全。
  • 业务网络和数据库管理存储网络的隔离,可以防止攻击者通过互联网试图对数据库服务器进行管理 *** 作,增加了系统安全性。
    网络独占性及1:1的带宽收敛比是openGauss数据库网络性能的基本要求。因此,在生产系统中,对后端存储网络,需满足独占性及至少1:1收敛比的要求。

    例如,上图中,其本质是Fattree组网方式。为实现收敛比1:1,交换网络层级每提高一层,带宽增加一倍。图中每根加粗连接线代表80 GE带宽,即8台物理机带宽上限之和。接入层每单台交换机下行带宽160 GE,上行带宽160 GE,收敛比1:1;汇聚层每单台交换机接入带宽320 GE。
openGauss运行环境

支持的硬件平台

openGauss支持运行在鲲鹏服务器和通用的x86服务器上:

  • 支持鲲鹏服务器和基于x86_64的通用PC服务器。
  • 支持本地存储(SATA、SAS、SSD)。
  • 支持千兆、万兆Ethernet网络。
支持的 *** 作系统
  • openEuler release 20.03 (LTS) on ARM。推荐采用此 *** 作系统。
  • CentOS 7.6 on X86-64。
openGauss基本功能
  1. 标准SQL支持:支持标准的SQL92/SQL99/SQL2003/SQL2011规范,支持GBK和UTF-8字符集,支持SQL标准函数与分析函数,支持存储过程。
  2. 数据库存储管理功能:支持表空间,可以把不同表规划到不同的存储位置。
  3. 提供主备双机:事务支持ACID特性、单节点故障恢复、双机数据同步,双机故障切换等。
  4. 应用程序接口:支持标准JDBC 4.0的特性、ODBC 3.5特性。
  5. 管理工具:提供安装部署工具、实例启停工具、备份恢复工具。
  6. 安全管理:支持SSL安全网络连接、用户权限管理、密码管理、安全审计等功能,保证数据库在管理层、应用层、系统层和网络层的安全性。
openGauss企业级增强特性

数据分区:

在openGauss中,数据分区是对数据集按照用户指定的策略对数据集做进一步拆分的水平分表,将表按照指定范围划分为多个数据互不重叠的部分(Partition)。同时,还支持范围分区(Range Partitioning)功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。
数据分区带来的好处在于:

  • 改善可管理性:利用分区,可以将表和索引划分为一些更小、更易管理的单元。这样,数据库管理员在进行数据管理时就能采取“分而治之”的方法。 有了分区,维护 *** 作可以专门针对表的特定部分执行。
  • 可提升删除 *** 作的性能:删除数据时可以删除整个分区,与分别删除每行相比,这种 *** 作非常高效和快速。删除分区表与删除普通表的语法一致,都是通过DROP TABLE语法进行删除。
  • 改善查询性能:通过限制要检查或 *** 作的数据数量,分区可带来许多性能优势。
  • 分区剪枝:分区剪枝(也称为分区消除)是openGauss在执行时过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级。
  • 智能化分区联接:通过使用一种称为智能化分区联接的技术,分区还可以改善多表联接的性能。当将两个表联接在一起,并且至少其中一个表使用联接键进行分区时,可以应用智能化分区联接。
向量化执行和行列混合引擎:

向量化执行技术和列存储引擎可以极大的提升性能和减少存储空间。

  • 向量化执行
    • 标准的迭代器模型如右图所示。控制流向下、数据流向上、上层驱动下层、一次一元组(下层节点每次只返回一条元组给上层节点)。
    • 而向量化执行相对于传统的执行模式改变是对于一次一元组的模型修改为一次一批元组,配合列存特性,可以带来巨大的性能提升。
  • 行列混合存储引擎
    • openGauss支持行存储和列存储两种存储模型,用户可以根据应用场景,建表的时候选择行存储还是列存储表。
    • 一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不很多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。
    • 当前列存储引擎有以下约束:
      • DDL仅支持CREATE/DROP/TRUNCATE TABLE的功能;
      • 兼容分区的DDL管理功能(如: ADD/DROP/MERGE PARTITION,EXCHANGE功能);
      • 支持CREATE TABLE LIKE语法;
      • 支持ALTER TABLE的部分语法;
      • 其他功能都不支持;
      • DML支持UPDATE/COPY/BULKLOAD/DELETE;
      • 支持Psort index、B-tree index和GIN index。
  • 列存下的数据压缩
    • 对于非活跃的早期数据可以通过压缩来减少空间占用,降低采购和运维成本。
    • openGauss列存储压缩支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等压缩算法,且能够根据数据特征自适应的选择压缩算法,平均压缩比7:1。压缩数据可直接访问,对业务透明,极大缩短历史数据访问的准备时间。
高可靠事务处理:
  • openGauss提供事务管理功能,保证事务的ACID特性。
  • 为了在主节点出现故障时尽可能地不中断服务,openGauss提供了主备双机高可靠机制。通过保护关键用户程序对外不间断提供服务,把因为硬件、软件和人为造成的故障对业务的影响程度降到最低,以保证业务的持续性。
  • 故障恢复
    • 支持节点故障可恢复及恢复后满足ACID特性。节点故障、停止后重启等情况下,openGauss能够保证故障之前的数据无丢失,满足ACID特性。
  • 事务管理:
    • 支持事务块,用户可以通过start transaction命令显式启动一个事务块。
    • 支持单语句事务,用户不显式启动事务,则单条语句就是一个事务。
高并发&高性能:

openGauss通过服务器端的线程池,可以支持1W并发链接。通过NUMA化内核数据结构,支持线程亲核性处理,可以支持百万级tpmC。通过页面的高效冷热淘汰,支持T级别大内存缓冲区管理。通过CSN快照,去除快照瓶颈,实现多版本访问,读写互不阻塞。通过增量检查点,避免全页写导致的性能波动,实现业务性能平稳运行。

SQL自诊断:
  • 通过执行查询对应的EXPLAIN ANALYZE,获得对应执行计划,是一种十分有效的定位查询性能问题的方法。但是这种方法需要修改业务逻辑,同时输出的日志量大,问题定位的效率依赖于人员的经验。SQL自诊断为用户提供了另一种更为高效易用的性能问题定位方法。
  • 在执行作业之前,配置GUC参数resource_track_level和resource_track_cost,然后运行用户作业,就可以通过查看相关系统视图,获得执行完成的相关查询作业可能存在的性能问题。
  • SQL自诊断可以在不影响用户作业,不修改业务逻辑的情况下,诊断出相对准确的性能问题,为用户提供更为易用的性能调优参考。
内存表:

内存表(MOT)是一个基于事务性行存储(rowstore)的存储引擎,该引擎针对多核和大内存服务器进行了优化。MOT是openGauss数据库最先进的商用级特性之一(beta发布),可为事务性负载提供更高的性能。MOT完全支持原子性、一致性、隔离性、持久性(ACID),并包括严格的耐久性和高可用性支持。
用户可以在关键任务、性能敏感的在线事务处理(OLTP)中使用MOT,以实现高性能、高吞吐、低且可预测的时延以及多路/多核处理器的高利用率。MOT特别适合用于多路/多核处理器的现代服务器。
例如,基于鲲鹏CPU的华为Taishan服务器(例如Taishan 2280或Taishan 2480服务器,最多256个核心)和x86的服务器(例如Taishan 2288服务器)。

  • 内存表把数据全部缓存在内存中,所有数据访问实现免锁并发,实现数据处理的极致性能,满足实时性严苛要求场景。
  • 内存表的配置参数
参数说明
enable_codegen_mot设置是否启用原生 LLVM Lite 执行简单查询。如果当前平台上不支持原生LLVM,那么将使用伪LLVM。
force_pseudo_codegen_mot设置是否强制伪LLVM Lite执行简单查询,即使当前平台上支持原生LLVM。
enable_codegen_mot_print设置是否打印生成函数的 IR 字节码(如果使用伪 LLVM,则打印伪 IR 字节码)。
codegen_mot_limit设置全局缓存计划源的数量限制,以及每个会话的克隆计划。
mot_allow_index_on_nullable_column设置是否允许在内存表nullable列上创建索引。
mot_config_file指定MOT的主配置文件。

主备双机:
  • 主备双机支持同步和异步复制,应用可以根据业务场景选择合适的部署方式。
  • openGauss支持页面损坏的自动修复,在主机页面发生损坏时,能够自动从备机修复损坏页面。openGauss支持备机并行日志恢复,尽量降低主机宕机时业务不可用的时间。
  • 同时,如果按照主备模式部署,并打开备机可读功能后,备机将能够提供读 *** 作,但不支持写 *** 作(如建表、插入数据、删除数据等),从而缓解主机上的压力。

    同步复制保证数据的高可靠,一般需要一主两备部署,同时对性能有一定影响。
    异步复制一主一备部署即可,对性能影响小,但异常时可能存在数据丢失。
openGauss系统框架

数据库逻辑结构
  • openGauss的数据库节点负责存储数据,其存储介质也是磁盘,本节主要从逻辑视角介绍数据库节点都有哪些对象,以及这些对象之间的关系。
  • 数据库逻辑结构如下图:
    • Tablespace:表空间,是一个目录,可以存在多个,里面存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。
    • Database:数据库,用于管理各类数据对象,各数据库间相互隔离。数据库管理的对象可分布在多个Tablespace上。
    • Datafile Segment:数据文件,通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。
    • Table:表,每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。
    • Block:数据块,是数据库管理的基本单位,默认大小为8KB。
数据库物理结构
  • 并行回放,文件级并发执行, 支持备机可读
  • 极致RTO, 回放粒度更细, 支持页面级并行, 不支持备机可读
  • 数据库的文件默认保存在initdb时创建的数据目录中。在数据目录中有很多类型、功能不同的目录和文件,除了数据文件之外,还有参数文件、控制文件、数据库运行日志及预写日志等。
  • 数据目录结构(部分):
目录父目录用途
bin-存放数据库二进制文件的目录。
lib-存放数据库的库文件的目录。
share-存放数据库运行所需要的公共文件,如配置文件模板。
data(数据库节点/数据库主节点)-DBnode实例的数据目录,其中主实例的目录名为“data_dnxxx”,
备实例的为data_dnSxxx。xxx代表DBnode编号。
base实例数据目录包含每个数据库对应的子目录
global实例数据目录包含集簇范围的表的子目录
pg_audit实例数据目录(可配置)数据库审计日志目录。
pg_log实例数据目录(可配置)保存数据库节点实例的运行日志目录。
pg_xlog实例数据目录保存预写日志
postgresql.conf实例数据目录参数文件
pg_hba.conf实例数据目录客户端认证控制文件
postmaster.opts实例数据目录记录服务器启动时使用的命令行参数
gs_initdbbin数据库初始化工具
gs_dumpbin导出数据库相关信息的工具
gs_ctlbin数据库服务控制工具
gs_gucbin应用程序可以通过调用gs_guc来设置适合自己的参数
gsqlbin在命令行下运行的数据库连接工具

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/719312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存