vertica优化
找到之前年度汇报的ppt,把优化方法分享一下,也做一个留存。
1、vertica数据重新分布分为两种:
Broadcasting广播: 将完整的中间结果或表记录集复制到每个节点
Resegmentation重分布: 将现有Projection数据或中间结果按照关联等字段重新分布到每个节点,如果需要得到数据全集,则需要合并每个节点上的记录
2、避免数据重新分布的方式需要重新选择Projection的部分键或者修改分布方式:
GROUP BY子句包含的字段需要包含所有分布键(比分布键多是可以的)。
GROUP BY 时候字段的顺序要与Projection中字段的顺序一致。
Projection要是不自己创建的话,vertica数据库会按照表定义前面32个字段进行数据分布,自动创建。
3、避免出现Resegmentation重分布的方法:
数据量比较大的时候,要是创建临时表的话需要使用order by关联字段名 segmented by hash(关联字段名)来创建临时表,实体表的话需要重新设计Projection
数据量比较小的时候,创建临时表的话使用unsegmented by hash(关联字段名)来让数据在每个节点都保留一份。
4、避免Join操作中额外的排序及数据传输操作,提升Join操作的性能
Vertica内部Join策略主要有下面两种类型:Merge join和Hash join:
优化器会根据Protection的定义以及查询内容,选择最合适的Join策略。在Hash Join策略中,小表(inner表)会放入内存散列表,然后再逐条扫描Outer(大表)表,查看是否能匹配上。如果把Protection按照关联字段预先排好序,那么优化器会选择更有效率的Merge Join(即关联字段事先排序好)。
如果只有一张表是按照关联字段预先排序,那么Vertica会在关联操作前将参加关联的另一个表表进行排序,然后再进行Merge Join。
强制执行排序策略可加hints关键字来实现