天天看點

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

中原標準時間 2020/5/4 青年節,TPC(全球最知名非盈利的資料管理系統評測基準标準化組織)官網正式上線AnalyticDB TPC-DS成績,AnalyticDB通過嚴苛的TPC-DS全流程測試,性能QphDS分數為14895566,成本效益分數為0.08CNY,相比較基于Spark深度優化版的前世界紀錄性能提升29%并且機關成本僅為其1/3,成為TPC-DS官方榜單上全球性能、成本效益雙雙領先的資料倉庫,這是繼2019/4/26之後再次獲得全球領先的成績!榜單截圖如下,詳細榜單請參見: TPC-DS Results

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

随着雲時代全面到來,企業資料需求不斷變化,從傳統的Big Data逐漸向Fast Data演進,主要表現在如下4個方面(部分資料參考Gartner、IDC):

• 資料規模爆炸性增長,到2020年全球資料預計會到40ZB,而到2025年還會繼續增長4倍以上。

• 企業上雲速度明顯加快,預計到2025年企業50%的資料都是雲存儲,而企業75%的資料庫都運作在雲上。

• 資料的實時化需求強烈,預計2025年全球資料進行中會有30%是實時資料處理。

• 資料智能化趨勢明顯,随着AI和5G技術的發展,非結構化資料快速增長,到2025年預計80%的資料都是非結構化資料。

在資料爆炸性增長、企業全面上雲的大背景下,海量資料的存儲、處理的性能及成本效益是雲原生數倉面向未來最核心的關鍵技術名額之一,TPC官方推出的TPC-DS基準測試是對一個資料倉庫從資料導入、查詢性能(單并發、多并發)、查詢複雜度(覆寫星型模型/雪花模型、複雜Window function支援)、可用性(資料一緻、壞盤容錯處理等)全方面的嚴格考核,并需要進行全面嚴苛的審計,是目前全球衡量一個資料倉庫成熟度、競争力的核心基準測試。

AnalyticDB作為雲時代的雲原生資料倉庫,參與TPC-DS基準測試是我們提升自研産品産品化能力、核心技術突破驗證的重要過程,也是我們技術走向全球領先的必經之路,這個過程中的核心技術突破正在幫我們的客戶提升性能進一步提升實時化程序、大幅降低成本,一起進入資料庫與大資料一體化、業務線上化的新時代。

1. AnalyticDB介紹

AnalyticDB(簡稱ADB,原ADS) 是阿裡巴巴自主研發、唯一經過超大規模以及核心業務驗證的PB級實時資料倉庫,自2012年第一次在集團釋出上線以來,至今已累計疊代釋出近百個版本,支撐起集團内的電商、廣告、物流、文娛、旅遊、風控等衆多線上分析業務。AnalyticDB于2014年在阿裡雲開始正式對外輸出,支撐行業既包括傳統的大中型企業和政府機構,也包括衆多的網際網路公司,覆寫外部十幾個行業。

AnalyticDB MySQL 3.0 (簡稱ADB 3.0)是在過去8年沉澱的基礎上,基于資料庫大資料一體化的理念及趨勢以及工程上深度打磨出的雲原生數倉更新版本。在本次TPC-DS基準測試中,AnalyticDB MySQL 3.0充分展現了出色的雲原生技術優勢,對比友商有近10倍的巨大優勢!

2. TPC-DS性能基準介紹

TPC (Transaction Processing Performance Council) 是事務性能管理委員會的簡稱,是最知名的非盈利的資料管理系統評測基準标準化組織,它制定商務應用基準程式(Benchmark)的标準規範、性能和價格度量,并管理測試結果的釋出,而TPC Benchmark測試結果是衡量一個資料管理系統性能及成本效益的最核心名額之一。

TPC-DS基準測試模拟了一個典型的零售行業資料倉庫的評測決策支援系統(Decision Support),是資料庫界最具挑戰的一個測試基準,是TPC-H的更新版,它采用星型、雪花等多元資料模式,測試集包含對大資料集的統計、報表生成、聯機查詢、資料挖掘等複雜應用,與真實場景非常接近。

TPC-DS的難點和挑戰主要有:

  • 資料集規模大,例如事實表store_sales,單表超過280億行。
  • 面向真實零售決策場景,SQL非常複雜:覆寫SQL99和2003的核心部分以及OLAP标準;既包含報表類ad-hoc低延時查詢,又包含海量資料挖掘高吞吐分析查詢。
  • 測試項多且次元廣:既要高性能、高可靠、高可用、高成本效益,又要ETL和資料更新的ACID能力。

