本文將為您介紹如何使用彈性並行查詢(Elastic Parallel Query,簡稱ePQ)。
注意事項
請確認您的叢集是否支援使用彈性並行查詢。
單機並行:
資料庫引擎版本為8.0.1,核心小版本需為8.0.1.0.5及以上。
產品版本:企業版。
單機並行:
資料庫引擎版本為8.0.2,核心小版本需為8.0.2.1.4.1及以上。
產品版本:企業版。
多機並行:
資料庫引擎版本為8.0.2,核心小版本需為8.0.2.2.6及以上。
產品版本:企業版。
並行查詢存在使用限制和相容性問題。具體資訊,請參見使用限制和相容性問題。
唯讀節點和主節點都支援並行查詢功能,但主節點上的並行查詢預設關閉,您可以根據實際業務情況進行調整。具體資訊,請參考自適應調整並行度。
開啟/關閉並行查詢
開啟
您可前往。在叢集基本資料頁面的資料庫連接地區,選擇目標地址,單擊配置。在編輯地址配置彈窗內,開啟並行查詢並配置並行度。
推薦設定與說明:
並行度是指單個查詢在單個計算節點內最大允許同時啟動並執行worker線程數。單個查詢最大允許同時啟動並執行線程數=並行度×節點個數。
並行度建議從低到高逐步增加,且不要超過CPU核心數的四分之一 。例如,剛開始使用並行查詢時,建議將並行度參數設定為2。經過一天的試運行後,如果CPU負載較低,可以繼續上調並行度;若出現較大的CPU負載,應停止上調。
開啟並行查詢僅對新串連生效。
控制台中的並行查詢設定與叢集參數說明如下:
系統參數
loose_max_parallel_degree適用於當前叢集的所有節點,對叢集中所有串連均有效。然而,在控制台中進行的調整僅對當前設定的串連地址生效。若控制台和系統參數
loose_max_parallel_degree同時存在時,以控制台配置為準。因此,建議使用控制台來開啟並行查詢。若控制台未開啟並行查詢,但系統參數
loose_max_parallel_degree被設定為大於0時,相當於預設開啟了單機並行。
說明loose_max_parallel_degree參數為單個查詢的最大並行度,即並存執行的最大Worker數量。具體資訊,請參見參數說明。
關閉
您可前往。在叢集基本資料頁面的資料庫連接地區,選擇目標地址,單擊配置。在編輯地址配置彈窗內,關閉並行查詢。
說明:
關閉並行查詢僅對新串連生效。
控制台關閉並行查詢後,需要確認系統參數
loose_max_parallel_degree同時為0,確保並行查詢被完全關閉。說明loose_max_parallel_degree參數為單個查詢的最大並行度,即並存執行的最大Worker數量。具體資訊,請參見參數說明。
並行查詢配置
並行查詢有多個控制參數。為便於您對並行查詢進行管理,PolarDB提供了多種控制策略。以下列出部分控制策略。更多資訊,請參見並行資源控制策略配置。
類型 | 說明 |
控制最佳化器是否選擇並存執行 | PolarDB為您提供了兩個閾值來控制最佳化器是否選擇並存執行,SQL語句只要滿足其中任意一個條件,最佳化器就會考慮並存執行。
|
控制多機並行引擎的自適應彈性調度 | PolarDB為您提供了兩個閾值來控制是否選擇多機並行,SQL語句只要滿足如下任意一個條件,並行查詢會考慮彈性擴充為多機並行。
|
通過Hint來控制並行查詢
使用Hint文法可以對單個語句進行控制,指定最佳化器是否選擇並存執行,並支援設定並行度以及需要並行的表。例如,在系統預設關閉並行查詢的情況下,如果需要對某個高頻的慢SQL查詢進行加速,可以使用Hint對特定SQL進行加速。具體資訊,請參見並行查詢Hint文法。
使用限制和相容性問題
使用限制
PolarDB會持續迭代並行查詢的能力,目前以下情況在並行計劃中會有一定的局限性:
查詢非
InnoDB表,查詢無法並行。使用全文索引的查詢,查詢無法並行。
包含預存程序
Procedures的運算式,該運算式必須在Leader上執行。Index Merge方式進行表掃描,則該表無法並行。序列化隔離等級事務內的查詢語句無法並行。
隔離等級是
Repeatable-read的情況下,事務內的INSERT ... SELECT/REPLACE ... SELECT查詢部分無法並行。
相容性
錯誤提示次數可能會變化
串列執行中出現錯誤提示的查詢,在並存執行的情況下,總體錯誤提示數可能會與串列有所不同。
精度問題
在並行查詢的執行過程中,可能會出現比串列執行多出中間結果儲存的情況,如果中間結果是浮點型,可能會導致浮點部分的精度差異,從而使最終結果出現細微的差別。
網路包或者中間結果長度超出
max_allowed_packet允許的最大長度在並行查詢的執行過程中,相比串列執行可能會多出中間結果。如果中間結果的長度超出了
max_allowed_packet定義的最大長度,可能出現錯誤提示,可以通過增加max_allowed_packet參數的值來解決。如何修改參數請參見設定叢集參數和節點參數。結果集順序差別
當並行查詢執行未加
ORDER BY關鍵字的SELECT ... LIMIT n語句時,返回的結果集可能與執行順序不一致。由於有多個Worker同時執行,每次執行時Worker的執行速度是不確定的,當Leader得到足夠的資料後,就會返回結果,因此返回的結果集可能與執行順序不一致。加了行鎖的資料記錄數增多
當並存執行
SELECT ... FROM ... FOR SHARE語句時,InnoDB會將訪問到的每一行資料都加鎖,因此加了行鎖的記錄數可能會比非並存執行的情況下要多,這屬於正常現象。



