PolarDB-X是一款支持HTAP(Hybrid Transaction/Analytical Processing)的數據庫,在支持高并發、事務性請求的同時,也對分析型的復雜查詢提供了良好的支持。
查詢優化器
PolarDB-X的優化器面向HTAP負載設計,對復雜查詢有著良好的支持。TP(Transaction Processing)類事務型查詢包含的表數量通常有限(例如3個以內),并且Join條件往往被索引覆蓋,且查詢涉及的數據量較小。而對于不符合上述特征的復雜查詢,對優化器提出了更高的要求。
PolarDB-X采用了基于代價的優化器技術,能夠根據實際數據量、數據分布情況等,搜索到較優的執行計劃,例如,對Join順序進行調整、選擇合適的Join或聚合算法,對關聯子查詢去關聯化等。執行計劃的好壞很大程度上決定了查詢效率,查詢優化對于AP(Analytical Processing)類分析型查詢至關重要。
讀寫分離
當在線業務流量比較多時,對PolarDB-X主實例壓力比較大。此種場景下,PolarDB-X建議您購買只讀實例,按照預先設置好的比例將一部分TP類讀查詢通過主實例CN轉發給只讀DN,這個過程稱為讀寫分離。通過讀寫分離對讀流量進行分流,可以減輕主實例存儲層DN的讀壓力。
- 強一致性讀:路由到只讀實例的請求,保證一定能夠查詢到讀請求執行前在主實例上已完成更新的數據,提供外部強一致性;
- 弱一致性讀:路由到只讀實例的請求,讀請求僅訪問只讀實例上當前的最新數據,會因為主從異步復制的架構產生數據讀取延遲。
您可以通過Hint指定哪些讀SQL在主實例上執行,也可以預先設置讀寫比例,詳情請參見配置讀寫分離。
智能讀寫分離現階段,HTAP數據庫實際應用的一大障礙是AP類查詢對TP類查詢的影響。為了解決這一問題,PolarDB-X建議您部署獨立的只讀實例,只讀實例與原實例在硬件資源上完全分離,從而將AP類查詢對TP類查詢的影響降到最低。
PolarDB-X優化器支持基于代價將請求區分為TP與AP,其中AP查詢會被進一步改寫為分布式執行計劃,發往只讀實例進行計算,避免它對主實例的TP類查詢造成影響,這個過程稱為智能讀寫分離。
分布式執行
全局一致性讀
傳統讀寫分離架構下,數據復制的延遲可能帶來的數據寫后讀(read-after-write)不一致問題。PolarDB-X中,對于路由給只讀實例的查詢,默認開啟全局一致性讀能力,確保業務不會讀到過期的數據,向主實例寫入成功后能在只讀庫讀到寫入的數據。