CBO优化器
可获得性
本特性自openGauss 1.0.0版本开始引入。
特性简介
openGauss优化器是基于代价的优化(Cost-Based Optimization,简称CBO)。
客户价值
openGauss CBO优化器能够在众多计划中依据代价选出最高效的执行计划,最大限度的满足客户业务要求。
特性描述
在CBO优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、DISTINCT值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小、首元组返回代价最小的执行方式进行执行。
特性增强
无。
特性约束
无。
依赖关系
无。
支持LLVM
可获得性
本特性自openGauss 1.0.0版本开始引入。
特性简介
openGauss的LLVM(Low Level Virtual Machine)技术,提供了查询动态编译执行的能力。
客户价值
通过对查询动态编译执行,大幅提高重查询性能。
特性描述
openGauss借助LLVM提供的库函数,依据查询执行计划树,将原本在执行器阶段才会确定查询实际执行路径的过程提前到执行初始化阶段,从而规避原本查询执行时候伴随的函数调用、逻辑条件分支判断以及大量的数据读取等问题,以达到提升查询性能的目的。
特性增强
无。
特性约束
无。
依赖关系
依赖于LLVM开源组件,当前使用的开源组件版本为10.0.0。
向量化引擎
可获得性
本特性自openGauss 1.0.0版本开始引入。
特性简介
openGauss提供向量化引擎,通常用在OLAP数据仓库类系统。主要是因为分析型系统通常是数据处理密集型,基本上都是采用顺序方式来访问表中大部分的数据,然后再进行计算,最后将计算结果输出给用户。
客户价值
通过批量计算,大幅提高复杂类查询性能。
特性描述
传统的数据库查询执行都是采用一次一数组(tuple)的pipeline执行模式,因此CPU的大部分处理时间不是用来处理数据,而是遍历查询操作树。这种情况下CPU的有效利用率不高,同时也会导致低指令缓存性能和频繁跳转。更加糟糕的是,这种方式的执行,不能够利用现代硬件的新优化特征来加速查询的执行。在执行引擎中,另外一个解决方案就是改变一次一数组(tuple)为一次一列的模式。这也是我们向量化执行引擎的一个基础。
向量化引擎是跟列存储技术绑定的,因为列存储时每列数据存储在一起,可以认为这些数据是以数组的方式存储的。基于这样的特征,当该列数据需要进行某一同样操作,可以通过一个循环来高效完成对这个数据块各个值的计算。
向量化执行引擎的优势在于:
- 可以减少节点间的调度,提高CPU的利用率。
- 因为相同类型的数据放在一起,可以更容易的利用硬件与编译的新优化特征。
特性增强
无。
特性约束
无。
依赖关系
依赖于列存储。
行列混合存储
可获得性
本特性自openGauss 1.0.0版本开始引入。
特性简介
openGauss支持行存储和列存储两种存储模型,用户可以根据具体的使用场景,建表时选择行存储还是列存储表。
一般情况下,如果表的字段比较多(即大宽表),查询中涉及到列不很多的情况下,适合列存储。列存储方式如图1所示。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。
客户价值
在大宽表、数据量比较大的场景中,查询经常关注某些列,行存储引擎查询性能比较差。例如,气象局的场景,单表有200~800个列,查询经常访问10个列,在类似这样的场景下,向量化执行技术和列存储引擎可以极大的提升性能和减少存储空间。
特性描述
表有行存表和列存表两种存储模型。两种存储模型各有优劣,建议根据实际情况选择。
-
行存表
默认创建表的类型。数据按行进行存储,即一行数据紧挨着存储。行存表支持完整的增删改查。适用于对数据需要经常更新的场景。
-
列存表
数据按列进行存储,即一列所有数据紧挨着存储。单列查询IO小,比行存表占用更少的存储空间。适合数据批量插入、更新较少和以查询为主统计分析类的场景。列存表不适合点查询,insert插入单条记录性能差。
-
行存表和列存表的选择依据如下:
-
更新频繁程度
数据如果频繁更新,选择行存表。
-
插入频繁程度
频繁的少量插入,选择行存表。一次插入大批量数据,选择列存表。
-
表的列数
表的列数很多,选择列存表。
-
查询的列数
如果每次查询时,只涉及了表的少数(小于总列数的50%)几个列,选择列存表。
-
压缩率
列存表比行存表压缩率高。但高压缩率会消耗更多的CPU资源。
-
特性增强
无。
特性约束
无。
依赖关系
无。
自适应压缩
可获得性
本特性自openGauss 1.0.0版本开始引入。
特性简介
数据压缩是当前数据库采用的主要技术。数据类型不同,适用于它的压缩算法不同。对于相同类型的数据,其数据特征不同,采用不同的压缩算法达到的效果也不相同。自适应压缩正是从数据类型和数据特征出发,采用相应的压缩算法,实现了良好的压缩比、快速的入库性能以及良好的查询性能。
客户价值
主要应用场景为数据入库和频繁的海量数据查询。 在数据入库场景中,自适应压缩可以大幅度地减少数据量,成倍提高IO操作效率,并将数据分类压缩以获得更快的入库性能。当用户进行数据查询时,少量的IO操作和快速的数据解压可以加快数据获取的速率,从而在更短的时间内得到查询结果。
特性描述
目前,数据库已实现了列存储上RLE、DELTA、BYTEPACK/BITPACK、LZ4、ZLIB、LOCAL DICTIONARY等多种压缩算法。数据库支持的数据类型与压缩算法的映射关系如下表所示。
特性增强
支持对压缩算法进行不同压缩水平的调整。
特性约束
无。
依赖关系
开源压缩软件LZ4/ZLIB。