實作手動 WLM - Amazon Redshift

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

實作手動 WLM

使用手動 WLM,您可以修改 WLM 組態來為長期執行的查詢和短期執行的查詢建立個別的佇列,以管理系統效能和改善使用者的感受。

當使用者在 Amazon Redshift 中執行查詢時,會將查詢路由至查詢佇列。每個查詢佇列包含一些查詢槽。每個佇列都配置有叢集的一部分可用的記憶體。佇列的記憶體再分配給佇列的查詢槽。您可讓 Amazon Redshift 來管理自動 WLM 來管理查詢並行。如需詳細資訊,請參閱 實作自動 WLM

或者,您可以設定每個查詢佇列的 WLM 屬性。這麼做可以指定各個槽分配記憶體的方式,以及在執行時將查詢路由至特定佇列的方式。您也可以設定 WLM 屬性來取消長時間執行的查詢。此外,您還可以在 WLM 屬性之外使用 wlm_query_slot_count 參數。此參數可以配置多個槽,以暫時讓查詢使用更多記憶體。

根據預設,Amazon Redshift 會設定以下查詢佇列:

  • 一個超級使用者佇列

    超級使用者佇列會保留給超級使用者專用,因此無法進行設定。只有在需要執行會影響系統的查詢,或基於故障診斷目的,才應該使用此佇列。例如,當您需要取消使用者長期執行的查詢,或需要將使用者新增至資料庫時,請使用此佇列。請勿用來執行例行性查詢。此佇列不會出現主控台,而是在資料庫的系統資料表中以第五個佇列出現。若要在超級使用者佇列中執行查詢,使用者必須以超級使用者身分登入,且必須使用預先定義的 superuser 查詢群組來執行查詢。

  • 一個預設使用者佇列

    預設佇列最初會設定為同時執行五個查詢。您可以變更預設佇列的並行、逾時和記憶體配置屬性,但無法指定使用者群組或查詢群組。預設佇列必須是 WLM 組態中的最後佇列。任何未路由至其他佇列的查詢會在預設佇列中執行。

查詢佇列定義於 WLM 組態。在一或多個可以與叢集相關聯的參數群組中,WLM 組態是可編輯的參數 (wlm_json_configuration)。如需詳細資訊,請參閱「」設定工作負載管理中的Amazon Redshift 叢集管理指南

您可以將更多查詢佇列新增至預設 WLM 組態,最多總共八個使用者佇列。您可以為每個查詢佇列設定下列項目:

  • 並行擴展模式

  • 並行層級

  • 使用者群組

  • 查詢群組

  • 要使用的 WLM 記憶體百分比

  • WLM 逾時

  • WLM 查詢佇列跳轉

  • 查詢監控規則

並行擴展模式

當並行擴展啟用時,當您需要更多叢集容量以執行增加的並行讀寫查詢時,Amazon Redshift 會自動新增額外的叢集容量。使用者會看到最新資料,無論查詢是執行於主要叢集或並行擴展叢集。

您可藉由設定 (WLM) 佇列來管理要將哪些查詢傳送至並行擴展叢集。當您啟用佇列的並行擴展時,合格查詢將傳送到並行擴展叢集,而非排隊等待。如需詳細資訊,請參閱 使用並行擴展

並行層級

佇列中的查詢可以同時執行,直到達到該佇列已定義的 WLM 查詢槽計數 (或並行層級) 為止。後續的查詢需要在佇列中等待。

注意

WLM 並行層級不同於可對叢集建立的並行使用者連線數。如需詳細資訊,請參閱「」連接至叢集中的Amazon Redshift 叢集管理指南

在自動 WLM 組態中 (建議使用),並行層級設為 Auto (自動)。如需詳細資訊,請參閱 實作自動 WLM

在手動 WLM 組態中,每個佇列最多可設定 50 個查詢槽。對於所有使用者定義佇列,WLM 查詢槽計數上限為 50。此限制包括預設佇列,但不包括保留的超級使用者佇列。默認情況下,Amazon Redshift 會為每個隊列分配相等的固定可用內存份額。默認情況下,Amazon Redshift 會將相等、固定份額的佇列記憶體配置給佇列中的每個查詢槽。WLM 組態中使用 memory_percent_to_use 屬性來定義每個佇列配置的記憶體比例。在執行時間,您可以設定 wlm_query_slot_count 參數來指定配置給查詢的槽數,以暫時覆寫指派給查詢的記憶體數量。

根據預設,手動 WLM 佇列的並行層級為 5。在某些情況下,較高的並行層級可能有利於工作負載,例如:

  • 如果許多較小的查詢被迫等待長期執行的查詢,請建立槽計數較高的另一個佇列,並將較小的查詢指派至該佇列。並行層級較高的佇列配置給每個查詢槽的記憶體較少,但較小的查詢所需的記憶體不多。

    注意

    如果您啟用短期查詢加速 (SQA),WLM 會自動優先排定短期查詢,而長期執行查詢的優先順序會較低,所以您不需要為大部分工作流程的短期查詢準備另一個佇列。如需詳細資訊,請參閱 使用短期查詢加速

  • 如果有多個查詢在單一配量上各自存取資料,請設定另一個 WLM 佇列來同時執行那些查詢。Amazon Redshift 會將併發查詢分配給單獨的切片,從而允許在多個切片上 parallel 運行多個查詢。例如,假設查詢是在散發索引鍵上搭配述詞執行的簡單彙總,則查詢的資料會位於單一配量上。

