前言:

以目前的使用体验的话,Greenplum(以下简称GP)的实时性确实比较高,从存储层到计算层,数据吞吐效率比类Hadoop生态圈的sql工具要好得多。

伴随性能的提升,同时加深的是gp对硬件的要求。

就目前的GP集群的硬件配置情况来说:

5台22线程,64G内存,2T硬盘,千兆网卡机器(整体情况是110线程,320GB内存,disk IO 150MB/s,网络 IO 150MB/s)

与现今的spark集群相比(10台22线程,128G内存,30T硬盘,千兆网卡),sql查询性能提高50%-300%。以下是水星线上任务在GP和spark上运行

的对比表:

-------------------------------------------------------------------------------------------
Sql1: select count(*) from mercury.url_keyword where (keyword rlike '汽车' or keyword rlike '宝马') ;
-------------------------------------------------------------------------------------------
Sql2: select count(1) from mercury.mds_mercury_gid_dsp_c where dt='work' and Cbehe=1 and Cbiddingx=1;
--------------------------------------------------------------------------------------------
Sql3: select count(1) from mercury.url_tag_raw where dt='work' and tiyu=1 and keji=1;
-------------------------------------------------------------------------------------------
Sql4: select D.view_cnt,count(*) as gid_cnt 
from ( 
select if(C.cnt<30,C.cnt,20) as view_cnt 
from ( 
select B.gid,count(*) as cnt 
from 
(select url,keyword from url_keyword where (keyword rlike '汽车' or keyword rlike '宝马')) A 
join mercury.sds_mercury_gid_cid_url B 
on A.url=B.url group by B.gid 
) C 
) D group by D.view_cnt;
Sql
spark用时
gp用时
Gp提升%
Sql1 132s 3s 40倍
Sql2 131s 90s 30%
Sql3 3s 3s 0%
Sql4 30s 18s 30%

分析下可能的原因:

1.spark集群使用的远程HDFS数据,数据传输有很大的延迟。

2.spark虽然使用RRD策略实现数据的存储和IO,但是Spark本身还是一个离线的计算模型,

期间存在典型的输出文件的存储和大量的网络传输,相比于MPP(GP计算模型)有很大的缺陷。

这其实也是离线框架和在线框架最本质的区别。

3.在数据库层面,spark-sql框架接入的是hive数据,而hive是一个非结构行数据库,优点在

于大数据量的存储,在数据索引,数据存储结构,元数据信息等方面还收集的不够完善。

而GP是基于postgrel数据库,具有很强的DML和DQL能力,在数据索引和存储方面更优秀。

Greenplum的参数配置记录:

一共5台计算节点,每个节点部署3个segment(postgrel实例)服务,每个segment分配5线程,20G内存。

使用任务队列:目前水星使用mercury队列,设置并行数:ACTIVE_STATEMENTS=5

设置优先级:PRIORITY=MAX

       eg:  CREATE RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=3,PRIORITY=MAX);

使用mercury用户:单作业使用内存:set statement_mem = '4GB';

最大使用内存:set max_statement_mem = '10GB';

使用Pivotal Optimizer:set optimizer to on;

不使用groupagg:set enable_groupagg to off;

 eg: create user u1 with resource queue mercury;

                                                     alter user u1 set statement_mem to '2GB';

                                                     alter user u1 set optimizer to on;

系统参数配置:

gp_resqueue_memory_policy = 'eager_free' --提早回收前期阶段的内存

gp_vmem_protect_limit = 19968 --每个segment的分配内存

gp_resqueue_priority_cpucores_per_segment = 4 --每个segment的分配线程数

shared_buffers = 1GB --segment用作磁盘读写的内存缓冲区

work_mem = 4GB --segment用作sort,hash操作的内存大小

maintenance_work_mem = 10GB --segment用于VACUUM,CREATE INDEX等操作的内存大小

effective_cache_size = 10GB --segment能使用的缓存大小

max_connections = 1200 --最大连接数

max_prepared_transactions = 300 --最大预连接数

 eg: gpconfig -c gp_resqueue_memory_policy -v eager_free -m eager_free

                                   gpconfig -c work_mem -v 4GB

                                   gpconfig -c max_connections -v 1200 -m 800

Greenplum调优方法:

1.调整表的分布键,常用于join和where条件的列作为分布键,最典型的例子是两张做join的表都用需要连接的列作为分布键。

2.周期使用VACUUM ANALYZE命令维护数据库的统计信息。

3.一般不使用Index,对于需要使用的表如果分布键是粗粒度的使用BitMap索引,如果是细粒度的使用BTree索引。

4.一般使用Pivotal Query Optimizer,在使用Legacy Query Optimizer的时候,使用explain analyze命令查看执行计划,优化不合适的operator。

5.避免大表的broadcast,多使用ANALYZE TABLE.命令。

6.看实际情况多使用enable_hashagg和enable_hashjoin。

7.用group by代替distinct.

8.在多表左连接时,小表放在左边。内连接时调整连接顺序尽量少的把数据带向上层连接。

9.多使用explain analyze看看执行计划。

explain anaylze命令介绍:

example:select count(1) from mercury.mds_mercury_gid_dsp_c where dt='work' and Cbehe=1 and Cbiddingx=1;

除此之外还有以下操作:

Hash Join

HashAggregate

Redistribute Motion

Broadcast Motion等

并发测试:

同时运行5个数据量100G的任务,集群负载情况:

