openGauss學(xué)習(xí)筆記-57 openGauss 高級特性-并行查詢57.1 適用場景與限制57.2 資源對SMP性能的影響57.3 其他因素對SMP性能的影響57.4 配置步驟
openGauss學(xué)習(xí)筆記-57 openGauss 高級特性-并行查詢
openGauss的SMP并行技術(shù)是一種利用計(jì)算機(jī)多核CPU架構(gòu)來實(shí)現(xiàn)多線程并行計(jì)算,以充分利用CPU資源來提高查詢性能的技術(shù)。在復(fù)雜查詢場景中,單個(gè)查詢的執(zhí)行較長,系統(tǒng)并發(fā)度低,通過SMP并行執(zhí)行技術(shù)實(shí)現(xiàn)算子級的并行,能夠有效減少查詢執(zhí)行時(shí)間,提升查詢性能及資源利用率。SMP并行技術(shù)的整體實(shí)現(xiàn)思想是對于能夠并行的查詢算子,將數(shù)據(jù)分片,啟動(dòng)若干個(gè)工作線程分別計(jì)算,最后將結(jié)果匯總,返回前端。SMP并行執(zhí)行增加數(shù)據(jù)交互算子(Stream),實(shí)現(xiàn)多個(gè)工作線程之間的數(shù)據(jù)交互,確保查詢的正確性,完成整體的查詢。
57.1 適用場景與限制
SMP特性通過算子并行來提升性能,同時(shí)會占用更多的系統(tǒng)資源,包括CPU、內(nèi)存、I/O等等。本質(zhì)上SMP是一種以資源換取時(shí)間的方式,在合適的場景以及資源充足的情況下,能夠起到較好的性能提升效果;但是如果在不合適的場景下,或者資源不足的情況下,反而可能引起性能的劣化。SMP特性適用于分析類查詢場景,這類場景的特點(diǎn)是單個(gè)查詢時(shí)間較長,業(yè)務(wù)并發(fā)度低。通過SMP并行技術(shù)能夠降低查詢時(shí)延,提高系統(tǒng)吞吐性能。然而在事務(wù)類大并發(fā)業(yè)務(wù)場景下,由于單個(gè)查詢本身的時(shí)延很短,使用多線程并行技術(shù)反而會增加查詢時(shí)延,降低系統(tǒng)吞吐性能。
-
適用場景
-
支持并行的算子:計(jì)劃中存在以下算子支持并行。
Scan:支持行存普通表和行存分區(qū)表順序掃描、列存普通表和列存分區(qū)表順序掃描。
Join:HashJoin、NestLoop
Agg:HashAgg、SortAgg、PlainAgg、WindowAgg(只支持partition by,不支持order by)。
Stream:Local Redistribute、Local Broadcast
其他:Result、Subqueryscan、Unique、Material、Setop、Append、VectoRow
-
SMP特有算子:為了實(shí)現(xiàn)并行,新增了并行線程間的數(shù)據(jù)交換Stream算子供SMP特性使用。這些新增的算子可以看做Stream算子的子類。
Local Gather:實(shí)現(xiàn)實(shí)例內(nèi)部并行線程的數(shù)據(jù)匯總。
Local Redistribute:在實(shí)例內(nèi)部各線程之間,按照分布鍵進(jìn)行數(shù)據(jù)重分布。
Local Broadcast:將數(shù)據(jù)廣播到實(shí)例內(nèi)部的每個(gè)線程。
Local RoundRobin:在實(shí)例內(nèi)部各線程之間實(shí)現(xiàn)數(shù)據(jù)輪詢分發(fā)。
-
示例說明,以TPCH Q1的并行計(jì)劃為例。
[圖片上傳失敗...(image-7cb3c8-1693581020593)]
在這個(gè)計(jì)劃中,實(shí)現(xiàn)了Scan以及HashAgg算子的并行,并新增了Local Gather數(shù)據(jù)交換算子。其中3號算子為Local Gather算子,上面標(biāo)有的“dop: 1/4”表明該算子的發(fā)送端線程的并行度為4,而接受端線程的并行度為1,即下層的4號HashAggregate算子按照4并行度執(zhí)行,而上層的1~2號算子按照串行執(zhí)行,3號算子實(shí)現(xiàn)了實(shí)例內(nèi)并行線程的數(shù)據(jù)匯總。
通過計(jì)劃Stream算子上表明的dop信息即可看出各個(gè)算子的并行情況。
-
-
非適用場景
索引掃描不支持并行執(zhí)行。
MergeJoin不支持并行執(zhí)行。
WindowAgg order by不支持并行執(zhí)行。
cursor不支持并行執(zhí)行。
存儲過程和函數(shù)內(nèi)的查詢不支持并行執(zhí)行。
不支持子查詢subplan和initplan的并行,以及包含子查詢的算子的并行。
查詢語句中帶有median操作的查詢不支持并行執(zhí)行。
帶全局臨時(shí)表的查詢不支持并行執(zhí)行。
物化視圖的更新不支持并行執(zhí)行。
57.2 資源對SMP性能的影響
SMP架構(gòu)是一種利用富余資源來換取時(shí)間的方案,計(jì)劃并行之后必定會引起資源消耗的增加,包括CPU、內(nèi)存、I/O等資源的消耗都會出現(xiàn)明顯的增長,而且隨著并行度的增大,資源消耗也隨之增大。當(dāng)上述資源成為瓶頸的情況下,SMP無法提升性能,反而可能導(dǎo)致數(shù)據(jù)庫實(shí)例整體性能的劣化。下面對各種資源對SMP性能的影響情況分別進(jìn)行說明。
-
CPU資源
在一般客戶場景中,系統(tǒng)CPU利用率不高的情況下,利用SMP并行架構(gòu)能夠更充分地利用系統(tǒng)CPU資源,提升系統(tǒng)性能。但當(dāng)數(shù)據(jù)庫服務(wù)器的CPU核數(shù)較少,CPU利用率已經(jīng)比較高的情況下,如果打開SMP并行,不僅性能提升不明顯,反而可能因?yàn)槎嗑€程間的資源競爭而導(dǎo)致性能劣化。
-
內(nèi)存資源
查詢并行后會導(dǎo)致內(nèi)存使用量的增長,但每個(gè)算子使用內(nèi)存上限仍受到work_mem等參數(shù)的限制。假設(shè)work_mem為4GB,并行度為2,那么每個(gè)并行線程所分到的內(nèi)存上限為2GB。在work_mem較小或者系統(tǒng)內(nèi)存不充裕的情況下,使用SMP并行后,可能出現(xiàn)數(shù)據(jù)下盤,導(dǎo)致查詢性能劣化的問題。
-
I/O資源
要實(shí)現(xiàn)并行掃描必定會增加I/O的資源消耗,因此只有在I/O資源充足的情況下,并行掃描才能夠提高掃描性能。
57.3 其他因素對SMP性能的影響
除了資源因素外,還有一些因素也會對SMP并行性能造成影響。例如分區(qū)表中分區(qū)數(shù)據(jù)不均,以及系統(tǒng)并發(fā)度等因素。
-
數(shù)據(jù)傾斜對SMP性能的影響
當(dāng)數(shù)據(jù)中存在嚴(yán)重?cái)?shù)據(jù)傾斜時(shí),并行效果較差。例如某表join列上某個(gè)值的數(shù)據(jù)量遠(yuǎn)大于其他值,開啟并行后,根據(jù)join列的值對該表數(shù)據(jù)做hash重分布,使得某個(gè)并行線程的數(shù)據(jù)量遠(yuǎn)多于其他線程,造成長尾問題,導(dǎo)致并行后效果差。
-
系統(tǒng)并發(fā)度對SMP性能的影響
SMP特性會增加資源的使用,而在高并發(fā)場景下資源剩余較少。所以,如果在高并發(fā)場景下,開啟SMP并行,會導(dǎo)致各查詢之間嚴(yán)重的資源競爭問題。一旦出現(xiàn)了資源競爭的現(xiàn)象,無論是CPU、I/O、內(nèi)存,都會導(dǎo)致整體性能的下降。因此在高并發(fā)場景下,開啟SMP往往不能達(dá)到性能提升的效果,甚至可能引起性能劣化。
57.4 配置步驟
觀察當(dāng)前系統(tǒng)負(fù)載情況,如果系統(tǒng)資源充足(資源利用率小于50%),執(zhí)行2;否則退出。
設(shè)置query_dop=1(默認(rèn)值),利用explain打出執(zhí)行計(jì)劃,觀察計(jì)劃是否符合適用場景與限制中的適用場景。如果符合,進(jìn)入3。
設(shè)置query_dop=value,不考慮資源情況和計(jì)劃特征,強(qiáng)制選取dop為1或value。
在符合條件的查詢語句執(zhí)行前設(shè)置合適的query_dop值,在語句執(zhí)行結(jié)束后關(guān)閉query_dop。舉例如下。
openGauss=# SET query_dop = 4;
openGauss=# SELECT COUNT(*) FROM t1 GROUP BY a;
......
openGauss=# SET query_dop = 1;
> [圖片上傳失敗...(image-a7e755-1693581020593)]
>
> **說明:**
>
> * 資源許可的情況下,并行度越高,性能提升效果越好。
>
>
> * SMP并行度支持會話級設(shè)置,推薦客戶在執(zhí)行符合要求的查詢前,打開smp,執(zhí)行結(jié)束后,關(guān)閉smp。以免在業(yè)務(wù)峰值時(shí),對業(yè)務(wù)造成沖擊。
?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進(jìn)步的財(cái)富!
