本章節介紹了如何快速使用彈性並行查詢。
注意事項
唯讀節點和主節點都支援並行查詢功能。主節點上並行查詢預設關閉。
開啟並行查詢
在控制台基本資料的叢集地址地區,單擊編輯配置,開啟編輯地址配置頁面,設定並行度參數及並行引擎,開啟並行查詢。具體操作請參見設定資料庫代理的並行查詢說明。
並行查詢推薦設定以及相關說明如下:
多機並行引擎可以根據查詢代價以及叢集即時負載情況自適應彈性調度,建議開啟多機並行以獲得更優的加速效果。
並行度參數從低到高逐漸增加,建議不要超過CPU核心數的四分之一 。例如,剛開始使用並行查詢時,設定並行度參數為2,試運行一天后,如果CPU壓力不大,可以持續上調;如遇到CPU壓力較大,停止上調。
並行度為單個查詢在單計算節點內最大允許同時啟動並執行worker線程數,如果選擇多機並行,單個查詢最大允許同時啟動並執行線程數=並行度×節點個數。
開啟並行查詢功能時, 需要設定innodb_adaptive_hash_index參數為OFF,innodb_adaptive_hash_index參數開啟會影響並行查詢的效能。
如果控制台頁面未開啟並行查詢,但系統參數max_parallel_degree被設定為大於0時,相當於預設開啟了單機並行。
如果控制台和系統參數max_parallel_degree均有設定,則以控制台參數配置為準,故建議使用控制台開啟並行查詢。
關閉並行查詢
在控制台基本資料的叢集地址地區,單擊編輯配置,開啟編輯地址配置頁面,可關閉並行查詢,具體操作請參見設定資料庫代理。
控制台關閉並行查詢後,需要確認系統參數max_parallel_degree同時為0,確保並行查詢被完全關閉。
通過Hint來控制並行查詢
使用Hint文法可以對單個語句進行控制,例如系統預設關閉並行查詢情況下,但需要對某個高頻的慢SQL查詢進行加速,此時就可以使用Hint對特定SQL進行加速。詳情內容請參見並行查詢Hint文法。
設定閾值控制最佳化器是否選擇並存執行
PolarDB提供了兩個閾值來控制最佳化器是否選擇並存執行,SQL語句只要滿足其中任意一個條件,最佳化器就會考慮並存執行。
records_threshold_for_parallelism
若最佳化器估算出語句中存在掃描記錄數超過該閾值的表,最佳化器會考慮選擇並存執行計劃。預設值為10000。若您的業務量較小或複雜查詢業務並發較低,您可以選擇將該閾值設定為2000或以上。
說明上文提到的掃描記錄數是根據對應表的統計資訊進行估算得出的值,可能存在一定的誤差。
cost_threshold_for_parallelism
若最佳化器估算查詢的串列執行代價超過該閾值,最佳化器會考慮選擇並存執行計劃。預設值為50000。
設定閾值控制多機並行引擎的自適應彈性調度
PolarDB提供了兩個閾值來控制是否選擇多機並行,SQL語句只要滿足如下任意一個條件,並行查詢會考慮彈性擴充為多機並行。
records_threshold_for_mpp
若查詢語句中存在掃描記錄超過該閾值的表,最佳化器會考慮將單機並行彈性擴充為多機並行,將並行任務調度到多個節點上同時完成計算。預設值為records_threshold_for_parallelism的N倍,N值為當前叢集地址內的節點個數。
cost_threshold_for_mpp
若查詢語句的串列執行代價超過該閾值,最佳化器會考慮彈性擴充為多機並行。預設值為cost_threshold_for_parallelism的N倍,N值為當前叢集地址內的節點個數。