软件:
Vertica 6.0.0-4
OS: Red Hat EnterpriseLinux Server release 6.0(x86-64)
Filesystem: ext4
三台服务器参数:
cpu :
4P*8CIntel(R) Xeon(R) CPU E7- 8837 @ 2.67GHz
4P*8CIntel(R) Xeon(R) CPU E7- 4820 @ 2.00GHz
4P*8CIntel(R) Xeon(R) CPU E7- 4820 @ 2.00GHz
Memory:
128GB
128GB
128GB
Disk:
IBM ServeRAID M5015 Rev: 2.13 600GB
IBM ServeRAID M5015 Rev: 2.13 600GB
IBM ServeRAID M5015 Rev: 2.13 600GB
网卡:
100Mb/s
100Mb/s
100Mb/s
测试Vertica三节点集群测试,与两节点集群进行比较如下:
步骤
测试项
Vertica (两节点集群)
Oracle(单节点)
Vertica (三节点集群百兆)
Vertica (三节点集群千兆)
1
数据加载(31亿,两节点情况下单点加载,三节点情况下是每个节点并行4个进程加载,Oracle是单节点光纤加载)
5小时13分26秒
4小时22分50秒
2小时12分31秒
17分03秒
2
两表关联非分布键(31亿+21万)
6小时22分35秒
11小时19分44秒
1小时58分30秒
2小时3分6秒
3
两表关联分布键(31亿+3千万)
2小时56分35秒
6小时13分48秒
2小时31分17秒
4
两表关联汇总非分布键(31亿+174)
649s
2小时16分10秒
729s
386s
5
四表关联非分布键(3千万+16万+16万+5万)
136s
96s
99s
6
四表关联非分布键(3千万+4+7+174)
202s
44s
46s
7
单表汇总(6千万)
109s
113s
8
四表关联非分布键(3千万+16万+2百万+5万)
184s
522s
357s
总计耗时
53527s
64724s
38989s
18487s
测试主要步骤比对说明:
1、 数据加载:
3节点的Vertica集群在加载过程中,是多个节点并行加载,并且在每个节点上开启了4进程并行加载,改造成千兆网络后,网络传输的瓶颈解决,效率大大提升;两节点的Vertica集群是单节点加载,并且通过百兆网络传输分布数据,效率不如oracle单机通过光纤连接磁阵直接加载。
2、 两表关联非分布键(31亿+21万)
3节点的Vertica集群,将临时表建立成temporary方式,并且ksafe设置为0,不需要进行节点间数据备份,从而避免了数据的重分布,所以效率提升
3、 两表关联分布键(31亿+3千万)
3节点的Vertica集群,在百兆网络情况下由于目标表被设置为ksafe 1,需要进行数据备份,300G的数据需要通过百兆带宽进行传输重分布,所以导致效率大幅度下降,改造成千兆网络后,问题解决
Vertica集群(3节点)主要参数设置
Ksafe:1
maxmemorysize :Special: 95%
executionparallelism : AUTO
Runtimeprioritythreshold : 2
plannedconcurrency : 4
结果分析:
文件加载入库
Vertica文件加载本质都是通过copy实现,可以通过多节点并行加载,以及在每台节点上开启多进程提升效率。通过将带宽从100Mb/s提升为1000Mb/s 后,加载速度提升一个数量级。
数据分布
插入目标表的过程中,需要检查目标表和源表的分布键字段类型,如果存在字段类型不一致或者字段长度不同(主要指CHAR),都会导致数据重分布,极大影响性能。
多表关联
Vertica多表关联的关联字段,如果设置成为orderby字段,则在关联匹配的过程中使用merge join方式,比默认的hash join方式效率提升很多。
单表汇总
vertica单表汇总是在各自的节点上运算,然后再把结果进行汇总,所以效率比单台节点的oracle高。
建表优化
vertica 提供DBD工具对建表语句、字段压缩方式、分布键、order字段进行优化,但是经过实际使用,分布键的设置和order字段的优化建议往往不准,还需要根据实际的关联语句以及经验进行设置。
数据压缩
vertica数据压缩是根据列式压缩,如果表中存在重复值的字段较多,则压缩比高,比如按地市、微区域等列举小区名称的表,压缩比能够达到1:5,但是对于用户流量信息,由于用户号码和流量的值很少出现重复,所以压缩比很低。压缩比还受到ksafe的影响,ksafe设置为1的情况下,数据会复制一份,容量增加一倍。