GBase 8a 常用优化策略
1、数据分布
GBase8a集群性能取决于各个节点整体的性能,每个节点存储的数据量对于集群性能有很大影响,为了尽可能达到最好的性能,所有的数据节点应该尽量存储等量的数据,因此在数据库表规划定义阶段要考虑表是复制表还是分布表,以及对分布表上的某一些列设置为分布列进行hash分布。
例如根据数据的分布特性设计,可以把字典表或者维度表建成复制表的方式将数据存储到各个节点上,不须对其数据进行分片存储,因为字典表的数据量相对较小,虽然在各个节点进行存储有一定的数据冗余,但和事实表的JOIN 运算就可在本地进行,避免节点间搬动数据。对于事实表(大表)可将数据分片到不同的节点上存储,分片方法可采用(range, round robin, hash)等不同方法,SQL执行的查询条件满足只在其中部分节点时,查询优化可决定SQL的执行仅在这些节点执行即可。
建Hash分布列的原则基本如下:
1)尽量选择count(distinct)值大的列做Hash分布列,让数据均匀分布。
2)优先考虑大表间的JOIN,尽量让大表JOIN条件的列为Hash分布列(相关子查询的相关JOIN也可以参考此原则),以使得大表间的JOIN可以直接分布式执行。
3)其次考虑GROUP BY,尽量让GROUP BY带有Hash分布列,让分组聚合一步完成。
4)通常是等值查询的列,并且使用的频率很高的应考虑建立为hash分布列。
注意事项:
1)hash分布键只能选择数值和字符串类型的列
2)作为hash分布列的列不能进行update
3)尽量保持hash join的等值关联列在类型定义上完全相同,如char和varchar类型进行关联,可能出现结果为空情况,原因是char型不足最大长度时用空格补齐,varchar则没有空格,如果关联则需要trim空格
2、数据排序
数据在按某查询列进行排序后,则相同数据取值会集中存放在有限的数据包中,因此在以该列进行过滤时,利用智能索引命中的数据包会很少,不仅能降低IO量而且会提高压缩比。其最大好处是可以将智能索引的过滤效果发挥到最优,从而使整体查询性能大幅提升。建议在实际应用场景许可的前提下,将数据按照查询常用条件列进行排序。如在电信行业中,通常按照手机号码进行查询,因此可按一定的时间间隔对数据按照手机号码进行排序,则在此时间范围内的手机号码有序,在进行查询时,便可通过智能索引特性提高查询性能。
3、投影列
GBase8a是一款列存数据库,在编写select语句时应遵循只选择有效投影列,对于无关的投影列应避免写入到select语句中,这样可以需要物化的列能有效缩减,进而降低io成本,因此能有效提升查询性能。
4、压缩策略
大部分应用中性能的瓶颈是磁盘IO,所以新型数据库的设计都已降低磁盘IO为主要设计目标,压缩可减少I/O的时间,提升性能,8a也不例外,压缩也是提高性能的主要技术之一,8a并行执行器已经能够从上层并行调度解压,因此使解压的适用性得到了很大的提升,很多场景下(尤其是针对超大数据量的场景),使用压缩数据的方式都可以获得比不压缩更好的性能。
压缩方式:
1)列级 int型压缩方式选项:0,1,5
2)列级 varchar型压缩方式选项:0,3,5
3)表级组合压缩方式为:00、31、55
选取原则:
31压缩优势是压缩比高,比55压缩高一倍压缩比,但是执行效率一般,如果对存储空间要求高,对性能不太要求时,建议使用31压缩;如果对存储空间要求不高,对性能要求高时,建议使用55压缩。
5、Hash索引
Hash Index 通常可以用来解决等值查询的定位效率,特别是对以单表精确查询为主的应用场景尤为适合,如电信业务中的并发话单查询等(特别是内存基本充足的场景)。8a中的hash索引分为 Global Hash与Local Hash,两者主要的区别是应对的场景不同和计算Hash值的范围不同。在应对的场景上,Global Hash Index用于列中数据较分散的情况,而Local Hash Index则用于列中数据较集中的情况,因此,如果一个列中的数值的重复度较高,则应该使用Local Hash Index,否则需要使用Global HashIndex。在计算范围上,Global Hash Index是在整个列的全部数值范围上进行计算和维护,而Local Hash Index则是在各个DC上进行计算和维护。现场中,使用Global Hash Index的场景较多。
在使用上,GBase8a一定是首先进行智能索引过滤的,之后,如果发现查询条件中的等值查询条件列上建立了Hash Index,则使用Hash Index,否则进行全DC扫描。这一点,可以在Trace Log中明显观察到。
对有实时数据加载的场景,可以先建立无索引的临时表加载数据,再将临时表内数据插入到带索引的同结构目标表中或在临时表上创建索引。一次性处理索引建立,可较大幅度的降低索引带来的维护成本。
注意事项:
1)索引是一种有损的优化手段,使用索引通常会带来维护的成本,会影响数据加载及DML操作的性能,实际使用时需根据具体需求而定
2)选择建立hash索引的列应尽量选择重复值较少的列,否则hash冲突严重,影响hash索引的性能
3)二进制类型的列不适合使用HASH索引
4)创建索引时,只能指定单列,不能指定多列创建联合索引
热门帖子
- 12025-12-01浏览数:182764
- 22023-05-09浏览数:25062
- 42023-09-25浏览数:18526
- 52020-05-11浏览数:17529