摘要:讓數據庫性能UP!UP!UP!華為雲GaussDB(for MySQL)是這樣做的
本文分享自華為雲社區《華為海外女科學家為您揭秘:GaussDB(for MySQL)雲棧垂直集成的力量有多大?》,作者:呂漫漪 華為瑞典研究所數據庫Lab首席科學家。
如今雲計算越來越普及,雲堆棧作為雲計算的重要服務模式,其關鍵組件之一是事務數據庫服務。在實際業務場景中,應用程序依賴於可擴展、高性能的托管數據庫服務,以充分受益於雲平台。而雲數據庫也需要高效利用底層雲基礎架構,以釋放雲規模運營的潛力。
華為雲GaussDB(for MySQL)是華為基於新一代DFV(全稱Data Function Virtualisation,數據功能虛擬化)分布式存儲,采用計算存儲分離架構,完全兼容MySQL的高性能企業級雲原生分布式數據庫,以全托管服務形式為互聯網和企業客戶提供專業服務。在本文中,我將解釋常見的客戶工作負載,以及我們如何利用華為雲計算堆棧的獨特能力來處理這種工作負載。
誰是雲上的客戶?他們的工作負載是什么?
在國內,人們通常認為只有互聯網初創企業才會使用雲平台,而MySQL由於在互聯網公司中廣受歡迎,得到眾多國內企業的青睞。但實際上,企業多年前就已經開始擁抱雲概念,並在不斷深入發展中,這也是中國當前的趨勢。MySQL作為世界上最流行的開源數據庫,在所有行業和互聯網公司中都被廣泛采用。
那么,雲數據庫客戶的典型工作負載是什么?我們觀察到的兩個特點是:1)數據量越來越大。從一開始就有幾TB到幾十TB的數據量,而且隨着時間的推移,數據量會越來越大。2)簡單的插入/刪除/更新/點查和復雜的分析查詢的混合。此外,偶爾也會有DDL操作。
目前客戶面臨一個很大挑戰,即如何在數據量大的情況下提升數據庫性能。客戶希望在復雜查詢的同時,保持核心事務工作負載的吞吐量。因為企業的業務邏輯性質,查詢通常會比較復雜。幸運的是,MySQL 8.0添加了期待已久的分析行SQL支持,例如windowing function和遞歸CTE。對於非結構化數據,MySQL的JSON支持已經非常受歡迎。
GaussDB(for MySQL)架構概述
GaussDB(for MySQL)的架構構建在多租戶共享的分布式存儲系統之上,目前一個數據庫的最大數據量為128TB,一個主節點用於讀寫負載,最多15個只讀節點用於讀負載。SQL引擎是一個經過深度修改的MySQL 8.0,因此在語法和語義方面與MySQL 100% 兼容。計算節點和存儲之間用RDMA網絡。
GaussDB(for MySQL)服務使用的存儲系統是一種高可靠的跨AZ雲存儲。在公有雲上,存儲系統可以是一個有幾十或數百個節點的大型群集,橫向擴展能力比單租戶線下方案高很多倍。SQL節點將redo log寫到存儲層,頁面在存儲層materialize,此設計顯著減少了更新密集型工作負載的網絡通信。屬於單個數據庫的頁面以slice形式組織,slices分布在多個存儲節點上,這個數據分布是就是分布式查詢的基礎。
華為雲GaussDB(for MySQL)架構圖
華為獨特優勢:垂直集成
與傳統的線下數據庫不同,雲數據庫有垂直集成雲棧中所有層的能力。華為作為在雲棧各層領先的提供商,在雲領域中有着獨特的地位,有能力成為行業的領導者。
雲棧中最接近數據庫的是存儲,線下純軟數據庫需要與通用型存儲以及標准文件系統配合使用,在垂直集成方面,幾乎沒有優化空間。但在雲上,存儲和數據庫的集成能發揮更大的作用,因為雲存儲在存儲節點方面的可擴展性很強,並允許客戶根據數據量和負載動態擴展。由於雲存儲是多租戶之間共享,而且並非所有租戶都會每時每刻有大型掃描,因此我們可以將部分查詢處理卸載到存儲層,以實現更高的資源利用率。
- 通過並行提高性能(並行查詢:PQ)
提高性能的一個通用方法是並行,並行可以在多層上實現。MySQL 8.0的社區版本僅支持單線程查詢執行,無法充分利用硬件提供的所有核來執行復雜查詢。我們修改了MySQL執行器,允許使用多個線程並行執行單個查詢。與線下解決方案不同的是,雲基礎架構允許我們在計算節點上利用它的垂直擴展的能力。最大的計算節點目前有64個核,這也代表了我們通過並行查詢可以實現的最大並行力度。當大部分熱數據可以放在buffer pool里時,此優化效果最好。並行查詢將在另一篇文章中詳細解釋。
客戶工作負載不僅包含DML,還包含DDL,例如索引創建、更改列的數據類型。雖然大多數DDL在MySQL中都是在線處理的,但有些操作可能會被阻塞,而且使用邏輯復制會擴大堵塞。GaussDB(for MySQL)使用物理復制,避免了這個問題。當表很大時,DDL操作可能需要數小時才能完成。為了支持我們在雲上常見的數據量,優化DDL的必要性是顯而易見的。我們已經有一種創新的方法來處理DDL,這種創新將在后面的文章中探討。
另一個允許更高並行力度的層是存儲層,因為存儲系統可能有數百個節點和數千個核心。GaussDB(for MySQL)使用的這種雲規模的分布式存儲是我們提高查詢性能的一個關鍵基礎,結合並行查詢,有可能實現查詢性能提高100倍以上。
計算層單線程查詢執行
計算層和存儲層並行執行
- 利用雲存儲提高查詢性能 (算子下推:NDP)
GaussDB(for MySQL)中的數據以slice形式組織,分布在多個存儲節點上。我們利用這個數據分布,把算子卸載到數據所在的存儲節點上,利用當地可用的計算資源執行,無需將數據讀到計算節點中。用數據庫術語,我們將其稱為近數據處理(NDP)或算子下推。其基本原理是:將查詢處理的部分工作下推到數據所在的存儲節點上,所下推的查詢是數據密集型查詢,例如全表掃描和索引掃描,投影和某些WHERE條件的過濾,以及聚合在存儲層執行,僅將匹配行和列返回到計算節點,而不是完整的頁。除了並行執行之外,因為提取到計算節點的數據量顯著減少,這種方法還減少了網絡IO。
此外,NDP算子下推還允許充分利用緩存和存儲介質的本地帶寬,當查詢需要掃描大量數據,且數據不在Innodb緩沖池中時,卸載到存儲的效果最好。例如,下圖顯示了NDP算子下推和並行查詢將TCP-H Q12的執行時間優化了34倍。另一篇文章會單獨介紹NDP的技術細節,並提供全面的性能分析。
未來方向
GaussDB(for MySQL)的設計是為雲而生,此架構具有極其強大和靈活的垂直集成能力,計算和存儲資源解耦並且可以獨立擴展,同時在功能上緊密集成,數據庫操作可以在多層中執行。未來,數據庫功能也可以卸載到網卡和其他雲組件,而不限於計算節點和存儲。
我們相信,雲棧的深度集成是釋放雲數據庫力量的關鍵,華為在實現這一目標方面處於獨特的地位,正如GaussDB(for MySQL)所展示的那樣,未來將引領雲領域方向。
綜上所述,華為雲GaussDB(for MySQL)基於存算分離架構,通過並行查詢PQ和算子下推NDP等先進技術,極大提升了數據庫性能,實現了雲棧垂直集成力量的最大化,讓算力更快更猛。文章所述功能均已上線,歡迎大家前去華為雲官網體驗:https://www.huaweicloud.com/product/gaussdb_mysql.html,也請繼續關注我們,后續還有更多技術信息與大家分享!
呂漫漪,現任華為瑞典研究所數據庫Lab首席科學家,雲數據庫歐洲研發團隊的負責人。在數據庫領域有20多年經驗,曾經參與開發電信行業分布式高可用數據庫,在國際知名軟件公司深耕了十年MySQL技術。2020年加入華為,立志於打造世界頂端的企業級雲數據庫。
華為將於2021年9月23-25日在上海世博中心&世博展覽館舉辦華為全聯接2021,以“深耕數字化”為主題,匯聚業界思想領袖、商業精英、技術大咖、先鋒企業、生態伙伴、應用服務商以及開發者等各方,探討如何深入行業場景,把數字技術與行業知識深度結合,真正融入政企的主業務流程,解決核心業務問題,催生體驗提升、效率提升以及模式創新;並發布場景化的產品與解決方案,分享客戶伙伴的最新成果與實踐,構築開放共贏的健康生態。了解更多信息,請訪問官網www.huawei.com/hc2021