本文檔基于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