本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
WLM 查詢佇列跳轉
使用 Amazon Redshift,您可以透過啟用 WLM(工作負載管理) 查詢佇列跳轉來管理工作負載並行和資源配置。此功能允許查詢在資源可用時暫時從指派佇列「跳出」至較高優先順序佇列,從而改善整體查詢效能和系統使用率。下列各節提供在 Amazon Redshift 中設定和使用WLM查詢佇列跳轉的詳細指引。
由於WLM逾時或查詢監控規則 (QMR) 跳轉動作 ,可以跳轉查詢。您只能在手動WLM組態中跳轉查詢。
跳出查詢時, WLM會根據佇列WLM指派規則 嘗試將查詢路由至下一個相符的佇列。如果查詢不符合其他任何佇列定義,則會取消此查詢。不會指派給預設佇列。
WLM 逾時動作
下表摘要說明具有WLM逾時的不同類型查詢的行為。
查詢類型 | 動作 |
---|---|
INSERT、 UPDATE和 DELETE | 取消 |
使用者定義的函數 (UDFs) | 取消 |
UNLOAD | 取消 |
COPY | 繼續執行 |
維護操作 | 繼續執行 |
處於 returning 狀態的唯讀查詢 |
繼續執行 |
處於 running 狀態的唯讀查詢 |
重新指派或重新啟動 |
CREATE TABLE AS (CTAS)、 SELECT INTO | 重新指派或重新啟動 |
WLM 逾時佇列跳轉
WLM 逾時時跳出下列類型的查詢:
-
處於 WLM 狀態的唯讀查詢,例如 SELECT陳述式
running
。若要尋找查詢WLM的狀態,請檢視STV_WLM_QUERY_STATE系統資料表上的資料STATE欄。 -
CREATE TABLE AS (CTAS) 陳述式。WLM 佇列跳轉支援使用者定義和系統產生的CTAS陳述式。
-
SELECT INTO 陳述式。
不受WLM逾時限制的查詢會繼續在原始佇列中執行,直到完成為止。下列類型的查詢不會WLM逾時:
-
COPY 陳述式
-
維護操作,例如 ANALYZE和 VACUUM
-
已達 WLM 狀態的唯讀查詢,例如 SELECT陳述式
returning
。若要尋找查詢WLM的狀態,請檢視STV_WLM_QUERY_STATE系統資料表上的資料STATE欄。
不符合WLM逾時跳轉資格的查詢會在逾時時取消。下列類型的查詢不符合WLM逾時跳轉的資格:
-
INSERT、 UPDATE和 DELETE陳述式
-
UNLOAD 陳述式
-
使用者定義的函數 (UDFs)
WLM 重新指派和重新啟動的逾時查詢
當查詢跳轉且找不到相符的佇列時,就會取消此查詢。
跳出查詢並找到相符佇列時, 會WLM嘗試將查詢重新指派給新的佇列。如果無法重新指派查詢,則會在新佇列中重新啟動此查詢,如下所述。
只有在下列所有條件成立時,才會重新指派查詢:
-
找到相符的查詢。
-
新佇列有足夠可用的槽可執行查詢。如果 wlm_query_slot_count 參數設定的值大於 1,查詢可能需要多個槽。
-
新佇列可用的記憶體至少與查詢目前使用的記憶體一樣多。
如果重新指派查詢,此查詢會在新佇列中繼續執行。中間結果會保留下來,因此對於總執行時間影響極小。
如果無法重新指派查詢,則會取消查詢,並於新佇列中重新啟動查詢。將會刪除中間結果。查詢會在佇列中等待,然後在有足夠的槽可用時開始執行。
QMR 躍點動作
下表總結了具有QMR躍點動作的不同類型查詢的行為。
查詢類型 | 動作 |
---|---|
COPY | 繼續執行 |
維護操作 | 繼續執行 |
使用者定義的函數 (UDFs) | 繼續執行 |
UNLOAD | 重新指派或繼續執行 |
INSERT、 UPDATE和 DELETE | 重新指派或繼續執行 |
處於 returning 狀態的唯讀查詢 |
重新指派或繼續執行 |
處於 running 狀態的唯讀查詢 |
重新指派或重新啟動 |
CREATE TABLE AS (CTAS)、 SELECT INTO | 重新指派或重新啟動 |
若要尋找 所跳出的查詢QMR是否已重新指派、重新啟動或取消,請查詢STL_WLM_RULE_ACTION系統日誌表。
QMR 躍點動作已重新指派和重新啟動的查詢
當查詢跳轉且找不到相符的佇列時,就會取消此查詢。
跳出查詢並找到相符佇列時, 會WLM嘗試將查詢重新指派給新的佇列。如果無法重新指派查詢,此查詢會在新佇列中重新啟動,或在原始佇列中繼續執行,如下所述。
只有在下列所有條件成立時,才會重新指派查詢:
-
找到相符的查詢。
-
新佇列有足夠可用的槽可執行查詢。如果 wlm_query_slot_count 參數設定的值大於 1,查詢可能需要多個槽。
-
新佇列可用的記憶體至少與查詢目前使用的記憶體一樣多。
如果重新指派查詢,此查詢會在新佇列中繼續執行。中間結果會保留下來,因此對於總執行時間影響極小。
如果無法重新指派查詢,此查詢會重新啟動或在原始佇列中繼續執行。如果重新啟動查詢,則會取消查詢,並於新佇列中重新啟動查詢。將會刪除中間結果。查詢會在佇列中等待,然後在有足夠的槽可用時開始執行。