- 浏览: 1062636 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
Greenplum性能调优
以目前的使用体验的话,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上跑,不建议迁移长时间的批处理作业。
伴随性能的提升,同时加深的是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上跑,不建议迁移长时间的批处理作业。
发表评论
-
Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
2018-02-07 09:05 782在对数据查询或菜单时经常要对指定的时间或时间段进行查询,例 ... -
MySQL里获取当前week、month、quarter的start_date/end_date
2018-02-06 13:51 679select curDate(); #获取当前日 ... -
查看数据库
2018-01-28 20:38 541---mysql查看用户名和密码 select Hos ... -
数据导入到数据库
2018-01-09 20:23 461数据导出当数据量大时最好是dump文件,sql文件过大不好执行 ... -
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
2018-02-28 09:20 1266用Oracle SQL Developer时遇到no oc ... -
数据连接符
2018-02-28 09:32 543不同的数据库中字符串连接符不同,下面列举几种数据库的连接符 ... -
commit
2018-01-08 10:12 0刚接触SQLSERVER,刚才insert了一条记录,为什么 ... -
Redis操作命令总结
2017-10-25 12:43 1700redis-cli 中。 使用命令 ... -
PostgreSQL中表名、字段名大小写问题
2017-10-21 20:59 0学习hibernate的时候,数据库用了PostgreSQL ... -
怎么解决Greenplum中用pg
2018-07-19 09:51 486基本思路是为ns1.table1设置分布策略:root登陆 ... -
mysql unrecognized service问题解决
2017-10-21 20:34 0unrecognized 英 [ʌnˈrekəgna ... -
Oracle创建视图、通过视图创建表
2017-10-21 19:11 1158创建视图: [sql] view plain c ... -
PostgreSQL中表名、字段名大小写问题
2017-10-19 10:48 1297如果有视图依赖该表则该表不能删除 学习hibern ... -
关于性能测试几个名词概念的说明
2017-10-11 10:05 448什么是性能测试 在一定的负载下,系统的响应时间 ... -
数据库性能优化详解
2017-10-11 09:59 9281.数据库访问优化法则 要正确的优化SQL,我们需 ... -
Oracle怎样把varchar2型转成number型
2017-09-23 11:13 1670varchar2型转成number型的前提条件是varch ... -
oracle中字符串的大小比较,字符串与数字的比较和运算
2017-09-23 11:08 2842Oracle比较字符串是根据ASCII码来的,第一个字母的 ... -
greenplum 程序开发优化原则
2017-09-22 14:07 730greenplum 程序开发优化原则 1、批量数据处理后, ... -
PostgreSQL 时序最佳实践 - 证券交易系统数据库设计 - 阿里云RDS PostgreSQL最佳实践
2017-09-22 01:06 1302PostgreSQL , 证券 , 时序数据 , JSON ... -
PostgreSQL 时序最佳实践
2017-09-21 12:26 1187以股票交易为例,一共 ...
相关推荐
Greenplum是一种基于MPP...总之,Greenplum的快速调优涉及到集群规划、数据库管理、日常维护和SQL优化等多个方面,需要系统管理员具备全面的技术知识和经验,才能有效地提升系统的性能,保障大数据分析任务的顺利进行。
《Greenplum数据库调优1》 在大数据处理领域,Greenplum数据库因其高效的数据处理能力和优秀的并行计算性能而受到广泛关注。然而,为了确保其性能最大化,数据库调优是必不可少的一环。本文将深入探讨Greenplum...
根据提供的文档信息,本文将详细...通过以上几个方面的详细解析,我们可以看出CPIC-Greenplum-调优汇总涵盖了从系统需求分析到具体调优实践的全过程,不仅解决了当前的问题,也为未来的性能优化提供了宝贵的参考经验。
该内容较为全面,详细的讲解有关greenplum调优的官方指导,不适合初级入门人员,需要有一定基础的人员,最好会一点英文。
【Greenplum性能测试报告】 1. 测试目的 本次测试的主要目的是评估Greenplum数据库在数据查询方面的性能,包括单表查询效率和多表JOIN操作的处理能力。通过深入理解Greenplum的架构和分布式存储策略,我们将验证其...
四、Greenplum性能调优 1. 参数调整:合理设置`shared_buffers`、`work_mem`等参数,平衡内存使用和I/O性能。 2. 查询优化:分析慢查询,通过索引、物化视图、并行执行等手段提升查询效率。 3. 分区策略:根据数据...
因此,如何优化查询路径,生成高效的查询计划,是提高Greenplum数据库性能的重要途径。 ### 查询优化方法的提出 为了优化查询路径,本文首先设计了一种有效的代价模型,用于估算查询代价。这个代价模型考虑了多个...
- **系统调优**:根据实际工作负载调整操作系统和数据库参数,实现最佳性能。 - **监控与维护**:定期监控系统性能,及时发现并解决问题,确保长期稳定运行。 ### 结论 综上所述,《VMware vSphere 5.5的Greenplum...
本教材通过深入浅出的方式,详细介绍了Greenplum的核心概念、架构、安装配置、数据操作、查询优化、性能调优以及高级特性等内容。 首先,教材会讲解Greenplum的基本架构,包括其分布式存储模型、段(segment)的...
安装完成后,需要对Greenplum进行性能调优,包括调整查询计划、内存分配、并行度等。同时,监控系统资源,定期进行维护任务,如检查段的状态、清理无用数据等。 **总结** Greenplum与Hadoop的结合提供了全面的...
【Greenplum 64位 ODBC:连接与数据访问技术】 Greenplum是一款高度可扩展的并行数据库系统,专为大...正确安装和配置ODBC驱动,结合有效的性能调优策略,能够充分利用Greenplum的强大功能,满足大数据处理的挑战。
3. 使用手册:使用手册详尽地介绍了Greenplum的各种功能和使用技巧,包括数据导入导出、性能调优、安全设置等。 四、GP培训-1 "GP培训-1"可能是系列培训材料的一部分,可能涵盖了基础理论、实践操作和案例分析等...
例如,理解如何使用gpadmin工具进行性能调优,或者如何利用Java API进行数据导入导出,都是提高开发效率的关键。 文档还可能包含关于安全性的内容,如用户权限管理、角色权限分配、网络加密等。Java开发者需要熟悉...
Greenplum具备处理PB级别数据的能力,支持复杂的查询,并能通过并行化技术有效提升查询性能。掌握Greenplum数据库的最佳实践是确保数据库集群高效运行的关键。 最佳实践可以从多个方面来考虑,包括集群的维护、支持...
- **智能调优**:使用机器学习算法进行自动调优,优化查询性能。 - **安全与权限管理**:用户角色、访问控制、审计日志等机制保障数据安全。 - **备份恢复**:支持在线备份和快速恢复,确保业务连续性。 - **...
因此,在实际应用中,合理规划硬件资源,以及对系统进行性能调优,是非常重要的。 最后,理解并熟悉GreenPlum的数据分片策略、并行执行计划以及MPP架构的工作原理,将有助于提升你在大数据处理领域的专业技能。持续...
九、性能监控与调优 Greenplum提供了丰富的监控工具,如`gpperfmon`,用于实时查看系统状态和查询性能。结合监控数据,可以对硬件资源、查询执行计划等进行调优,提升整体性能。 十、故障排查与维护 了解常见问题及...
7. 性能监控与调优:如何监控数据库性能,识别瓶颈,以及调优策略。 8. 高可用性与灾难恢复:如何构建高可用集群,以及数据备份和恢复策略。 通过《Greenplum 企业应用实战》这本书,读者可以深入理解如何利用...
同时,定期进行性能调优和维护,以保持系统的高效运行。 总之,Greenplum CC Web 6.8.0-GP6是大数据环境中一个强大的工具,结合RHEL7的稳定性,为企业提供了高效的数据管理和分析解决方案。通过深入了解和熟练使用...