PostgreSQL 技術內幕(十二) CloudberryDB 并行化查詢之路

隨著數據驅動的應用日益增多,數據查詢和分析的量級和時效性要求也在不斷提升,對數據庫的查詢性能提出了更高的要求。為了滿足這一需求,數據庫引擎不斷經歷創新,其中并行執行引擎是性能提升的重要手段之一,逐漸成為數據庫系統的標配特性。

Cloudberry Database(簡稱為“CBDB”或“CloudberryDB”)是面向分析和AI場景打造的下一代統一型開源數據庫,搭載了PostgreSQL 14.4內核,采用Apache License 2.0許可協議。CBDB在Postgres的基礎之上,對已有的并行執行計劃進行了大量的調整和優化,實現了顯著的性能提升。

在這次的直播中,HashData數據庫內核研發專家介紹了Postgres的并行化原理,CBDB在并行化上的優化與改進、功能特性及實踐演示。以下內容根據直播文字整理。

并行化查詢介紹

PostgreSQL在很多場景下會啟用并行執行計劃,創建多個并行工作子進程,提升查詢效率。PostgreSQL的并行化包含三個重要組件:進程本身(leader進程)、gather、workers。沒有開啟并行化的時候,進程自身處理所有的數據;一旦計劃器決定某個查詢或查詢中某個部分可以使用并行的時候,就會在查詢的并行化部分添加一個gather節點,將gather節點作為子查詢樹的根節點。

HashData研發團隊在對CloudberryDB實現并行化查詢時,主要對查詢執行算子、Join的實現以及存儲引擎并行化掃描等進行了調整和優化。

圖1:非并行化查詢與并行并查詢對比示例

如圖1所示,以3個節點的集群為例,在不開啟并行化進行Not in操作時,需要耗時50多秒;而在CBDB中開啟并行化查詢后,用時僅需119毫秒,效率大約提升600倍。

在開啟并行化查詢時,有以下幾處變化:

  • Gather Motion從3:1提升至12:1,意味著集群的每個節點上有4個進程在同時并行工作;
  • Hash節點變為Parallel Hash;
  • 新算子Broadcast Workers Motion 廣播每一份數據到一組并行工作的進程中的一個,避免在共享Hash表的情況下出現數據重復。
  • 底層的掃描由Seq Scan變為Parallel Seq Scan。

并行掃描原理

在PostgreSQL中,數據以Heap表的形式存儲。在讀取時,通常有順序掃描(Seq Scan)、索引掃描(Index Scan)和位圖掃描(Bitmap scan)三種掃描方式。接下來,我們對以上三種掃描方式的并行化進行介紹。

圖2:PostgreSQL Heap表并行順序掃描示意圖

如圖2所示,在并行順序掃描時,兩個子進程的快照是統一共享的。進程之間通過原子操作動態獲得每次要讀取的Page范圍,避免頻繁使用鎖從而造成瓶頸。Page的范圍并不固定,會根據數據量和讀取進度進行動態調整,使得任務盡量均分在不同進程中,避免木桶效應。

圖3:PostgreSQL 并行索引掃描示意圖

使用索引掃描并行化查詢時,子進程只需要讀取對應索引的Page,每個進程每次只讀取一個索引Page,再讀取Heap表數據;如果Page為全體可見,可以不讀取Heap表。

圖4:PostgreSQL 并行位圖掃描示意圖

并行位圖掃描在建立底層索引的Page范圍時,只有一個進程,按照索引信息(CTID)進行順序掃描。與PostgreSQL使用leader進程不同的是,CBDB在并行化查詢時,會通過競爭的方式選擇一個X進程,X進程負責建立位圖,之后多個workers競爭讀取數據。

圖5:CloudberryDB AO表并行化查詢示意圖

除了Heap表之外,CBDB還引入了AO表,用來專門存儲以追加方式插入的元組。如圖5所示,AO表的并行掃描是通過原子操作獲取Segfiles,讓各個進程通過競爭的方式讀取數據。

并行Join實現

并行能力的優化需要從多方面來實現,僅憑優化掃描方式能實現的性能提升有限,Join的并行化改造是另一個重要方向。

在PG中有三種Join,分別為Nestloop Join、Merge Join和Hash Join,CBDB對上述三種Join均實現了并行化。此外,一大特色是增加了共享內表的Hash Join(Parallel-aware Hash Join)。

