Greenplum 数据库调优
目录
1 Greenplum查询处理回顾
1.1 Master 把查询语句分发到segment
1、Master接受查询语句并生成查询计划
2、Master 把查询计划分发到Segment,分发模式有两种分别是Parallel和Targeted
3、Segment并发在各自本地的数据集上执行计划
a、Slice : A portion of the plan that segment can work on independently
b、Gang : Related processes that are working on the same slice of the query plan but on different segments
4、Master 收集结果并返回给客户端
2 Greenplum数据库调优
使用EXPLAIN ANALYZE 查看执行计划
2.1 系统资源
按照不同的问题使用不同的shell命令
2.2 硬件问题
使用Greenplum自带的gpcheckperf 命令检测硬件问题
2.3 资源管理
2.3.1 查看resource queue的参数
资源管理主要与resource queue中的PRIORITY和MEMORY_LIMIT有关
2.3.2 设置临时的内存大小
2.3.3 当发生数据溢出时添加内存的大小
使用EXPLAIN ANALYZE 查看执行计划时发现Work_mem used(用户开销内存)比Work_mem wanted(用户需要执行的内存)小时,可能数据文件溢出到磁盘上,需要临时添加内存。
2.3.4 受影响的系统的参数
2.3.5 查看一些有用的视图
首先系统视图pg_stat_activity和pg_locks来查看当前是否有锁的等待
2.4 统计信息不准确
2.4.1 创建两张表
2.4.2 使用EXPLAIN查看执行计划
在以下的计划中可以看出全表扫描了并hash了表t1,并返回rows=1行数据,耗时851.390ms
2.4.3 使用ANALYZE执行统计信息
在以下中可以看出执行了analyze后,全表扫描和Hash了t2,返回了rows=33325行数据,耗时553.725ms
2.4.4 以下情况都需要执行ANALYZE
2.5 数据倾斜
2.5.1 数据倾斜实例
使用EXPLAIN ANALYZE出现以下信息说明执行了3个workers,每个workers平均执行了366666.7行的数据,在seg0上最大执行了1033348行数据,说明大部分的数据都在seg0上,有数据倾斜的现象。
2.5.2 使用视图查看表的倾斜
使用gp_skew_coefficients和gp_skew_idle_fractions来查看表的倾斜的情况,其中gp_skew_coefficients是标准偏差除以平均值,值越低越好。gp_skew_idle_fractions是表扫描期间空闲的系统百分比,超过10%的表应该评估表的分布策略。
2.5.3 改变数据倾斜问题
使用改变分布键来改变数据倾斜的问题
2.6 计算倾斜
2.6.1 关联条件倾斜
当进行关联条件关联时,两个关连建如果分配不均匀的话可能也会出现倾斜
2.6.2 多计算聚集
多计算倾斜就是经过了第一步的处理又经过了第二部的处理,如下例:经过了group by之后有进行了avg计算
2.6.3 减少计算倾斜问题
2.7 数据广播
2.7.1 查看表是不是出现了Broadcast
2.7.2 改变planner之后运行
2.7.3 修改GUC来设定优化器
如果配置了gp_segment_for_planner后,优化器会选择最优的一个来执行
2.8 多阶段聚集
2.8.1 多阶段聚集关闭的情况
以下是把gp_enable_multiphase_agg参数关闭的情况下,耗时13770.833ms,数据库默认的这个参数是打开的。
2.8.2 多阶段聚集打开的情况
以下是gp_enable_multiphase_agg打开的情况下,运行了三次聚集,运行耗时6041.057ms
2.8.3 GUC会影响优化器对多阶段聚集的选择
如果参数gp_enable_multiphase_agg是打开的,GUC优化器会选择一个最优的优化器来执行。
2.9 分区裁剪
2.9.1 定义分区
2.9.2 使用查询计划查看分区
2.9.2.1 planner 分区
2.9.2.2 ORCA分区
2.9.2.3 最优查询条件
如果在分区上做一个查询的时候,能在查询过滤条件个分区条件在一起则是最优的查询语句。
3 一些最佳实战
3.1 最佳实践注意点
来源:CSDN
作者:小徐xfg
链接:https://blog.csdn.net/xfg0218/article/details/104564209