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