Parallel-aware Hash Join與Hash Join相似,區別在于前者是可以共享的,進程之間相互協作共同建立共享的Hash內表。

圖6:Build a Join并行化實現流程示意圖

如圖6所示,在PG非并行的情況下,構建Join時從目標對象(Table A、Table B)各選取一條綜合代價最低的執行路徑,合成Join relations路徑。在開啟并行化后,會在上述情況下增加一條并行化最佳路徑,與非并行化路徑構建Join。

數據分布并行化

在Greenplum 中,數據分布有Partitioned、Replicated、Bottleneck三種情況,它們之間可以通過Motion改變Locus的屬性進行互相轉化,實現數據重分布,CBDB也沿用了這一特性。

圖7:CBDB數據分布特性示意圖

在CBDB構建Join的時候,可以通過改變Locus進行數據相容。在轉化過程中遵循兩個原則:

  1. 在Join時,要保證數據不重復、不丟失;
  2. 要選擇代價最小的方式。

與Greenplum 不同的是,CBDB在開啟并行化之后,新建了三個新的Locus 并行模式,實現不同的數據分布:HashedWorkers、SegmentGeneralWorkers和ReplicatedWorkers。 HashedWorkers Locus表示數據分布在同一組進程之間是隨機的,但是合并后數據分布變成Hashed Locus。同理,SegmentGeneralWorkers 和ReplicatedWorkers也代表了數據在進程間隨機,合并后滿足各自的分布狀態。

此外,CBDB還實現了并行刷新物化視圖、并行Create Table AS、多階段并行化Aggregation/Limit等。通過以上諸多并行優化措施后,CBDB性能得到大幅度的提升,在特定場景下甚至可以實現千百倍的查詢效率提升,支持企業海量數據的復雜分析需求。

圖8:CBDB并行化性能曲線圖

并行化查詢是CBDB在研發立項之初就確定的產品方向,我們希望能夠通過多線程并行執行來充分釋放現代多核大內存的硬件能力,降低包括IO以及CPU計算在內的處理時間,實現響應時間的大幅下降,更好地提升用戶使用體驗和業務敏捷度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207249.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207249.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sh腳本移動文件

內容:兩臺服務器,one 和 two ,在one的指定目錄下,找到指定結尾的文件,將這個文件移到two服務器的指定路徑下,同時將one的源文件 移到 其他目錄下。 #!/bin/bash# 指定源路徑 source_path"/u01/isi/75_files_te…

One-to-Few Label Assignment for End-to-End Dense Detection閱讀筆記

One-to-Few Label Assignment for End-to-End Dense Detection閱讀筆記 Abstract 一對一(o2o)標簽分配對基于變換器的端到端檢測起著關鍵作用,最近已經被引入到全卷積檢測器中,用于端到端密集檢測。然而,o2o可能因為…

[動態規劃及遞歸記憶搜索法]1.鋼條切割問題

摘要 本系列從6道經典的動態規劃題入手,去理解動態規劃的基本思路和想法,以及動態規劃和遞歸記憶搜索法存在的某些聯系,對于每道題目,我們將用兩種方法去實現,這里講解第一道題目,作個開頭。 前言 我們知…

elasticsearch 內網下如何以離線的方式上傳任意的huggingFace上的NLP模型(國內避坑指南)

es自2020年的8.x版本以來,就提供了機器學習的能力。我們可以使用es官方提供的工具eland,將hugging face上的NLP模型,上傳到es集群中。利用es的機器學習模塊,來運維部署管理模型。配合es的管道處理,來更加便捷的處理數據…

吳恩達《機器學習》12-1:優化目標

在機器學習的旅程中,我們已經接觸了多種學習算法。在監督學習中,選擇使用算法 A 還是算法 B 的重要性逐漸減弱,而更關鍵的是如何在應用這些算法時優化目標。這包括設計特征、選擇正則化參數等因素,這些在不同水平的實踐者之間可能…

