openGauss企业级增强特性(1)

企业级增强特性

数据分区

数据分区是数据库产品普遍具备的功能。在openGauss中,数据分区是对数据按照用户指定的策略对数据做的水平分表,将表按照指定范围划分为多个数据互不重叠的部分(Partition)。

openGauss支持:

  • 范围分区(Range Partitioning)功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。
  • 列表分区(List Partitioning)功能,即根据表的一列,将要插入表的记录中出现的键值分为若干个列表(这些列表在不同的分区里没有重叠),然后为每个列表创建一个分区,用来存储相应的数据。
  • 哈希分区(Hash Partitioning)功能,即根据表的一列,通过内部哈希算法将要插入表的记录划分到对应的分区中。用户在CREATE TABLE时增加PARTITION参数,即表示针对此表应用数据分区功能。

例如,表1描述了一个xDR(详单)场景下,基于时间分片的方式分区后带来的收益。

表 1 分区收益

场景描述

收益

当表中访问率较高的行位于一个单独分区或少数几个分区时。

大幅减少搜索空间,从而提升访问性能。

当需要查询或更新一个分区的大部分记录时。

仅需要连续扫描对应分区,而非扫描整个表,因此可大幅提升性能。

当需要大量加载或者删除的记录位于一个单独分区或少数几个分区时。

可直接读取或删除对应分区,从而提升处理性能;同时由于避免大量零散的删除操作,可减少清理碎片工作量。

数据分区带来的好处在于:

  • 改善可管理性: 利用分区,可以将表和索引划分为一些更小、更易管理的单元。这样,数据库管理员在进行数据管理时就能采取“分而治之”的方法。 有了分区,维护操作可以专门针对表的特定部分执行。

  • 可提升删除操作的性能: 删除数据时可以删除整个分区,与分别删除每行相比,这种操作非常高效和快速。

    删除分区表与删除普通表的语法一致,都是通过DROP TABLE语法进行删除。

  • 改善查询性能: 通过限制要检查或操作的数据数量,分区可带来许多性能优势。

    分区剪枝:分区剪枝(也称为分区消除)是openGauss在执行时过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级。

  • 智能化分区联接: 通过使用一种称为智能化分区联接的技术,分区还可以改善多表联接的性能。当将两个表联接在一起,并且至少其中一个表使用联接键进行分区时,可以应用智能化分区联接。智能化分区联接将一个大型联接分为多个较小的联接,这些较小的联接包含与联接的表“相同”的数据集。这里,“相同”定义为恰好包含联接的两端中相同的分区键值集,因此可以确保只有这些“相同”数据集的联接才会有效,而不必考虑其他数据集,目前不支持列表分区和哈希分区。

向量化执行和行列混合引擎

在大宽表,数据量比较大、查询经常关注某些列的场景中,行存储引擎查询性能比较差。例如气象局的场景,单表有200~800个列,查询经常访问10个列,在类似这样的场景下,向量化执行技术和列存储引擎可以极大的提升性能和减少存储空间。

  • 向量化执行

    标准的迭代器模型如图1所示。控制流向下(下图实线)、数据流向上(下图虚线)、上层驱动下层(上层节点调用下层节点要数据)、一次一元组(下层节点每次只返回一条元组给上层节点)。

    而向量化执行相对于传统的执行模式改变是对于一次一元组的模型修改为一次一批元组,配合列存特性,可以带来巨大的性能提升。

    图 1 向量化执行引擎

行列混合存储引擎

openGauss支持行存储和列存储两种存储模型,用户可以根据应用场景,建表的时候选择行存储还是列存储表。

一般情况下,OLAP类业务场景(范围统计类查询和批量导入操作频繁,更新、删除、点查和点插操作不频繁,表的字段比较多,即大宽表,查询中涉及到的列不是很多)下,适合列存储,OLTP类业务场景(点查、点插、删除、更新频繁,范围统计类查询和批量导入操作不频繁,表的字段个数比较少,查询大部分字段)下,适合行存储。

图2所示,行列混合存储引擎可以同时为用户提供更优的数据压缩比(列存)、更好的索引性能(列存)、更好的点更新和点查询(行存)性能。