cpu负载良好,存在瓶颈的是磁盘读写和网络读写。但是即使在这样的情况下,执行平时20s的任务延迟也不会太高,执行23秒也就结束了。对于10s内完成的任务如本文的sql1和sql3基本没有影                                    响。

但是集群的瓶颈也是很明显的,上图中的bjlg-49p122-greenplum-01节点的磁盘读速率已经到达了上限。另一方面,在内存上瓶颈依然存在,我目前还不清楚上图中的内存使用为什么显示还很少。但是从另一个图表中可以看到内存已经过载了(Used(MBytes)):          

而空闲时段的内存情况是这样的:

其实硬件方面瓶颈最严重的是disk IO和network IO,下面是每台机器的IO评测情况:

disk IO:

写最大也只有140MB/s,读最大260MB/s.

Network IO:

,100MB/s左右的网络传输速率对于一个要支持大数据量的在线计算框架来说瓶颈很明显。

下图是一个大Join任务在shuffle阶段的瓶颈,cpu和内存正在空闲状态等待数据的传输:

综上所诉,现在集群存在的问题:

1.网络IO低,目前使用的千兆网卡。

2.磁盘IO低,对于本地读取需求的任务影响大。

3.现有的业务数据所有都存在hdfs,如果需要迁移到GP,不是太效率。

调研结论:

针对现有的硬件条件和数据存储情况,建议迁移实时性要求高的短作业到GP上跑,不建议迁移长时间的批处理作业。

Greenplum性能调试记录相关推荐

  1. 前端-页面性能调试:Hiper

    前端-页面性能调试:Hiper 我们写单页面应用,想看页面修改后性能变更其实挺繁琐的.有时想知道是「正优化」还是「负优化」只能靠手动刷新查看network.而Hiper很好解决了这一痛点(其实Hipe ...

  2. 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

    海思NNIE开发系列文章: 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平 ...

  3. ROS上同时预览depth,IR,RGB 调试记录

    ROS上同时预览depth,IR,RGB 调试记录 用rviz同时显示RGB,IR,DEPTH(验证设备:astraprosm,canglong2,deeyea) 1.编译libuvc库 cd lib ...

  4. Zabbix服务器性能优化记录

    Zabbix服务器性能优化记录 一.检查服务器当前负载 二.检查CPU和内存占比 1.CPU占用率情况 2.内存使用情况 三.处理解决 1.临时关闭图形界面 2.systemd启动目标介绍 3.永久设 ...

  5. ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录

    ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值--bug调试记录 目录 输出结果 1.增加XGBR算法 ...

  6. ue4场景没阴影_UE4性能调试分析常用方法

    UE4性能调试分析常用方法 本文将介绍使用UE4开发项目常用到的性能分析的命令 UE4使用命令的方式是在游戏运行的时候按~键就可以输入命令了 显示CPU和GPU端执行耗时命令: stat UNIT 这 ...

  7. WPF性能调试系列 – 内存监测

    原文:WPF性能调试系列 – 内存监测 WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profile ...

  8. 使用CoreProfiler/NanoProfiler实现跨平台amp;应用的整合性能调试

    NanoProfiler是一个开源.NET性能调试类库,CoreProfiler是其.NET Core版本的实现.在之前的一些文章中,我曾介绍过NanoProfiler的主要使用方式,以及如何为生产环 ...

  9. [Deepin - Pycharm调试记录] Pyinstaller索引系统库问题

    Deepin - Pycharm调试记录 - Pyinstaller索引不到系统库 现象 在Pycharm的Terminal中执行Pyinstaller指令时候遇到如下报错提示 OSError: Py ...

最新文章

  1. 妙用vector:根据第一个不等的元素比较两个序列大小的利器
  2. linux内核 fat,微软宣布exFAT文件系统规范,希望被Linux内核接纳
  3. 使用coding进行项目代码管理(全程可视化操作!)
  4. 整合Struts2、Spring、Hibernate构建J2EE应用
  5. 动态内存分配导致内存泄漏之处
  6. idea查看类和方法的结构图
  7. es6中的块级作用域
  8. jQuery.grep()
  9. Python3 学习
  10. 网页实现微信扫描二维码登录
  11. html js手册chm,W3C Javascript CHM参考手册离线版
  12. JUCE框架教程(3)—— Component ClassGraphics入门
  13. 基于51单片机的PC机控制系统
  14. js唤醒淘宝手机app
  15. java.lang.IllegalArgumentException: Malformed \uxxxx encoding
  16. 小白新人Python哪些基础知识必学?
  17. Android 接入穿山甲激励视频广告步骤与错误总结
  18. 最好用的Python网页抓取工具包!
  19. 名校硕博生已经卷到小县城了?浙江山区基层新招岗位95%是硕博,来自上交复旦国科大等...
  20. Python图片压缩

热门文章

  1. Windows7声卡驱动安装不上问题
  2. C. Tyler and Strings(组合数学,树状数组维护前缀和)(Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad i)
  3. Java学生成绩排序输出的三种不同方法
  4. GPT-4.0人工智能的下载
  5. iOS设备播放mkv格式视频无声音解决
  6. 中国联通数字乡村白皮书2.0 附下载
  7. xbmc_如何在XBMC上获取Hulu和Amazon视频
  8. 凯立德货车导航H655强劲配置 护航货运大展身手
  9. Audio标签常用属性
  10. 攻破黑市之拿下吃鸡,DNF钓鱼站群(结局彩蛋)