本文介紹影響AnalyticDB MySQL版查詢效能的因素。
背景資訊
- 叢集規格
AnalyticDB MySQL版叢集支援多種規格(更多詳情,請參見產品規格),不同叢集規格的CPU核心數、記憶體大小和資料存放區介質等屬性不同,處理子任務的能力也就不同,因此您需要結合業務查詢特徵來選擇叢集規格。例如,以Join或分組彙總為主的業務查詢會消耗較多的CPU和記憶體資源;而以掃描資料和簡單分組彙總操作為主的查詢則會消耗較多的磁碟I/O資源。資源類型消耗量的不同會導致不同規格的叢集存在不同的效能瓶頸,最終影響整體的查詢效果。
- 節點數量
AnalyticDB MySQL版使用了分布式資料處理架構,一條查詢會被分解成多個Stage在不同的節點上並存執行。所以如果叢集中的節點數量越多,AnalyticDB MySQL版處理查詢的能力也會越強。您可以根據實際的業務需求來決定叢集節點的購買數量,更多詳情,請參見建立叢集。
- 資料分布特徵
由於使用了分布式資料處理架構,AnalyticDB MySQL版具備將一條查詢分解到多個節點上並存執行的能力。但AnalyticDB MySQL版能否充分利用多節點來平行處理查詢,還取決於資料在儲存節點上的分布特徵。如果資料能夠均勻分布在儲存節點上,那麼AnalyticDB MySQL版中的多個子任務在處理資料時,就能幾乎同時結束任務,實現理想的查詢處理;如果資料分布不均勻,那麼子任務在處理資料時會存在時間上的長尾,從而影響最終的查詢效果。
- 資料量大小
AnalyticDB MySQL版在處理查詢時,通常不會將處理過程中的臨時結果暫時寫到磁碟裡,而是盡量在記憶體中將所有資料處理掉。如果查詢需要處理的資料量較大,就可能會長時間佔用大量的資源,導致整體查詢效率降低,進而影響最終的查詢效果。
此外,如果AnalyticDB MySQL版中表格儲存體的資料量較大,那麼在執行索引過濾、詳細資料讀取等操作時也會出現相互爭搶磁碟I/O資源的情況,導致查詢變慢。
- 查詢並發度
由於叢集規格和規模的限制,AnalyticDB MySQL版能同時處理的查詢數量也會存在上限。如果查詢的並發度過高,叢集節點資源已到達瓶頸,那麼背景查詢就會出現較長時間的排隊,影響整體查詢效果。
- 查詢複雜度
查詢的複雜度不同,對AnalyticDB MySQL版造成的壓力也不同。例如,如果查詢中過濾條件過於複雜,會在資料過濾時對儲存節點造成一定壓力;如果查詢中Join運算元過多,資料可能需要在不同節點間進行多次的網路傳輸,造成網路阻塞;如果查詢中分組欄位過多,也會佔用較多的記憶體資源。