天天看點

PgSQL · 核心優化 · Hybrid DB for PG 賦能向量化執行和查詢子樹封裝

随着大資料時代的不斷演進, 使用者對于資料的分析能力的需要提出了越來越高的要求。 Hybrid DB for postgres(本文後續将會使用HDBP來代表)是一款基于Greenplum開源項目的分析型資料庫。 為阿裡雲使用者提供資料分析計算服務,HDBP資料庫繼承開源Greenplum的處理複雜SQL查詢的支援能力,同時HDBP又是一款由阿裡雲技術團隊支援的分析類型資料庫産品,阿裡雲技術團隊會不斷的在HDBP的各個方面進行持續維護與增強。

本文将主要介紹HDBP在查詢性能提升方面對資料庫核心的賦能,使得HDBP查詢執行引擎能夠比開源Greenplum執行效率高出2-10+倍。 并且HDBP還在持續提升執行引擎的效率。 下圖為我們本次性能優化的測試結果:藍色柱代表優化前的查詢執行時間這裡用1作為一個比較基線, 紅色柱代表優化後查詢性能提升的倍數。後續測試部分會詳細測試說明。

首先我們将會介紹一下本次性能優化項目的理論依據,HDBP性能優化項目主要是基于以下兩個主要的研究結論展開:

通過研究我們發現Greenplum雖然提供了列存儲的能力,但是實作沒有向量化執行引擎提供向量化處理能力,在處理列存表的時候,是分别讀取一條Tuple的各個字段内容,拼裝完成後傳回,後續的執行過程還是行存執行引擎完成。向量化執行能夠帶來的性能上面的提升就無法獲得了。 在本次HDBP資料庫核心優化項目中我們引入了一種靈活的向量化處理模型,使得HDBP執行引擎可以在一條查詢中靈活的在行存處理模式和向量化處理模式兩種執行方式中切換。 後續我們将會給大家介紹這塊的設計與實作。

通過分析發現查詢計劃樹中某些部分,是需要執行完成以後然後才能夠繼續後續的執行,在分析型資料庫當中,往往這部分查詢子樹往往也是整個查詢中耗時比較多的部分,由于這部分查詢子樹的執行相對獨立,給我們提供了封裝這部分子樹的可能性,進過優化處理,最終獲得這部分子樹最大的執行效率。

使用者無感覺(即使用者查詢無需做任何修改);

性能提升收益最大化;

架構靈活;

能夠快速上線。

基于上述目标我們在設計的性能優化架構的時候就首先緻力于一個靈活且能夠滿足網際網路快速疊代的執行引擎架構的設計與實作。

如圖1,給我們展示的是一查詢和它對應的查詢計劃樹, 其中方框所包含的部分就是查詢子樹部分。 我們首先将這部分時間減少到最低,理論上就能夠提升整個查詢執行效率的效果。

通過圖2,所示,我們将查詢子樹封裝到我們性能優化處理架構當中,并且在性能優化處理架構中我們實作了向量化處理能力。這樣我們就能夠達到對使用者無感覺的性能加速的效果。并且這樣的實作使得我們後續的查詢執行優化及功能快速上線這兩個方面都有了非常大的靈活度。

通過前面的描述,HDBP性能優化項目會主要會建構一個新的向量化執行引擎架構,在這個架構中我們會将查詢子樹封裝進去,在架構中對這個查詢子樹的執行過程進行優化處理,最終達到查詢子樹執行性能的提升。

目前阿裡雲已經架構起來了優化執行引擎的架構代碼基礎架構建設。 為後續直接在這個架構上進行快速疊代開發,實作更多的優化能力提供了架構基礎。

向量化執行能力的提供,使得向量化處理的收益可以不斷的收獲。

聚合函數優化執行的代碼,這部分功能已經上線,并且已經在客戶那邊進行了實際場景的測試, 經過驗證能夠達到實驗室測試同樣的提升效果。

我們在用tpch10G資料結果集,在一台機器上部署了一個3節點測試環境測試進行如下查詢的測試:

從測試結果來看,我們的優化項目架構還是起到了很好的性能加速效果。通過性能測試我們還發現了幾個性能優化點:

列存掃描效率,向量化資料準備過程,這部分還有很大的提升空間;

表達式計算效率提升,查詢5由于過濾算子比較多, 表達式目前向量化計算效率還有優化空間;

hash Agg計算Hash值效率,計算Hash值部分可以繼續優化;

上述性能優化架構是突破了開源Greenplum局限,雖然目前它隻實作了聚集函數的加速,但是對它的成功探索過程中,也讓我們看到了執行引擎優化的更多可以嘗試的方面,更加廣闊的優化空間。後續我們會不斷突破局限,讓HDBP給使用者帶來更多的計算價值。