實作自動 WLM - Amazon Redshift

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

實作自動 WLM

自動工作負載管理 (WLM) 可讓 Amazon Redshift 管理查詢並行和記憶體配置。您可以使用服務類別識別碼 100-107 建立最多八個佇列。每個佇列都有優先順序。如需詳細資訊,請參閱 查詢優先順序

自動 WLM 會決定查詢需要的資源數量,並根據工作負載來調整並行。當系統中有需要大量資源的查詢時 (例如,大型資料表之間的雜湊聯結),並行較低。提出較輕型的查詢時 (例如,插入、刪除、掃描或簡易的彙總),並行較高。

自動 WLM 不同於短期查詢加速 (SQA),它以不同的方式評估查詢。即使長時間執行、非常消耗資源的查詢處於作用中狀態,將自動 WLM 和 SQA 搭配運作,也可以讓短期執行和輕量型查詢完成。如需 SQA 的相關資訊,請參閱使用短期查詢加速

Amazon Redshift 透過參數群組啟用自動 WLM:

  • 如果您的叢集使用預設參數群組,Amazon Redshift 可為其啟用自動 WLM。

  • 如果您的叢集使用自訂參數群組,您可以設定叢集來啟用自動 WLM。我們建議您為自動 WLM 組態另外建立參數群組。

若要設定 WLM,請在可與叢集相關聯的參數群組中編輯 wlm_json_configuration 參數。如需詳細資訊,請參閱 修改 WLM 組態

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

  • 優先順序

  • 並行擴展模式

  • 使用者群組

  • 查詢群組

  • 查詢監控規則

優先順序

您可以透過設定優先順序值來定義查詢在工作負載中的相對重要性。為佇列指定優先順序,與佇列關聯的所有查詢就會繼承其優先順序。如需詳細資訊,請參閱 查詢優先順序

並行擴展模式

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

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

使用者群組

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

查詢群組

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

萬用字元

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

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

預設情況下,不會啟用萬用字元。

查詢監控規則

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

檢查自動 WLM

若要檢查是否已啟用自動 WLM,請執行下列查詢。如果查詢傳回至少一列,表示自動 WLM 已啟用。

select * from stv_wlm_service_class_config where service_class >= 100;

下列查詢顯示通過每個查詢佇列 (服務類別) 的查詢數。也顯示平均執行時間、第 90 個百分位數的查詢數和等待時間,以及平均等待時間。自動 WLM 查詢使用服務類別 100 到 107。

select final_state, service_class, count(*), avg(total_exec_time), percentile_cont(0.9) within group (order by total_queue_time), avg(total_queue_time) from stl_wlm_query where userid >= 100 group by 1,2 order by 2,1;

若要找出哪些查詢由自動 WLM 執行且成功完成,請執行下列查詢。

select a.queue_start_time, a.total_exec_time, label, trim(querytxt) from stl_wlm_query a, stl_query b where a.query = b.query and a.service_class >= 100 and a.final_state = 'Completed' order by b.query desc limit 5;