摘自<Greenplum企业应用实战> 重点: 使用gp_dist_random函数,将查询下发到每个Segement 创建查看子节点SQL运行状态视图 1)创建v_active_sql视图方便查看SQL create view v_active_sql as select pg_stat_activity.procpid,pg_stat_activity.sess_id, pg_stat_activity.usename,pg_stat_activity.waiting as w , to_…
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:<OCM 基本班课程表> 二:<OCM_第一天课程:OCM课程环境搭建> 三:<OCM_第二天课程:Section1 ->配置 Oracle 网络环境 > 四:<OCM_第三天课程:Section1 ->表空间的操作和管理.服务配置 > 五:<OC…
Greenplum 调优--VACUUM系统表 1.VACUUM系统表原因 Greenplum是基于MVCC版本控制的,所有的delete并没有删除数据,而是将这一行数据标记为删除, 而且update其实就是delete加insert.所以,随着操作越来越多,表的大小也会越来越大.对于OLAP 应用来说,大部分表都是一次导入后不再修改,所以不会出现这个问题. 但是对于数据字典来说,就会随着时间表越来越大,其中的数据垃圾越来越多. 2.Greenplum的VACUUM工具 Greenplum的VA…
分布列选择黄金法则 由于Greenplum是一个分布式的数据库,数据是分散存储在各个数据节点的,所以需要告诉Greenplum数据应该如何分布. 短板效应 当用户请求QUERY时,Greenplum会在所有的节点并行执行,所以最慢的节点会成为整个系统的瓶颈. Greenplum 支持的分布算法 : 用户可以指定 分布列(允许指定多个列) ,或者使用 随机分布 算法. 那么用户应该如何选择分布列,或者是否要使用随机分布算法呢? 总结起来,需要考虑以下几点 JOIN 当JOIN的列都是分布列时,不需…
上次有个朋友咨询我一个GP数据倾斜的问题,他说查看gp_toolkit.gp_skew_coefficients表时花费了20-30分钟左右才出来结果,后来指导他分析原因并给出其他方案来查看数据倾斜. 其实很多朋友经常使用如下的方式来检查数据分布: select gp_segment_id,count(1) from person_info group by 1; 但是这种方法太简单,只有判断存储是否倾斜,不能够去对数据处理是否会出现倾斜做出判断.而且判断的维度很少,不直观. 后来Greenpl…
1.关于hive的优化 ->大表拆分小表 ->过滤字段 ->按字段分类存放 ->外部表与分区表 ->外部表:删除时只删除元数据信息,不删除数据文件 多人使用多个外部表操作同一份数据文件 ->分区表:hive中的数据库,表,分区来说都是文件夹 提高了检索效率 ->手动创建 ->动态分区 ->外部表+分区表 ->数据的存储 ->存储格式:列式存储 ->压缩 2.SQL的优化 ->后join先filter 3.mapreduce的优化…
1.关于hive的优化 ->大表拆分小表 ->过滤字段 ->按字段分类存放 ->外部表与分区表 ->外部表:删除时只删除元数据信息,不删除数据文件 多人使用多个外部表操作同一份数据文件 ->分区表:hive中的数据库,表,分区来说都是文件夹 提高了检索效率 ->手动创建 ->动态分区 ->外部表+分区表 ->数据的存储 ->存储格式:列式存储 ->压缩 2.SQL的优化 ->后 join 先 filter 3.mapreduce…
对于分布式数据库来说,QUERY的运行效率取决于最慢的那个节点. 当数据出现倾斜时,某些节点的运算量可能比其他节点大.除了带来运行慢的问题,还有其他的问题,例如导致OOM,或者DISK FULL等问题. 如何监控倾斜 1.监控数据库级别倾斜 2.监控表级倾斜 出现数据倾斜的原因和解决办法 1.分布键选择不正确,导致数据存储分布不均. 例如选择的字段某些值特别多,由于数据是按分布键VALUE的HASH进行分布的,导致这些值所在的SEGMENT的数据可能比而其他SEGMENT多很多. 分布键的选择详…
前阵子遇到一个案例:一个同事说以前一个运行很正常的包,突然间比以前慢了很多,执行时间非常长,晚上的作业调用这个包跑了几个小时也没有跑出数据.于是我在跟踪.优化过程中定位到包中一个存储过程的一段SQL,我将原SQL简化了一下(对应的表名.函数全都随机取名替换掉),大体如下所示,在一个游标中,循环更新表TMP_JO_ORDERS, 其中需要通过函数获取一些值,这些值用来更新目标表的字段值 FOR CUR_JO IN (SELECT JOB_ORDER_NO FROM TMP_JO_ORDERS WH…
1.使用MapPartitions代替map 1.1 为什么要死使用MapPartitions代替map 普通的map,每条数据都会传入function中进行计算一次:而是用MapPartitions时,function会一次接受所有partition的数据出入到function中计算一次,性能较高. 但是如果内存不足时,使用MapPartitions,一次将所有的partition数据传入,可能会发生OOM异常 1.2 如何使用 有map的操作的地方,都可以使用MapPartitions进行替…