TPC-DS測試流程及資料模型:

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

3. AnalyticDB MySQL 3.0 技術架構

AnalyticDB MySQL 3.0 采用雲原生架構,計算存儲分離、冷熱資料分離,支援高吞吐實時寫入和資料強一緻,兼顧高并發查詢和大吞吐批處理的混合負載。

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

第一層是接入層,由Mulit-Master可線性擴充的協調節點構成,主要負責協定層接入、SQL解析和優化、實時寫入Sharding、資料排程和查詢排程。

第二層是計算引擎,具備分布式MPP+DAG融合執行能力,結合智能優化器,可支援高并發和複雜SQL混合負載,同時借助于雲原生基礎設施,計算節點實作了彈性排程,可根據業務需求做到分鐘級甚至秒級擴充,達到了資源的有效利用。

第三層是存儲引擎,基于Raft協定實作的分布式實時強一緻高可用存儲引擎,通過資料分片和Multi-Raft實作并行,利用分層存儲實作冷熱分離降低成本,通過行列存儲和智能索引達到極緻性能。

4. AnalyticDB存儲技術

4.1 分布式強一緻存儲

AnalyticDB MySQL 3.0 存儲完全自主研發,基于Raft協定建構了一套分布式強一緻高可靠的輕量級存儲架構,可實作高吞吐實時寫入,适合極緻分析性能場景。AnalyticDB MySQL 3.0存儲相比開源HBase、Kudu等在SQL分析性能上有較大優勢,并且在實時寫入強一緻可見、支援ACID方面也是開源ElasticSearch、ClickHouse等所不具備的能力。

AnalyticDB存儲整體架構如下:

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

AnalyticDB MySQL 3.0是基于資料庫的并行資料模型,存儲模組化親和MPP計算模型,内部實作為多層并行的架構:

  • 第一級是叢集執行個體級并行,使用者執行個體被劃分為多個存儲節點組(Worker Group),每個Worker Group由 N(通常是3,也可以是其他奇數)個Worker構成。Worker相當于使用者資料節點容器,分組的目标是保證系統大規模擴充時不會出現通信膨脹、也友善系統并行更新和運維。
  • 第二級是DB并行,使用者資料庫被切分為N個實體分庫(Shard,也叫資料分片),每個Shard是獨立的Raft Group以保證資料強一緻,多個Shard就形成了multi-raft的并行。Shard是可以是Hash或者Range分區,通常Hash分區可以做資料對齊以避免資料大表JOIN的資料Shuffle;Shard可以在需要的時候在不同Worker Group之間均衡或者遷移,Shard本身也會支援動态分裂和合并。
  • 第三是表内并行,對于數倉場景的曆史資料存儲通常有資料分區的概念,例如TPC-DS中store sales就可以根據時間周期分區,資料分區除友善資料生命周期管理外還可以支援查詢分區裁剪和DFP,有助于大幅縮小資料計算範圍。

在TPC-DS基準測試中,通過分布式并行存儲架構以及感覺存儲分布的查詢優化和執行引擎緊密配合,整體性能優異。

4.2 高性能批量導入

資料導入速度是雲數倉的基礎能力,在TPC-DS中對導入有着極緻的性能要求,我們的第一個優化思路是輕量級build(把實時資料轉換為全量分區資料稱之為build),AnalyticDB MySQL 3.0實作了輕量化的全記憶體單副本local build,相比之前版本的類MR作業的全量build大幅減少了讀寫DFS和落盤開銷,并且可以充分通過本地化向量指令有效利用CPU提升性能。

第二個思路是IO和網絡優化,在導傳入連結路上,我們采用DirectIO、Binary化、全流式、異步化、零拷貝等技術大幅提升導入性能。

第三個思路是減少資料量,通過Raft 2+1技術(2份資料+1份日志)在保證資料高可靠的前提下将資料量減少1/3, 再通過高性能lz4壓縮算法将資料進一步壓縮,整體下來資料的讀寫IO和網絡傳輸開銷都得到大幅優化。

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

最終,在TPC-DS 18個節點上可以實作超過5000萬/秒 的導入性能。

4.3 高吞吐實時更新DML

AnalyticDB MySQL 3.0基于Raft實作了高吞吐實時資料更新能力,寫傳入連結路通過全異步化、零拷貝、高效編碼壓縮等實作了出色的性能,在TPC-DS DML測試中,AnalyticDB十幾個節點可以做到千萬級TPS實時寫入更新,并且能夠保證線性一緻性(寫入後立即可查)。在實際生産中,使用者寫入性能完全可擴充,可以輕松實作億級TPS的實時寫入更新。

