Greenplum 数据库调优

怎甘沉沦 提交于 2020-02-29 01:39:55

Greenplum 数据库调优

目录

Greenplum 数据库调优 1

目录 1

1 Greenplum查询处理回顾 2

1.1 Master 把查询语句分发到segment 2

2 Greenplum数据库调优 3

2.1 系统资源 3

2.2 硬件问题 4

2.3 资源管理 5

2.3.1 查看resource queue的参数 5

2.3.2 设置临时的内存大小 6

2.3.3 当发生数据溢出时添加内存的大小 6

2.3.4 受影响的系统的参数 7

2.3.5 查看一些有用的视图 7

2.4 统计信息不准确 8

2.4.1 创建两张表 8

2.4.2 使用EXPLAIN查看执行计划 8

2.4.3 使用ANALYZE执行统计信息 9

2.4.4 以下情况都需要执行ANALYZE 10

2.5 数据倾斜 10

2.5.1 数据倾斜实例 10

2.5.2 使用视图查看表的倾斜 11

2.5.3 改变数据倾斜问题 11

2.6 计算倾斜 12

2.6.1 关联条件倾斜 12

2.6.2 多计算聚集 12

2.6.3 减少计算倾斜问题 13

2.7 数据广播 13

2.7.1 查看表是不是出现了Broadcast 13

2.7.2 改变planner之后运行 14

2.7.3 修改GUC来设定优化器 14

2.8 多阶段聚集 15

2.8.1 多阶段聚集关闭的情况 15

2.8.2 多阶段聚集打开的情况 15

2.8.3 GUC会影响优化器对多阶段聚集的选择 16

2.9 分区裁剪 17

2.9.1 定义分区 17

2.9.2 使用查询计划查看分区 17

2.9.2.1 planner 分区 17

2.9.2.2 ORCA分区 18

2.9.2.3 最优查询条件 18

3 一些最佳实战 19

3.1 最佳实践注意点 19

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 最佳实践注意点

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!