華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?

joytoy發表於2021-09-11
摘要:GaussDB(for MySQL)並行查詢為何快人一步?華為雲資料庫核心專家這樣說

本文分享自華為雲社群《》,原文作者:饒瓏輝 華為雲資料庫核心專家 。

近期,華為雲資料庫團隊推出了專家技術解讀系列,該系列基於GaussDB產品,每期圍繞1個核心技術點進行深度剖析。上期由華為瑞典研究所資料庫Lab首席科學家呂漫漪女士解讀,本期將由華為雲資料庫核心專家饒瓏輝針對呂漫漪文章中介紹的GaussDB(for MySQL)關鍵特性之“並行查詢”(PQ: Parallel Query)進行詳細解讀。

一般來講,資料庫有兩個非常廣泛的應用場景,分別是“事務處理”和“查詢分析”。開源MySQL作為國內使用最多的關係型資料庫之一,很早在5.1版本就開始支援事務處理的場景。隨著技術演進,開源MySQL在版本更新迭代過程中不但持續增強事務處理能力,並且最新的MySQL 8.0版本已經開始支援許多查詢分析型的特性,比如Window function、CTE、Hash Join、列直方圖、並行COUNT計算等等。

華為雲GaussDB(for MySQL) 作為華為最新一代高效能企業級分散式關係型資料庫,根植MySQL開源社群,不但繼承了開源的所有查詢分析特性,還面向企業級應用查詢負載開發了許多增強特性,如並行查詢、查詢計算下推(NDP: Near Data Processing)等等。

在傳統資料解決方案中,“事務處理”和“查詢分析”分別放在不同型別的庫上完成,這是因為事務處理以資料增、刪、改,以及小資料查詢為主,更加註重實時響應、高吞吐和事務性要求。而“查詢分析”以大資料量複雜計算為主,更加註重資料容量擴充套件性、複雜計算能力等。下圖展示的是傳統資料解決方案:OLTP資料庫滿足線上事務處理需求,OLAP資料倉儲滿足分析型查詢需求。

華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?

客戶需要什麼樣的資料庫?

當前業界對資料庫的普遍需求是:實時響應、高吞吐、滿足事務性、良好的擴充套件性以及支援複雜查詢。這對於使用者而言有很多好處:首先是降低部署成本,使用者只需要部署一套資料庫叢集即可;其次是解決了資料遷移時延的問題,更新和查詢執行在同一套叢集中;還有就是支援事務性查詢,滿足一致性、原則性、隔離性和永續性要求,查詢結果會更加準確。

針對使用者需求,華為雲原生資料庫GaussDB(for MySQL)透過技術創新,具備了同時滿足事務處理和查詢分析的能力。GaussDB(for MySQL)是一款100%相容MySQL語法的OLTP事務關係型資料庫,架構上採用了計算和儲存分離的設計,計算資源和儲存資源可以分別進行獨立線上擴充套件。儲存層使用了華為自研分散式儲存系統DFV(資料功能虛擬化: Data Function Virtualisation),最大可以擴充套件到128TB容量,單個計算節點最大規格可支援64核CPU,512G的記憶體容量,最多可以支援1個寫節點和15個只讀節點。

除了強大的資源擴充套件能力,GaussDB(for MySQL)針對事務處理和查詢分析分別作了最佳化,極大增強了事務讀寫和查詢分析的能力。本文將重點介紹增強的查詢分析能力之一:並行查詢。

查詢分析提升之道:釋放CPU多核計算資源

眾所周知,軟體計算能力的提升一方面得益於CPU硬體能力的增強,另一方面也得益於軟體設計層面能夠充分利用CPU的計算資源。當前處理器普遍採用多核設計,如GaussDB(for MySQL)單個節點最多可以支援64核的CPU。單執行緒查詢的方式至多能用滿一個核的CPU資源,效能提升程度有限,遠遠無法滿足企業大資料量查詢場景下對降低時延的要求。因此,複雜的查詢分析型計算過程必須考慮充分利用CPU的多核計算資源,讓多個核參與到平行計算任務中才能大幅度提升查詢計算的處理效率。

下圖是使用CPU多核資源平行計算一個表的count(*)過程的例子:表資料進行切塊後分發給多個核進行平行計算,每個核計算部分資料得到一箇中間count(*)結果,並在最後階段將所有中間結果進行聚合得到最終結果。

華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?

GaussDB(for MySQL)查詢分析提升秘笈:並行查詢

GaussDB(for MySQL)支援並行執行的查詢方式,用於降低分析型查詢場景的處理時間,滿足企業級應用對查詢低時延的要求。如前面所述,並行查詢的基本實現原理是將查詢任務進行切分並分發到多個CPU核上進行計算,充分利用CPU的多核計算資源來縮短查詢時間。並行查詢的效能提升倍數,理論上與CPU的核數正相關,就是說並行度越高能夠使用的CPU核數就越多,效能提升的倍數也就越高。

下圖展示的是:在GaussDB(for MySQL)的64U例項上查詢100G資料量的COUNT(*)查詢耗時,不同的查詢併發度分別對應不同耗時,併發度越高對應的查詢耗時越短。

華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?

GaussDB(for MySQL)支援多種型別的並行查詢運算元,以滿足客戶各種不同複雜查詢場景。當前最新版本(2021-9)已經支援的並行查詢場景包括:

  • 主鍵查詢、二級索引查詢
  • 主鍵掃描、索引掃描、範圍掃描、索引等值查詢,索引逆向查詢
  • 並行條件過濾(where/having)、投影計算
  • 並行多表JOIN(包括HashJoin、NestLoopJoin、SemiJoin等)查詢
  • 並行聚合函式運算,包括SUM/AVG/COUNT/BIT_AND/BIT_OR/BIT_XOR等
  • 並行表示式運算,包括算術運算、邏輯運算、一般函式運算及混合運算等
  • 並行分組group by、排序order by、limit/offset、distinct運算
  • 並行UNION、子查詢、檢視查詢
  • 並行分割槽表查詢
  • 並行查詢支援的資料型別包括:整型、字元型、時間型別、浮點型等等
  • 其他查詢

下圖是GaussDB(for MySQL)並行查詢針對TPC-H的22條查詢場景所做的效能測試結果,測試資料量為100G,併發執行緒資料是32。下圖展示了並行查詢相比傳統MySQL單執行緒查詢的效能提升情況:32並行執行下,單表複雜查詢最高提升26倍效能,普遍提升20+倍效能。多表JOIN複雜查詢最高提升近27倍效能,普遍提升10+倍效能。子查詢效能也有較大提升。

華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?

總而言之,GaussDB(for MySQL)並行查詢充分呼叫了CPU的多核計算資源,極大降低了分析型查詢場景的處理時間,大幅度提升了資料庫效能,可以很好的滿足客戶多種複雜查詢場景的低時延要求。目前,GaussDB(for MySQL)並行查詢功能已經全網上線,更多並行查詢場景正在不斷解鎖中,

Ps:看完覺得還不過癮?下期將由我們另一位專家為大家帶來GaussDB(for MySQL) “並行DDL” 技術解讀,更多精彩,敬請期待!

華為雲資料庫核心專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?

饒瓏輝,華為雲資料庫核心專家。十年以上資料庫核心研發經驗,精通MySQL核心原理和原始碼。負責華為雲資料庫GaussDB(for MySQL)的高效能SQL查詢引擎功能規劃、設計和研發。

瞭解更多資訊,請訪問官網

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4650/viewspace-2795889/,如需轉載,請註明出處,否則將追究法律責任。

相關文章