在TPC-DS中,需要驗證資料倉庫的資料修改和ACID能力,AnalyticDB MySQL 3.0 支援ETL事務,具備ACID能力(可以完整跑TPC-C事務功能測試),在TPC-DS的DML測試中,存儲引擎MVCC能力發揮了巨大的作用:存儲引擎通過切分為實時資料(Delta)和分區資料(Main)+ 異步的資料轉換(Build)實作了類LSM寫優化架構。AnalyticDB實作了Block-level MVCC + 快照隔離,可以保證ETL和資料更新過程中資料的隔離性(可見性)、在壞盤出錯時可以保證資料更新原子性。

4.4 行列混存和智能索引

AnalyticDB MySQL 3.0通過自研的行列混存格式,能夠兼顧高篩選率和大吞吐掃描兩種場景,相比開源ORCFile的純列存格式在明細點查上更有優勢,而相比Parquet,AnalyticDB MySQL存儲格式具有更出色的随機讀性能,同時對比業界行存表+列存表兩份資料備援的模式成本更低。在AnalyticDB MySQL中,每個Table都有一個行列存儲格式檔案,資料被切分成不同的RowGroup,在RowGroup内由列的Block構成,Block内對定長、非定長(Toast)資料的進行有效的編碼和壓縮,并且支援高效的随機讀和順序讀。

在TPC-DS 測試中,通過配置合理的存儲Block大小(4KB對齊)、資料塊預取、源頭算子向量讀等大幅優化了存儲掃描性能;同時,存儲上精确的統計資訊(min/max/sum/cnt等)一方面可以加速資料過濾(Smart Scan),另一方面還能夠為查詢優化器提供豐富的Statistics以幫助制定出最優的執行計劃。

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

AnalyticDB MySQL的特色之一是自研智能索引架構,支援五種索引類型:字元串類的Invert索引、bitmap索引、數值類的KDTree索引、JSON索引和向量索引;不同類型的索引可以實作列級索引多種條件(交、并、差)任意組合;相比較傳統資料的優勢是,無需建組合索引(不會引起空間膨脹)、且支援OR/NOT等更多條件的索引下推。為了降低使用者使用門檻,AnalyticDB在建表時可以開啟一鍵自動全列索引,查詢時通過Index CBO智能動态篩選索引下推,确定下推的索引鍊會通過謂詞計算層進行流式漸進多路歸并輸出。

5. AnalyticDB查詢技術

AnalyticDB MySQL 3.0 的查詢引擎,由自研的查詢優化器和查詢執行器兩個子產品組成。它是AnalyticDB MySQL 提供高并發、高吞吐數倉分析能力的重要一環。感覺資料特征,深度結合存儲引擎的架構,同時支援Reporting、Ad-hoc、ETL數倉分析場景,是其相較于單一計算引擎的核心優勢。

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

作為一款分布式雲原生實時數倉産品,AnalyticDB MySQL的優化器不僅僅要面臨傳統優化器所涉及的挑戰,例如複雜 Join Reorder 的 NP-hard 問題,代價估算的不确定性問題,還面臨在分布式環境下分布式并行計劃的新問題。CBO 做為AnalyticDB MySQL 3.0版本最新成果,在 TPC-DS戰役中首次開啟使用,對于整體計劃的調優,起到了非常重要的作用。

ADB 查詢執行引擎,以統一的記憶體池化和查詢的混合負載管理能力為基礎,使用動态代碼生成技術,創新性的混合執行模型,利用SIMD指令集的向量化算法,以及自适應的面向行、列混合存儲的查詢執行等技術,是AnalyticDB MySQL持續的在TPC-DS查詢性能上領先的關鍵因素。

5.1 CBO查詢優化架構

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

基于代價的優化器本質上是一個複雜的搜尋問題,想要解決好這個問題,需要從四個方面入手:

搜尋架構:從資料庫的發展曆程來看,基于 Cascades 的搜尋架構已經成為了業界标準,包括商業資料庫 SQL Server 以及開源資料庫 GP/ORCA 都采用 Cascades 實作。AnalyticDB MySQL優化器CBO 也是基于 Cascades 論文實作的。搜尋架構面臨的一個核心問題是搜尋空間會急速膨脹,但是搜尋時間需要維持毫秒級響應,是以需要有高效的資料結構存儲搜尋空間、高效的優化規則生成搜尋空間、高效的搜尋算法周遊搜尋空間,高效的剪枝政策裁剪搜尋空間。