UG NX二次開發(C#)-求曲線在某一點處的法矢和切矢

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 1、前言2、在UG NX中創建一個曲線3、直接放代碼4、測試案例1、前言 最近確實有點忙了,好久沒更新博客了。今天恰好有時間,就更新下,還請家人們見諒。 今天我們講一下如何獲取一條曲線上某一條曲…

注意力機制的快速學習

注意力機制的快速學習 注意力機制 將焦點聚焦在比較重要的事物上 我(查詢對象Q),這張圖(被查詢對象V) 我看一張圖,第一眼,就會判斷那些東西對我而言比較重要,那些對于我不重要&…

Pytorch從零開始實戰12

Pytorch從零開始實戰——DenseNet算法實戰 本系列來源于365天深度學習訓練營 原作者K同學 文章目錄 Pytorch從零開始實戰——DenseNet算法實戰環境準備數據集模型選擇開始訓練可視化總結 環境準備 本文基于Jupyter notebook,使用Python3.8,Pytorch2.…

Elasticsearch、Logstash、Kibana(ELK)環境搭建

下面是 Elasticsearch、Logstash、Kibana(ELK)環境搭建的具體操作步驟: 安裝 Java ELK 是基于 Java 編寫的,因此需要先安裝 Java。建議安裝 Java 8 或以上版本。 下載并安裝 Elasticsearch Elasticsearch 是一個基于 Lucene 的…

DevEco Studio 運行項目有時會自動出現.js和.map文件

運行的時候報錯了,發現多了.js和.map,而且還不是一個,很多個。 通過查詢,好像是之前已知問題了,給的建議是手動刪除(一個一個刪),而且有的評論還說,一周出現了3次,太可怕了。 搜的過…

【網絡編程】-- 02 端口、通信協議

網絡編程 3 端口 端口表示計算機上的一個程序的進程 不同的進程有不同的端口號!用來區分不同的軟件進程 被規定總共0~65535 TCP,UDP:65535 * 2 在同一協議下,端口號不可以沖突占用 端口分類: 公有端口:0~1023 HT…

【android開發-23】android中WebView的用法詳解

1,WabView的用法 在Android中,WebView是一個非常重要的組件,它允許我們在Android應用中嵌入網頁,展示HTML內容。WebView是Android SDK中提供的標準組件,使用它我們可以很方便地將web頁面直接嵌入到Android應用中。Web…

亞信安慧AntDB數據庫中級培訓ACP上線,中國移動總部首批客戶認證通過

近日,亞信安慧AntDB數據庫ACP(AntDB Certified Professional)中級培訓課程于官網上線。在中國移動總部客戶運維團隊、現場項目部伙伴和AntDB數據庫成員的協同組織下,首批中級認證學員順利完成相關課程的培訓,并獲得Ant…

自然語言處理22-基于本地知識庫的快速問答系統,利用大模型的中文訓練集為知識庫

大家好,我是微學AI,今天給大家介紹一下自然語言處理22-基于本地知識庫的快速問答系統,利用大模型的中文訓練集為知識庫。我們的快速問答系統是基于本地知識庫和大模型的最新技術,它利用了經過訓練的中文大模型,該模型使用了包括alpaca_gpt4_data的開源數據集。 一、本地…

C //例10.3 從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然后把排好序的字符串送到磁盤文件中保存。

C程序設計 (第四版) 譚浩強 例10.3 例10.3 從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然后把排好序的字符串送到磁盤文件中保存。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差異。 代碼塊 方法…

2023_Spark_實驗二十五:SparkStreaming讀取Kafka數據源:使用Direct方式

SparkStreaming讀取Kafka數據源:使用Direct方式 一、前提工作 安裝了zookeeper 安裝了Kafka 實驗環境:kafka zookeeper spark 實驗流程 二、實驗內容 實驗要求:實現的從kafka讀取實現wordcount程序 啟動zookeeper zk.sh start# zk.sh…

生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

如果x加上x的各個數字之和得到y,就說x是y的生成元。 給出n(1≤n≤100000),求最小生成元。 無解輸出0。 例如,n216,121,2005時的解分別為198,0,1979。 我的思路很簡單&am…

element-UI中el-scrollbar的使用

在elment-ui中有這么一個滾動條&#xff0c;當鼠標over到內容部分才會顯示&#xff0c;移開鼠標之后滾動條就會隱藏起來&#xff0c;相較于原生的滾動條比較美觀。 <el-scrollbar> //將滾動條的內部的內容放在里面即可 </el-scrollbar> 在使用過程中&#xff…

SNMP陷阱監控工具

SNMP&#xff08;簡單網絡管理協議&#xff09;是網絡管理的一個重要方面&#xff0c;其中網絡設備&#xff08;包括路由器、交換機和服務器&#xff09;在滿足預定義條件時將SNMP陷阱作為異步通知發送到中央管理系統。簡而言之&#xff0c;每當發生關鍵服務器不可用或硬件高溫…