WLM 查詢佇列跳轉 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

WLM 查詢佇列跳轉

查詢可能因為 WLM 逾時查詢監控規則 (QMR) 跳轉動作而跳轉。您只能在手動 WLM 配置中跳轉查詢。

當查詢跳轉時,WLM 會嘗試根據 WLM 佇列指派規則,將查詢路由至下一個相符的佇列。如果查詢不符合其他任何佇列定義,則會取消此查詢。不會指派給預設佇列。

WLM 逾時動作

下表摘要說明不同類型的查詢因為 WLM 逾時的行為。

查詢類型 動作
INSERT、UPDATE 和 DELETE 取消
使用者定義的函數 (UDF) 取消
UNLOAD 取消
COPY 繼續執行
維護操作 繼續執行
處於 returning 狀態的唯讀查詢 繼續執行
處於 running 狀態的唯讀查詢 重新指派或重新啟動
CREATE TABLE AS (CTAS)、SELECT INTO 重新指派或重新啟動

WLM 逾時佇列跳轉

WLM 會跳轉下列類型的查詢 (如果逾時):

  • WLM 狀態為 running 的唯讀查詢,例如 SELECT 陳述式。若要尋找查詢的 WLM 狀態,請檢視 STV_WLM_QUERY_STATE 系統資料表的 STATE 欄。

  • CREATE TABLE AS (CTAS) 陳述式。WLM 佇列跳轉同時支援使用者定義和系統產生的 CTAS 陳述式。

  • SELECT INTO 陳述式。

不受制於 WLM 逾時的查詢會繼續在原始佇列中執行,直到完成。下列類型的查詢不受制於 WLM 逾時:

  • COPY 陳述式

  • 維護操作,例如 ANALYZE 和 VACUUM

  • WLM 狀態已達到 returning 的唯讀查詢,例如 SELECT 陳述式。若要尋找查詢的 WLM 狀態,請檢視 STV_WLM_QUERY_STATE 系統資料表的 STATE 欄。

不符合因 WLM 逾時而跳轉之資格的查詢,一旦逾時就會取消。下列類型的查詢不符合因 WLM 逾時而跳轉的資格:

  • INSERT、UPDATE 和 DELETE 陳述式

  • UNLOAD 陳述式

  • 使用者定義的函數 (UDF)

WLM 逾時重新指派和重新啟動的查詢

當查詢跳轉且找不到相符的佇列時,就會取消此查詢。

當查詢跳轉且找到相符的佇列時,WLM 會嘗試將查詢重新指派給新佇列。如果無法重新指派查詢,則會在新佇列中重新啟動此查詢,如下所述。

只有在下列所有條件成立時,才會重新指派查詢:

  • 找到相符的查詢。

  • 新佇列有足夠可用的槽可執行查詢。如果 wlm_query_slot_count 參數設定的值大於 1,查詢可能需要多個槽。

  • 新佇列可用的記憶體至少與查詢目前使用的記憶體一樣多。

如果重新指派查詢,此查詢會在新佇列中繼續執行。中間結果會保留下來,因此對於總執行時間影響極小。

如果無法重新指派查詢,則會取消查詢,並於新佇列中重新啟動查詢。將會刪除中間結果。查詢會在佇列中等待,然後在有足夠的槽可用時開始執行。

QMR 跳轉動作

下表摘要說明不同類型的查詢因為 QMR 跳轉動作的行為。

查詢類型 動作
COPY 繼續執行
維護操作 繼續執行
使用者定義的函數 (UDF) 繼續執行
UNLOAD 重新指派或繼續執行
INSERT、UPDATE 和 DELETE 重新指派或繼續執行
處於 returning 狀態的唯讀查詢 重新指派或繼續執行
處於 running 狀態的唯讀查詢 重新指派或重新啟動
CREATE TABLE AS (CTAS)、SELECT INTO 重新指派或重新啟動

若要查明由 QMR 跳轉的查詢是否已重新指派、重新啟動或取消,請查詢 STL_WLM_RULE_ACTION 系統日誌資料表。

QMR 跳轉動作重新指派和重新啟動的查詢

當查詢跳轉且找不到相符的佇列時,就會取消此查詢。

當查詢跳轉且找到相符的佇列時,WLM 會嘗試將查詢重新指派給新佇列。如果無法重新指派查詢,此查詢會在新佇列中重新啟動,或在原始佇列中繼續執行,如下所述。

只有在下列所有條件成立時,才會重新指派查詢:

  • 找到相符的查詢。

  • 新佇列有足夠可用的槽可執行查詢。如果 wlm_query_slot_count 參數設定的值大於 1,查詢可能需要多個槽。

  • 新佇列可用的記憶體至少與查詢目前使用的記憶體一樣多。

如果重新指派查詢,此查詢會在新佇列中繼續執行。中間結果會保留下來,因此對於總執行時間影響極小。

如果無法重新指派查詢,此查詢會重新啟動或在原始佇列中繼續執行。如果重新啟動查詢,則會取消查詢,並於新佇列中重新啟動查詢。將會刪除中間結果。查詢會在佇列中等待,然後在有足夠的槽可用時開始執行。