分布式并行計劃:相對于傳統的單機版資料庫來說,分布式 MPP 資料庫給優化器帶來了新的挑戰。在分布式 MPP 資料庫中,資料的分布屬性變得十分的重要,它會直接影響到資料的正确性。為了滿足不同算子對資料分布的要求,資料重分布不可避免,然而資料的重分布即資料 shuffle 的代價非常昂貴,是以,在保證資料正确性的前提下,盡可能的減少資料 shuffle。作為分布式 MPP 資料庫優化器來說,需要把資料的 Partitioning 屬性,以及 Sorting、Grouping 屬性,也納入到搜尋空間來綜合考慮,基于代價選擇最優的分布式并行執行計劃。

代價估算:代價估算是優化器能否尋找到最優計劃的關鍵因素。代價估算涉及到統計資訊的推導和代價模型。統計資訊的推導依賴于:原始表的統計資訊、中間算子的推導算法、對資料的各種假設(均勻性假設、獨立性假設、包括性假設、包含性假設)以及在一些極端情況下的猜測。是以統計資訊的推導存在大量的不确定性,也正是因為這些不确定性,極大的加劇了優化器尋找最優解的難度。本質上來說,隻有打破對資料屬性的假設,才有可能使得統計資訊的估算做到知其然知其是以然,然而打破這些假設,也要付出更多的代價。

統計資訊收集:收集必要的統計資訊是 CBO 工作的前提,統計資訊需要做到:基本資訊能夠自動化收集,自動化更新,進階統計資訊可以手動收集,為 CBO 提供可靠的、多緯度的統計資訊。在實際的情況下,可能存在統計資訊丢失或者沒有及時收集,在這種情況下,為了避免生成災難性的計劃,可以在運作時動态采樣來擷取必要的統計資訊。

5.2 混合查詢執行架構

傳統的火山執行模型不能滿足分析場景高吞吐的性能需求已經成為業界的共識。随着各個系統的不斷發展,目前業界計算引擎有2種演化後的執行架構實作:

• Just-in-time (JIT) compilation

• Vectorization

JIT編譯方式以資料為中心,一條資料經過上一個算子處理後,還在CPU緩存中便直接進行下一個算子的計算,對CPU緩存友好,适合計算密集型任務。Vectorization中每個算子處理一批資料後,将一批結果再交給下一個算子計算。适合記憶體密集型任務以及向量計算,用中間結果物化的開銷換取算子的計算高内聚。

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

JIT編譯方式和Vectorization各有所長,如上圖所示,紅色表示JIT編譯方式,綠色表示Vectorization方式。目前AnalyticDB MySQL是唯一的同時支援這兩種查詢模式的自研分析引擎。混合執行架構,在Vectorization執行模式的基礎上,自适應的把多個計算密集特征的算子融合成一個驅動執行。實作了一個查詢執行引擎同時具備Compilation和Vectorization的優點。

5.3 統一記憶體管理

在記憶體方面,高效的記憶體管理是計算優化的基石。面向類型的記憶體模型,特指針對不同的資料類型使用不同的基礎類型存儲。這導緻不同的類型無法存儲在連續的記憶體位址中,僅能通過按列的方式進行存儲,減少多個記憶體對象帶來的額外代價。另外一方面,不同記憶體類型間的記憶體無法複用,這會造成額外的記憶體管理代價。

自研雲原生資料倉庫AnalyticDB再破權威評測TPC-DS世界紀錄!

ADB的查詢執行引擎,通過統一記憶體管理來解決上面的幾個問題

  • 記憶體binary化: 統一記憶體類型,不同類型均使用相同的資料類型(byte)來存儲,同時這也是查詢執行面向行存,緩存友好算法優化的基石;
  • 規範化的記憶體管理規格:統一記憶體規格,降低記憶體碎片帶來的額外代價,并且降低複用記憶體的難度;
  • 分層的記憶體管理:統一記憶體管理,根據計算特點對應記憶體的生命周期,針對記憶體使用特點,實作MemoryCache, MemoryPool,并且支援記憶體洩漏檢測,實作面向常駐服務的主動記憶體管理;

5.4 DFP 和 CTE技術

在資料倉庫中,事實表和次元表 Join是典型場景,他們之間的資料量的差異可以達到千萬倍級别,這個時候,Join的計算成本更多的在于資料的掃描成本,是以我們會采用 DynamicFilterPushDown 的方式,來極大的減少左表的資料量。另外資料倉庫中會出現大量的 WITH 語句以及隐式的共享語句,這些都可以通過 Common Table Expression 的共享來避免重複計算。

