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