华为gaussdb dws性能优化
一、SQL优化及分布键优化的总体原则:
以执行计划为准,在执行计划中尽量不要有重分布的运算;
二、优化方法:
1、SQL语句优化:
1.1在where条件和关联条件中,如果等式两边分辨是字段和常数,尽量将运算符(例如:to_date, to_char)放在常数,而不是字段上;
1.2如果 ta left join tb 中的关联条件比较复杂,gaussdb可能会先关联再过滤,如果关联的是两个大表,则会很费时。此时可以修改为:先做 ta inner join tb的操作,
取得符合条件的tb的业务主键,然后拿这些业务主键取得对应的子表tb2。再拿tb2替换tb,即: ta left join tb2。因为tb2是inner join后的表,所以数据量较tb有很大的减少,
所以性能会有很大的提升。
2、分布键优化:
2.1统计源表在join,group by和partition by中使用了哪些字段(以join为主)。注意:同一个关联中如果有多个字段,则算一种情况,与只有一个字段来关联的情况不同;
2.2以使用频率最高的那个字段作为分布键的候选字段,统计分布键的倾斜情况,如果倾斜程度较大,则不宜作为分布键。查询倾斜程度的语句为:
select table_skewness('英文表名', '分布键字段名称,以逗号分隔'); ---分布键最大占比。注意:最好在dbeaver界面操作,然后每个表取查询结果中的第一条记录即可。
2.3尽量使用数据颗粒度较小的字段作为分布键,例如:item_id的数据颗粒度小于policy_id,则优先使用item_id作为分布键。这个可以使用如下语句来判断:
select policy_id, count(1) as cnt
from ta t1
group by policy_id
order by cnt desc;
2.4如果没有合适的字段做分布键,则使用业务主键做分布键;如果是小表(小于100M),则设置为复制表;
2.5如果不符合上述情况,则使用ID做分布键,或者将表设置为ROUNDROBBIN表。
三、参数优化:
例如:shared_buffers和cstore_buffers的区别。
四、调度优化:
找到造成跑数时间较长的作业(阻塞作业),优先让这个作业跑完。
浙公网安备 33010602011771号