

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 實作自動 WLM
<a name="automatic-wlm"></a>

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

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

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

Amazon Redshift 透過參數群組啟用自動 WLM：
+ 如果您的叢集使用預設參數群組，Amazon Redshift 可為其啟用自動 WLM。
+ 如果您的叢集使用自訂參數群組，您可以設定叢集來啟用自動 WLM。我們建議您為自動 WLM 組態另外建立參數群組。

若要設定 WLM，請在可與叢集相關聯的參數群組中編輯 `wlm_json_configuration` 參數。如需詳細資訊，請參閱[修改 WLM 組態](cm-c-implementing-workload-management.md#cm-c-modifying-wlm-configuration)。

您在 WLM 組態中定義查詢佇列。您可以將更多查詢佇列新增至預設 WLM 組態，最多總共八個使用者佇列。您可以為每個查詢佇列設定下列項目：
+ Priority 
+ 並行擴展模式 
+ 使用者群組 
+ 查詢群組 
+ 查詢監控規則 

## Priority
<a name="wlm-auto-query-priority"></a>

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

## 並行擴展模式
<a name="wlm-auto-concurrency-scaling-mode"></a>

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

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

## 使用者群組
<a name="wlm-auto-defining-query-queues-user-groups"></a>

您可以指定每一個使用者群組名稱或使用萬用字元，將一組使用者群組指派給佇列。當所列的使用者群組中有一個成員執行查詢時，該查詢會在相應佇列中執行。可指派給佇列的使用者群組數沒有固定的限制。如需詳細資訊，請參閱[根據使用者群組將查詢指派給佇列](cm-c-executing-queries.md#cm-c-executing-queries-assigning-queries-to-queues-based-on-user-groups)。

## 使用者角色
<a name="wlm-auto-defining-query-queues-user-roles"></a>

您可以指定每一個使用者角色名稱或使用萬用字元，將一組使用者角色指派給佇列。當所列的使用者角色中有一個成員執行查詢時，該查詢會在對應的佇列中執行。可指派給佇列的使用者角色數量沒有固定限制。如需詳細資訊，請參閱 [根據使用者角色將查詢指派給佇列](cm-c-executing-queries.md#cm-c-executing-queries-assigning-queries-to-queues-based-on-user-roles)。

## 查詢群組
<a name="wlm-auto-defining-query-queues-query-groups"></a>

您可以指定每一個查詢群組名稱或使用萬用字元，將一組查詢群組指派給佇列。*查詢群組*只是一個標籤。在執行時間，您可以將查詢群組標籤指派給一系列查詢。指派給所列之查詢群組的任何查詢會在相應佇列中執行。可指派給佇列的查詢群組數沒有固定的限制。如需詳細資訊，請參閱[將查詢指派給查詢群組](cm-c-executing-queries.md#cm-c-executing-queries-assigning-a-query-to-a-query-group)。

## 萬用字元
<a name="wlm-auto-wildcards"></a>

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

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

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

## 查詢監控規則
<a name="wlm-auto-query-monitoring-rules"></a>

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

## 檢查自動 WLM
<a name="wlm-monitoring-automatic-wlm"></a>

若要檢查是否已啟用自動 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;
```