图 2 行列混存引擎

  • 当前列存储引擎有以下约束:

    • DDL仅支持CREATE/DROP/TRUNCATE TABLE的功能。

      兼容分区的DDL管理功能(如:ADD/DROP/MERGE PARTITION,EXCHANGE功能)。

      支持CREATE TABLE LIKE语法。

      支持ALTER TABLE的部分语法。

      其他功能都不支持。

    • DML支持UPDATE/COPY/DELETE。

    • 不支持触发器,不支持主外键。

    • 支持Psort index、B-tree index和GIN index,具体约束参见《SQL参考》中“SQL语法 > CREATE INDEX”章节。

  • 列存下的数据压缩

    对于非活跃的早期数据可以通过压缩来减少空间占用,降低采购和运维成本。

    openGauss列存储压缩支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等压缩算法,且能够根据数据特征自适应的选择压缩算法,平均压缩比7:1。压缩数据可直接访问,对业务透明,极大缩短历史数据访问的准备时间。

融合存储引擎

融合引擎架构支持了可插拔存储引擎的架构,新增了In-place update存储引擎,索引多版本为索引增加了事务信息,Xlog无锁刷新极大提升了Xlog写入效率,并行Page回放提升了备机回放效率,企业级特性闪回为用户提供了一个稳定的查询状态。

  • In-place update存储引擎

    新增的In-place update存储引擎很好的解决了Append update存储引擎空间膨胀和元组较大的问题,高效回滚段的设计是In-place update存储引擎的基础。

  • 索引多版本

    图 3 UBTree与BTree查找、更新比较示意图

  • 通过在索引页面元组上维护版本信息,UBtree能够在索引层进行 MVCC 可见性检查。同时 UBtree 也能通过版本信息独立判断索引元组是否已经无效(Dead),进而使得 in-place update引擎能实现数据表以及索引表上页级的空间清理,并在此基础上构建不依赖 AutoVacuum 的独立垃圾回收机制。

  • Xlog无锁刷新

    图 4 Xlog lock less Design

  • 本特性对WalInsertLock进行优化,利用LSN(Log Sequence Number)及LRC(Log Record Count)记录了每个backend的拷贝进度,取消WalInsertLock机制。在backend将日志拷贝至WalBuffer时,不用对WalInsertLock进行争抢,可直接进行日志拷贝操作。并利用专用的WalWriter写日志线程,不需要backend线程自身来保证XLog的Flush。通过以上优化,取消WalInsertLock争抢及WalWriter专用磁盘写入线程,在保持原有XLog功能不变的基础上,可进一步提升系统性能。

  • 并行Page回放

    本特性针对Ustore Inplace update WAL log写入,Ustore DML operation并行回放分发进行优化。通过利用Prefix和suffix来减少update WAL log的写入。通过把回放线程分多个类型来解决Ustore DML WAL大多都是多页面回放问题。同时把Ustore的数据页面回放按照blkno去分发,提高并行回放的并行程度。

  • 企业级特性闪回

    闪回是数据库恢复技术的一环,能够使得DBA有选择性的高效撤销一个已提交事务的影响,将数据从人为的不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。

    本特性支持四种闪回实现:

    • 闪回查询:可以查询过去某个时间点表的某个snapshot数据,这一特性可用于查看和逻辑重建意外删除或更改的受损数据。闪回查询基于MVCC多版本机制,通过检索查询旧版本,获取指定老版本数据。
    • 闪回表:可以将表恢复至特定时间点,当逻辑损坏仅限于一个或一组表,而不是整个数据库时,此特性可以快速恢复表的数据。闪回表基于MVCC多版本机制,通过删除指定时间点和该时间点之后的增量数据,并找回指定时间点和当前时间点删除的数据,实现表级数据还原。
    • 闪回drop:可以恢复意外删除的表,从回收站(recycle bin)中恢复被删除的表及其附属结构如索引、表约束等。闪回drop是基于回收站机制,通过还原回收站中记录的表的物理文件,实现已drop表的恢复。
    • 闪回truncate:可以恢复误操作或意外被进行truncate的表,从回收站中恢复被truncate的表及索引的物理数据。闪回truncate基于回收站机制,通过还原回收站中记录的表的物理文件,实现已truncate表的恢复。
  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值