本文档基于TPC-H测试PolarDB MySQL版8.0.1和8.0.2版本集群版的OLAP负载性能,您可以按照本文介绍自行测试对比,快速了解数据库系统的性能。
并行查询简介
PolarDB MySQL版8.0版本集群版推出并行查询(Parallel Query)框架。当您的查询数据量到达一定阈值,就会自动启动并行查询框架,从而使查询耗时指数级下降。具体请参见概述。
PolarDB MySQL版8.0.1版本中,并行查询在存储层将数据分片到不同的线程上,多个线程并行计算,将结果流水线汇聚到总线程,最后由总线程做简单归并将结果返回给用户,提高查询效率。
PolarDB MySQL版8.0.2版本中,并行查询将线性加速能力提升了一个等级,引入了多阶段并行计算能力。基于代价优化为更为灵活的并行执行计划,改进了8.0.1版本并行查询可能存在的Leader单点瓶颈和Worker负载不均衡的问题。具体来说,在存储层仍然将数据分片到不同的线程上,多个线程并行计算,并可能分发到下一个阶段的并行Worker组中,最终并行计算结果汇总到Leader并返回给用户,大幅提升了并行执行能力。
并行查询利用多核CPU的并行处理能力,以8核32 GB规格的集群为例,并行查询示意图如下所示。
下文将介绍8.0.1和8.0.2版本并行查询参数取值分别设置为如下表所示时,PolarDB集群负载并行查询测试方法与执行结果。关于如何配置参数,具体操作步骤请参见设置集群参数和节点参数。
8.0.1
参数
默认值
优化后的值
loose_parallel_degree_policy
REPLICA_AUTO
TYPICAL
loose_max_parallel_degree
0
16
8.0.2
参数
默认值
优化后的值
loose_parallel_degree_policy
REPLICA_AUTO
TYPICAL
loose_parallel_query_switch
''
'force_run_using_planning_dop=on'
loose_optimizer_switch
''
'hash_join_cost_based=off'
loose_max_parallel_degree
0
16
当parallel_degree_policy
参数被设定为TYPICAL时,PolarDB在选择查询并行度时将不会考虑数据库的当前负载情况(例如CPU使用率等),而是会尽可能地与max_parallel_degree
参数所设定的并行度保持一致。
执行结果
8.0.1版本的测试结果如下所示:
查询
默认值耗时(秒)
优化后的值耗时(秒)
Q1
2495.05
86.63
Q2
13.18
1.46
Q3
345.56
28.67
Q4
63.78
6.26
Q5
251.48
258.55
Q6
241.7
16.4
Q7
174.91
171.85
Q8
560.82
572.63
Q9
450.68
42.17
Q10
895.75
270.29
Q11
30.03
11.6
Q12
266.14
17.65
Q13
780.74
127.1
Q14
72.04
7.57
Q15
261.77
56.55
Q16
40.69
24.29
Q17
57.75
13.04
Q18
257.66
136.79
Q19
19.17
1.52
Q20
143.97
49.72
Q21
293.99
37.79
Q22
18.81
2.15
8.0.2版本的测试结果如下所示:
查询
默认值耗时(秒)
优化后的值耗时(秒)
Q1
573.34
89.65
Q2
3.62
0.66
Q3
96.89
28.52
Q4
18.66
6.41
Q5
150.93
28.93
Q6
68.13
17.13
Q7
114.56
17.39
Q8
333.36
54.32
Q9
136.26
42.15
Q10
325.19
128.55
Q11
11.49
4.53
Q12
121.68
17.54
Q13
281.1
126.2
Q14
23.34
7.59
Q15
77.22
33.02
Q16
12.15
8.96
Q17
4.51
1.13
Q18
325.05
133.07
Q19
5.37
1.5
Q20
70.31
90.75
Q21
171.81
29.87
Q22
6.05
2.16