PolarDB-X是一款支持HTAP(Hybrid Transaction/Analytical Processing)的數據庫,在支持高并發、事務性請求的同時,也對分析型的復雜查詢提供了良好的支持。

說明 分析型查詢指的是涉及數據量較大、計算比較復雜的查詢,例如對一定時間區間內的數據進行聚合,相比于業務中常見的簡單查詢,這類查詢往往要執行數秒甚至數分鐘,需要消耗較多的計算資源。
為了提高復雜分析型查詢的速度,PolarDB-X將計算任務切分并調度到多個計算節點上,從而利用多個節點的計算能力,加速查詢的執行。這種方式也稱為MPP并行計算(Massively Parallel Processing,簡稱MPP)。目前只有PolarDB-X只讀實例默認開啟了MPP并行計算能力。混合負載 HTAP

查詢優化器

PolarDB-X的優化器面向HTAP負載設計,對復雜查詢有著良好的支持。TP(Transaction Processing)類事務型查詢包含的表數量通常有限(例如3個以內),并且Join條件往往被索引覆蓋,且查詢涉及的數據量較小。而對于不符合上述特征的復雜查詢,對優化器提出了更高的要求。

PolarDB-X采用了基于代價的優化器技術,能夠根據實際數據量、數據分布情況等,搜索到較優的執行計劃,例如,對Join順序進行調整、選擇合適的Join或聚合算法,對關聯子查詢去關聯化等。執行計劃的好壞很大程度上決定了查詢效率,查詢優化對于AP(Analytical Processing)類分析型查詢至關重要。

讀寫分離

當在線業務流量比較多時,對PolarDB-X主實例壓力比較大。此種場景下,PolarDB-X建議您購買只讀實例,按照預先設置好的比例將一部分TP類讀查詢通過主實例CN轉發給只讀DN,這個過程稱為讀寫分離。通過讀寫分離對讀流量進行分流,可以減輕主實例存儲層DN的讀壓力。

456789
設置讀寫分離后,讀請求可以配置為強一致性讀和弱一致性讀。
  • 強一致性讀:路由到只讀實例的請求,保證一定能夠查詢到讀請求執行前在主實例上已完成更新的數據,提供外部強一致性;
  • 弱一致性讀:路由到只讀實例的請求,讀請求僅訪問只讀實例上當前的最新數據,會因為主從異步復制的架構產生數據讀取延遲。

您可以通過Hint指定哪些讀SQL在主實例上執行,也可以預先設置讀寫比例,詳情請參見配置讀寫分離

智能讀寫分離

現階段,HTAP數據庫實際應用的一大障礙是AP類查詢對TP類查詢的影響。為了解決這一問題,PolarDB-X建議您部署獨立的只讀實例,只讀實例與原實例在硬件資源上完全分離,從而將AP類查詢對TP類查詢的影響降到最低。

PolarDB-X優化器支持基于代價將請求區分為TP與AP,其中AP查詢會被進一步改寫為分布式執行計劃,發往只讀實例進行計算,避免它對主實例的TP類查詢造成影響,這個過程稱為智能讀寫分離。

讀寫分離

分布式執行

分布式執行計劃下一步會被切分為多個階段(Stage),每個階段又會生成多個并行的分片(Split),這些分片被下發到多個計算節點執行。計算節點之間通過高速網絡互聯。在計算過程中往往需要對中間結果進行多次交換(Exchange),直到最后一個Stage將結果收集匯總、回復給發起查詢的客戶端。優化器

全局一致性讀

傳統讀寫分離架構下,數據復制的延遲可能帶來的數據寫后讀(read-after-write)不一致問題。PolarDB-X中,對于路由給只讀實例的查詢,默認開啟全局一致性讀能力,確保業務不會讀到過期的數據,向主實例寫入成功后能在只讀庫讀到寫入的數據。