PB級數倉GaussDB(DWS)性能黑科技之并行計算技術解密

      網友投稿 753 2025-04-01

      隨著硬件系統的越來越好,數據庫運行的CPU、磁盤、內存資源都日漸增大,SQL語句的串行執行由于不能充分利用資源,已經不能滿足日益發展的需要。為此,GaussDB(DWS)開發了并行計算技術,在語句執行時可以充分利用硬件資源進行并行加速,提高執行的吞吐率。本文將詳細介紹GaussDB(DWS)并行計算技術的原理,以及其在performance信息中的展示,幫助各位開發者朋友更好地分析并行的性能,從而進行并行執行方面的調優。

      并行計算的原理很簡單,將原本一個線程的工作平均分配到多個線程來完成,示意圖如下圖所示:圖示中的關聯操作,原本需要操作四份數據,通過并行度為4的并行計算后,每個子線程僅需要處理一份數據,理論上性能提升可以達到4倍。

      通常情況下,理論上的性能提升是達不到的,因為并行計算也有其性能損耗,包括:啟動線程的代價,以及線程之間進行數據傳輸的代價。因此,只能性能損耗較低,大大低于并行帶來的收益時,并行計算的收益才比較明顯。所以,并行只有在數據量較大的場景下才能獲得較高的性能收益,非常適合于分析型的AP場景。

      通過上述分析,我們可以看出,并行計算的難點不在于如何并行,而在于如何正確選擇并行度。當數據量較小時,也許串行的性能是最好的,當數據量增大時,可以考慮進行并行。對于一個復雜的執行計劃來說,可能包含多個算子,每個算子處理的數據量都不一樣,如何綜合考慮并行度,以及處理好各算子之間的數據收發關系,將成為并行計算技術的關鍵難點。

      GaussDB(DWS)基于代價估算,根據表的數據量信息來為計劃片段生成合適的并行度,下面以TPC-DS Q48為例來看一下,GaussDB(DWS)的并行計劃長什么樣?

      select?sum?(ss_quantity) ?from???store_sales,?store,?customer_demographics,?customer_address,?date_dim ?where?s_store_sk?=?ss_store_sk ?and????ss_sold_date_sk?=?d_date_sk?and?d_year?=?1998 ?and? ?( ??( ?????cd_demo_sk?=?ss_cdemo_sk ?????and ?????cd_marital_status?=?'M' ?????and ?????cd_education_status?=?'4?yr?Degree' ?????and ?????ss_sales_price?between?100.00?and?150.00? ?????) ?or ??( ????cd_demo_sk?=?ss_cdemo_sk ?????and ?????cd_marital_status?=?'D' ?????and ?????cd_education_status?=?'Primary' ?????and ?????ss_sales_price?between?50.00?and?100.00?? ??) ?or?? ?( ????cd_demo_sk?=?ss_cdemo_sk ????and ?????cd_marital_status?=?'U' ?????and ?????cd_education_status?=?'Advanced?Degree' ?????and ?????ss_sales_price?between?150.00?and?200.00? ?) ?) ?and ?( ??( ????ss_addr_sk?=?ca_address_sk ????and ????ca_country?=?'United?States' ????and ????ca_state?in?('KY',?'GA',?'NM') ????and?ss_net_profit?between?0?and?2000??? ??) ?or ????(ss_addr_sk?=?ca_address_sk ????and ????ca_country?=?'United?States' ????and ????ca_state?in?('MT',?'OR',?'IN') ????and?ss_net_profit?between?150?and?3000 ??) ?or ????(ss_addr_sk?=?ca_address_sk ????and ????ca_country?=?'United?States' ????and ????ca_state?in?('WI',?'MO',?'WV') ????and?ss_net_profit?between?50?and?25000 ??) ?) ;

      對應的performance信息為:

      通過將performance信息轉變為計劃樹,可以得到該計劃的計劃樹如下圖所示:其中1-3號算子在CN上執行,DN上以跨線程數據傳輸的Stream算子進行分隔,一共會啟動5個線程。GaussDB(DWS)采用pipeline的迭代執行模式,線程4和5從磁盤讀取數據,其它每個Stream算子分隔的線程從子線程讀取數據,進行執行,并將結果返回給上層算子,頂層DN線程將數據返回給CN處理。通過這個圖,我們可以看出,線程1,4,5采用的并行度是1,而線程2,3采用的并行度是26。通過計劃信息,我們可以看出,8-13號算子處理的數據量較大,剛好是線程2,3處理的范圍,所以選擇了較高的并行度。

      并行計算的Stream線程仍然沿用DN間的Stream線程進行啟動和停止,但DN內部的數據傳輸改為內存拷貝進行,更節省網絡資源,但帶來一定程度的內存開銷。同時,并行度的增大也使得跨DN間數據傳輸的數據緩沖區增大,內存開銷變大。因此,大內存也是提高并行度的一個必備因素。那么線程之間是如何進行并行度的銜接呢?

      通過計劃,我們可以看出,并行場景下,Stream線程均顯示為:Streaming(type: T dop:N/M),這是在串行場景基礎上的擴展,同時也可以以線程為級別看到每個線程執行時間,處理的行數和使用的內存。在串行場景下,我們支持三種類型的Stream算子,分別為redistribute, broadcast和gather,詳細介紹參見《GaussDB(DWS)性能調優系列基礎篇二:大道至簡explain分布式計劃》中第一章節介紹。

      并行場景是對串行場景中DN上的redistribute和broadcast類型Stream算子進行擴充,包括以下幾類:

      1)Streaming(type: SPLIT REDISTRIBUTE):同串行場景下的Redistribute,但以線程為單位進行數據傳輸,每條元組發送給一個目的線程。

      2)Streaming(type: SPLIT BROADCAST):同串行場景下的Broadcast,但以線程為單位進行數據傳輸,每個線程都將收到全量數據。

      3)Streaming(type: LOCAL REDISTRIBUTE):作用是DN內部根據當前分布鍵進行數據Redistribute。通常作用于基表掃描后,因為基表掃描是按頁面進行線程劃分,此時線程間并不是按DN的分布鍵分布的,需要增加該DN內重分布操作。

      4)Streaming(type: LOCAL BROADCAST):作用是DN內部進行數據Broadcast,每個線程把數據發送給這個DN的所有線程,每個線程獲得該DN的全量數據。5)Streaming(type: LOCAL GATHER):作用是DN內部把數據從多線程匯總到一個線程。

      注意:“dop:N/M”表示發送端的dop為M,接收端的dop為N,從而完成從M個線程的并行度轉變為N個線程并行度的任務。

      PB級數倉GaussDB(DWS)性能黑科技之并行計算技術解密

      在GaussDB(DWS)中,我們增加了參數query_dop,來控制語句的并行度,取值如下:

      1)query_dop=1,串行執行,默認值

      2)query_dop=[2..N],指定并行執行并行度

      3)query_dop=0,自適應調優,根據系統資源和語句復雜度情況自適應選擇并行度

      由于開啟并行會占用較多的內存,所以目前GaussDB(DWS)的默認并行度為1。在內存較大的環境下,可以通過手動設置query_dop達到并行加速的目的。通常情況下,我們可以考慮首先設置query_dop=0,查看語句的執行計劃、performance信息和性能。在performance信息的下方Query Summary一欄,可以看到自適應dop選擇的信息,例如:TPC-DS Q48 dop選擇信息如下圖所示,可以看出初步選定的initial dop為24,最終確定的final dop為26。dop的選擇會綜合考慮各種因素,其信息也在圖中顯示出來。

      由于自適應選擇并行度是根據語句復雜度和系統資源利用情況來進行選擇,而系統資源利用情況是獲取前一段時間的資源利用情況,有可能出現不準確的情況,此時就需要人為來設置并行度了。人為設置并行度,并不是設置越大越好,dop設置過大,會導致系統中的線程數量急劇增多,導致CPU沖突進行線程切換的額外開銷。要想人為設置并行度,同樣需要使用單機CPU核數和語句復雜程度進行考量。我們定義單機CPU核數/單機DN數為每個DN可用的CPU核數x,然后根據串行計劃中DN Stream算子的個數初步判定語句的復雜度y(例如下圖TPC-H Q1計劃中只有一個Stream節點,則y為1),單并發時,使用x/y的值設置query_dop。并發場景,再除以并發數p設置query_dop。由于此公式為粗略估計值,因此在設置時可以考慮擴大搜索范圍,來尋找合適的并行度。

      在并發場景下,GaussDB(DWS)還支持max_active_statements來控制執行語句的個數,當語句的個數超過CPU核數時,可以考慮使用該參數限制并發數,然后再設置合理的query_dop進行調優。還是以剛才的示例為例,單機有96核,2個DN,則每個DN可用48核,則同時執行6個TPC-H Q1查詢時,并行度可以設置為8。

      通過這篇文章,我們了解了GaussDB(DWS)并行計算技術的原理以及調優策略。希望廣大開發者朋友們能夠在實踐中嘗試該技術,更好地進行性能優化。

      Gauss AP SQL EI企業智能 HUAWEI CONNECT 數據倉庫服務 GaussDB(DWS)

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:什么是PCB可制造性設計
      下一篇:TI Sitara AM335x一款高性能嵌入式32位工業級Cortex-A8開發板
      相關文章
      亚洲av伊人久久综合密臀性色| 亚洲人成电影网站国产精品| 亚洲αv久久久噜噜噜噜噜| 亚洲精品亚洲人成在线观看下载 | 国产午夜亚洲精品不卡| 亚洲а∨天堂久久精品9966| 国产精品亚洲综合五月天| 亚洲av成人综合网| 丁香婷婷亚洲六月综合色| 亚洲www在线观看| 在线观看亚洲AV日韩A∨| 亚洲人成欧美中文字幕| 亚洲精品人成网线在线播放va | 久久精品国产亚洲沈樵| 亚洲国产另类久久久精品黑人| 国产亚洲一区二区精品| 国产V亚洲V天堂无码久久久| 亚洲成在人线av| 久久久久无码精品亚洲日韩 | 九月丁香婷婷亚洲综合色| 亚洲VA成无码人在线观看天堂| 亚洲色精品vr一区二区三区| 亚洲国产精品无码专区影院| 亚洲成a人片在线观看中文动漫| 亚洲AV天天做在线观看| 亚洲色偷偷av男人的天堂| 亚洲午夜电影在线观看高清| 国产成+人+综合+亚洲专| 亚洲精品国产精品| 亚洲国产V高清在线观看| 曰韩亚洲av人人夜夜澡人人爽| 亚洲精品无码久久久久sm| 亚洲天天做日日做天天欢毛片 | 亚洲欧洲国产经精品香蕉网| 亚洲一级毛片免费看| 亚洲日本VA午夜在线电影| 成人亚洲综合天堂| 亚洲精品无码专区在线在线播放 | 亚洲伊人tv综合网色| 亚洲乱人伦精品图片| 亚洲狠狠婷婷综合久久蜜芽|