摘要:GaussDB(for MySQL)並行查詢為何快人一步?華為雲數據庫內核專家這樣說
本文分享自華為雲社區《華為雲數據庫內核專家為您揭秘:GaussDB(for MySQL)並行查詢有多快?》,原文作者:饒瓏輝 華為雲數據庫內核專家 。
近期,華為雲數據庫團隊推出了專家技術解讀系列,該系列基於GaussDB產品,每期圍繞1個核心技術點進行深度剖析。上期由華為瑞典研究所數據庫Lab首席科學家呂漫漪女士解讀《GaussDB(for MySQL)雲棧垂直集成的力量有多大?》,本期將由華為雲數據庫內核專家饒瓏輝針對呂漫漪文章中介紹的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)是一款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)支持並行執行的查詢方式,用於降低分析型查詢場景的處理時間,滿足企業級應用對查詢低時延的要求。如前面所述,並行查詢的基本實現原理是將查詢任務進行切分並分發到多個CPU核上進行計算,充分利用CPU的多核計算資源來縮短查詢時間。並行查詢的性能提升倍數,理論上與CPU的核數正相關,就是說並行度越高能夠使用的CPU核數就越多,性能提升的倍數也就越高。
下圖展示的是:在GaussDB(for MySQL)的64U實例上查詢100G數據量的COUNT(*)查詢耗時,不同的查詢並發度分別對應不同耗時,並發度越高對應的查詢耗時越短。
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)並行查詢充分調用了CPU的多核計算資源,極大降低了分析型查詢場景的處理時間,大幅度提升了數據庫性能,可以很好的滿足客戶多種復雜查詢場景的低時延要求。目前,GaussDB(for MySQL)並行查詢功能已經全網上線,更多並行查詢場景正在不斷解鎖中,歡迎大家前往華為雲官網體驗
Ps:看完覺得還不過癮?下期將由我們另一位專家為大家帶來GaussDB(for MySQL) “並行DDL” 技術解讀,更多精彩,敬請期待!
饒瓏輝,華為雲數據庫內核專家。十年以上數據庫內核研發經驗,精通MySQL內核原理和源碼。負責華為雲數據庫GaussDB(for MySQL)的高性能SQL查詢引擎功能規划、設計和研發。
了解更多信息,請訪問官網www.huawei.com/hc2021