為了提高複雜分析型查詢的速度,PolarDB-X将計算任務切分并排程到多個計算節點上,進而利用多個節點的計算能力,加速查詢的執行。這種方式也稱為MPP并行計算。目前隻有PolarDB-X隻讀執行個體叢集預設開啟了MPP并行計算能力。
查詢優化器
PolarDB-X的優化器面向HTAP負載設計,對複雜查詢有着良好的支援。TP類查詢包含的表數量通常有限(例如3個以内),并且Join條件往往被索引覆寫,且查詢涉及的資料量較小。而對于不符合上述特征的複雜查詢,則對優化器提出了更高的要求。
PolarDB-X采用了基于代價的優化器技術,能夠根據實際資料量、資料分布情況等,搜尋到較優的執行計劃,例如,對Join順序進行調整、選擇合适的Join或聚合算法,對關聯子查詢去關聯化等。執行計劃的好壞很大程度上決定了查詢效率,查詢優化對于分析型查詢至關重要。
HTAP智能路由
現階段,阻礙HTAP資料庫實際應用的一大障礙是分析型查詢(AP)對TP類查詢的影響。為了解決這一問題,PolarDB-X建議使用者部署獨立的隻讀叢集,隻讀叢集與原叢集在硬體資源上完全分離,進而将AP類查詢對TP類查詢的影響降到最低。
PolarDB-X優化器會基于代價估計将請求區分為TP與AP負載,其中AP查詢會被進一步改寫為分布式執行計劃,發往隻讀叢集進行計算,避免它對主執行個體的TP類查詢造成影響。
分布式執行
分布式執行計劃下一步會被切分為多個階段(Stage),每個階段又會生成多個并行的分片(Split),這些分片被下發到多個計算節點執行。計算節點之間通過高速網絡互聯。在計算過程中往往需要對中間結果進行多次交換(Exchange),直到最後一個Stage将結果收集彙總、回複給發起查詢的用戶端。
全局一緻性讀
傳統讀寫分離架構下,資料複制的延遲可能帶來的資料寫後讀(read-after-write)不一緻問題。PolarDB-X中,對于路由給隻讀執行個體的查詢,預設開啟全局一緻性讀能力,確定業務不會讀到過期的資料,向主執行個體寫入成功後能在隻讀庫讀到寫入的資料。