openGauss學(xué)習(xí)筆記-57 openGauss 高級特性-并行查詢

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 配置步驟

  1. 觀察當(dāng)前系統(tǒng)負(fù)載情況,如果系統(tǒng)資源充足(資源利用率小于50%),執(zhí)行2;否則退出。

  2. 設(shè)置query_dop=1(默認(rèn)值),利用explain打出執(zhí)行計(jì)劃,觀察計(jì)劃是否符合適用場景與限制中的適用場景。如果符合,進(jìn)入3。

  3. 設(shè)置query_dop=value,不考慮資源情況和計(jì)劃特征,強(qiáng)制選取dop為1或value。

  4. 在符合條件的查詢語句執(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)富!

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容