DFP(DynamicFilterPushDown)對于篩選率高的 Join (命中率低)、Probe端的資料從存儲中被讀上來之後,大部分資料會被丢棄掉。是以如果評估出來 build 的資料維持在一個比較小範圍的門檻值,那麼我們就可以把 build 端結果值,作為左表的過濾條件,也就是 Dynamic Filter,直接下推存儲,減少掃描量。對于優化器來說,最主要的工作就是要合理評估 build 端命中 Join 條件的 NDV 值。

不同的 Join Order 直接影響可做 Dynamic Filter 的範圍和粒度,能夠進行該優化的 Join 其 Cost 與真正的 Hash Join 有巨大的差異反過來也影響了 Join Order。基于 ADB 完善且擴充性較好的 CBO 架構,我們做到了從全局考慮,基于 Cost 選擇最優的 Dynamic Filter 方案。

在執行層面,我們通過如下三個關鍵點實行有高效的DFP:

  • 高效動态謂詞建構,通過程序内in-place建構動态謂詞,降低動态文詞建構代價;
  • 多層過濾執行優化,結合bloomfilter,分區裁剪,感覺存儲索引等方式,加速過濾效果;
  • 異構資料源的下推,統一資料源接口層抽象實作,擴充異構資料源的支援;

CTE(Common table expression),TPC-DS 30%+的sql中包含with as用法, 通過with as子查詢,在主查詢中多次引用,每一次引用帶來了額外的重複計算,導緻資源浪費。基礎的CTE優化,通過複用with子句的結果給多個引用方,來減少重複計算的代價。但是對于部分場景,與主查詢的關系推導可以進一步減少with子查詢中的計算量,這時直接share完整with子句會導緻額外的性能回退。那麼通過inline後的最優計劃,進行common sub tree的識别,進一步減少重複計算量,達到無bad case的效果。執行器實作中,我們引入了死鎖檢測,通過分析common sub tree的多個consumer之間的依賴關系,解決死鎖問題。

6. 客戶場景和案例

AnalyticDB自2014年上雲後已在全球主要Region開服,開始進入全球分析市場,2018年,成功入選了全球權威IT咨詢機構Forrester釋出"The Forrester Wave™: CloudData Warehouse,Q4 2018"研究報告的Contenders象限,以及Gartner釋出的分析型資料管理平台報告 (Magic Quadrant for Data Management Solutions for Analytics)。

AnalyticDB已廣泛應用于阿裡巴巴集團内部和阿裡雲外部客戶,具有替換Teradata、Oracle RAC的生産案例,在泛網際網路、新零售、金融、稅務、交通、氣象、物流等核心行業得到大規模應用和驗證,如在物流行業支援中國郵政首次實作全國物流查詢分析大集中等。

7. 總結和展望

AnalyticDB經過資料庫領域最頂級會議VLDB論文(AnalyticDB: Realtime OLAP Database System at Alibaba Cloud)的理論驗證(中國極其少有的大規模商用系統介紹論文,類似有Google F1[VLDB'2013]、AWS Aurora[SIGMOD'2017]等)、TPC-DS全球領先的工程驗證(TPC-DS全球成本效益、性能雙雙領先)、覆寫核心部委以及大型泛網際網路客戶的客戶驗證、阿裡集團多年的超大規模驗證形成了多方面優勢,基于雲計算的高效資源效率、資料庫與大資料一體化發展趨勢,正式完成重大品牌更新,由“分析型資料庫”更新為“雲原生資料倉庫”。

未來以來,大資料與資料庫一體化+雲原生将會重新定義雲計算時代的資料倉庫,TPC-DS破世界紀錄隻是起點,AnalyticDB将會持續投入緻力于成為企業數字化轉型更新、資料價值線上化的基礎設施!

8. 附錄

AnalyticDB VLDB論文解讀:

VLDB論文解讀:阿裡雲超大規模實時分析型資料庫AnalyticDB

AnalyticDB 雲栖文章

AnalyticDB for MySQL技術架構解析 更簡單易⽤的資料倉庫,阿⾥雲重磅推出分析型資料庫3.0版 建構實時資料倉庫首選,雲原生資料倉庫AnalyticDB for MySQL技術解密 性能為MySQL 10倍!阿裡雲重磅推出雲原生資料倉庫AnalyticDB基礎版