如果您的工作負載需要超過 15 個查詢才能平行執行,則建議啟用並行擴展。這是因為將查詢槽計數增加到 15 以上可能會導致系統資源爭用,並限制單一叢集的整體輸送量。使用並行擴展,您可以平行執行數百個查詢,最多可達設定的並行擴展叢集數目。可使用的並行擴展叢集數目由 max_concurrency_scaling_clusters 控制。如需並行擴展的詳細資訊,請參閱 使用並行擴展

配置給每個佇列的記憶體會分配給該佇列的查詢槽。可供查詢使用的記憶體數量就是配置給執行查詢之查詢槽的記憶體。不論實際同時執行的查詢數多少,都是如此。如果查詢在槽計數為 5 時可完全在記憶體中執行,當槽計數增加到 20 時,就可能需要將中間結果寫入磁碟。增加的磁碟 I/O 會降低效能。

如果特定的查詢需要比配置給單一查詢槽更多的記憶體,您可以提高 wlm_query_slot_count 參數,以增加可用的記憶體。下列範例將 wlm_query_slot_count 設為 10、執行清空,然後將 wlm_query_slot_count 重設為 1。

set wlm_query_slot_count to 10; vacuum; set wlm_query_slot_count to 1;

如需詳細資訊,請參閱 改善 查詢效能

使用者群組

您可以指定每一個使用者群組名稱或使用萬用字元,將一組使用者群組指派給佇列。當所列的使用者群組中有一個成員執行查詢時,該查詢會在相應佇列中執行。可指派給佇列的使用者群組數沒有固定的限制。如需詳細資訊,請參閱 根據使用者群組將查詢指派給佇列

查詢群組

您可以指定每一個查詢群組名稱或使用萬用字元,將一組查詢群組指派給佇列。查詢群組只是一個標籤。在執行時間,您可以將查詢群組標籤指派給一系列查詢。指派給所列之查詢群組的任何查詢會在相應佇列中執行。可指派給佇列的查詢群組數沒有固定的限制。如需詳細資訊,請參閱 將查詢指派給查詢群組

萬用字元

如果 WLM 佇列組態中啟用萬用字元,您可以個別地或利用 Unix shell 樣式的萬用字元,將使用者群組和查詢群組指派給佇列。模式比對不區分大小寫。

例如,'*' 萬用字元符合任意數目的字元。因此,如果您將 dba_* 新增至佇列的使用者群組清單,任何使用者執行查詢只要是屬於以 dba_ 為名稱開頭的群組,都指派到該佇列。例如 dba_adminDBA_primary。'?' 萬用字元符合任何單一字元。因此,如果佇列包含使用者群組 dba?1,則名為 dba11dba21 的使用者群組符合,但 dba12 不符。

預設會關閉通配符。

要使用的 WLM 記憶體百分比

在自動 WLM 組態中,記憶體百分比設為 auto。如需詳細資訊,請參閱 實作自動 WLM

在手動 WLM 組態中,若要指定配置給查詢的可用記憶體數量,您可以設定 WLM Memory Percent to Use 參數。根據預設,每個使用者定義佇列都配置有相等份額的記憶體,可供使用者定義的查詢使用。例如,假設您有四個使用者定義佇列,則會配置可用記憶體的 25% 給每一個佇列。超級使用者佇列有其自己配置的記憶體,無法修改。若要變更配置,請將記憶體的整數百分比指派給每個佇列,總計最多 100%。任何未配置的記憶體由 Amazon Redshift 管理,如果佇列請求更多記憶體來進行處理,則可暫時指派給佇列。

例如,假設您設定四個佇列,則可以如下配置記憶體:20%、30%、15%、15%。剩餘 20% 未配置,由服務管理。

WLM 逾時

WLM 逾時 (max_execution_time) 已作廢。這時請改成使用 query_execution_time 建立查詢監控規則 (QMR),以限制查詢的經歷執行時間。如需詳細資訊,請參閱 WLM 查詢監控規則

若要限制給定的 WLM 佇列中允許查詢使用的時間,您可以設定每個佇列的 WLM 逾時值。超時參數指定 Amazon Redshift 在取消或跳查詢之前,等待查詢執行的時間量 (以毫秒為單位)。逾時以查詢執行時間為基礎,不包括在佇列中等待所花的時間。

WLM 會嘗試轉跳 CREATE TABLE AS (CTAS) 陳述式和唯讀查詢,例如 SELECT 陳述式。無法轉跳的查詢會取消。如需詳細資訊,請參閱 WLM 查詢佇列跳轉

WLM 逾時不適用於已達到傳回狀態的查詢。若要檢視查詢的狀態,請參閱 STV_WLM_QUERY_STATE 系統資料表。COPY 陳述式和維護操作 (例如 ANALYZE 和 VACUUM) 不受制於 WLM 逾時。

WLM 逾時的功能類似於 statement_timeout 組態參數。差別在於 statement_timeout 組態參數適用於整個叢集,而 WLM 逾時是針對 WLM 組態中的單一佇列。

如果也指定 statement_timeout,則會使用 statement_timeout 和 WLM timeout (max_execution_time) 之中較小者。

查詢監控規則

查詢監控規則會為 WLM 佇列定義以指標為基礎的效能邊界,並指定當查詢超出這些邊界時採取的動作。例如,對於短期執行查詢專用的佇列,您可以建立規則,以將執行時間超過 60 秒的查詢取消。若要追蹤設計不良的查詢,您可以使用另一個規則來記錄含有巢狀迴圈的查詢。如需詳細資訊,請參閱 WLM 查詢監控規則