實施自動 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;