

 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/)。

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

# 設定查詢佇列
<a name="serverless-workgroup-query-queues"></a>

Amazon Redshift Serverless 支援佇列型查詢資源管理。您可以建立專用的查詢佇列，採用自訂的監控規則來處理不同的工作負載。此功能可讓您精細控制資源用量。

查詢監控規則 (QMR) 僅適用於 Redshift Serverless 工作群組層級，影響此工作群組中執行的所有查詢。佇列式的方法可讓您建立具有不同監控規則的佇列。您可以將這些佇列指派給特定使用者角色和查詢群組。每個佇列都會獨立運作，而規則只會影響該佇列內的查詢。

佇列可讓您設定指標型述詞和自動回應。例如，您可以設定規則，以自動中止超過時間限制或耗用太多資源的查詢。

## 考量事項
<a name="serverless-workgroup-query-queues-considerations"></a>

使用無伺服器佇列時，請考慮下列事項：
+ Redshift Serverless 佇列不支援 Amazon Redshift 佈建叢集中使用的下列工作負載管理 (WLM) 組態金鑰：`max_execution_time`、`short_query_queue`、、`auto_wlm``concurrency_scaling`、`priority`、`queue_type``query_concurrency`、`memory_percent_to_use`、`user_group`、、`user_group_wild_card`。

  此外，Serverless 不支援 change\$1query\$1priority 動作。
+ Amazon Redshift Serverless 不支援跳轉動作 （在佇列之間移動查詢）。
+ 僅 Amazon Redshift 佈建叢集支援佇列優先順序。
+ Amazon Redshift Serverless 會自動管理擴展和資源配置，以獲得最佳效能，因此您不需要手動設定佇列優先順序。

## 設定查詢佇列
<a name="serverless-workgroup-query-queues-setup"></a>

您可以使用 AWS 管理主控台 AWS CLI或 Redshift Serverless API，在無伺服器工作群組的限制索引標籤下建立佇列。

------
#### [ Console ]

請依照下列步驟，為您的無伺服器工作群組建立佇列。

1. 導覽至 Redshift Serverless 工作群組。

1. 選取限制索引標籤。

1. 在**查詢佇列**下，選擇**啟用佇列**。
**重要**  
啟用查詢佇列是永久變更。一旦啟用，您就無法還原至無佇列監控。

1. 使用下列參數設定佇列：

   **佇列層級參數**
   + `name` - 佇列識別符 （必要、唯一、非空白）
   + `user_role` - 使用者角色陣列 （選用）
   + `query_group` - 查詢群組陣列 （選用）
   + `query_group_wild_card` - 0 或 1 以啟用萬用字元比對 （選用）
   + `user_group_wild_card` - 0 或 1 以啟用萬用字元比對 （選用）
   + `rules` - 監控規則陣列 （選用）

   **規則層級參數**
   + `rule_name` - 唯一識別符，最多 32 個字元 （必要）
   + `predicate` - 條件陣列，1-3 個述詞 （必要）
   + `action` - "abort" 或 "log" （必要）

   **述詞層級參數**
   + `metric_name` - 要監控的指標 （必要）
   + `operator` - "="、"<" 或 ">" （必要）
   + `value` - 數值閾值 （必要）

   **限制**
   + 最多 8 個佇列
   + 所有佇列最多 25 個規則
   + 每個規則最多 3 個述詞
   + 規則名稱全域必須是唯一的

**範例組態**

三個佇列範例：一個用於短逾時的儀表板查詢，一個用於長逾時的 ETL 查詢，另一個用於管理員佇列：

```
[
  {
    "name": "dashboard",
    "user_role": ["analyst", "viewer"],
    "query_group": ["reporting"],
    "query_group_wild_card": 1,
    "rules": [
      {
        "rule_name": "short_timeout",
        "predicate": [
          {
            "metric_name": "query_execution_time",
            "operator": ">",
            "value": 60
          }
        ],
        "action": "abort"
      }
    ]
  },
  {
    "name": "ETL",
    "user_role": ["data_scientist"],
    "query_group": ["analytics", "ml"],
    "rules": [
      {
        "rule_name": "long_timeout",
        "predicate": [
          {
            "metric_name": "query_execution_time",
            "operator": ">",
            "value": 3600
          }
        ],
        "action": "log"
      },
      {
        "rule_name": "memory_limit",
        "predicate": [
          {
            "metric_name": "query_temp_blocks_to_disk",
            "operator": ">",
            "value": 100000
          }
        ],
        "action": "abort"
      }
    ]
  },
  {
    "name": "admin_queue",
    "user_role": ["admin"],
    "query_group": ["admin"]
  }
]
```

在此範例中：
+ 如果儀表板查詢執行超過 60 秒，則會中止查詢
+ 如果 ETL 查詢執行時間超過一小時，則會記錄這些查詢
+ 管理員佇列沒有任何資源限制

------
#### [ CLI ]

您可以使用 CreateWorkgroup 或 UpdateWorkgroup APIs搭配 `wlm_json_configuration` 組態參數來管理佇列，以 JSON 格式指定佇列。

```
aws redshift-serverless create-workgroup \
  --workgroup-name test-workgroup \
  --namespace-name test-namespace \
  --config-parameters '[{"parameterKey": "wlm_json_configuration", "parameterValue": "[{\"name\":\"dashboard\",\"user_role\":[\"analyst\",\"viewer\"],\"query_group\":[\"reporting\"],\"query_group_wild_card\":1,\"rules\":[{\"rule_name\":\"short_timeout\",\"predicate\":[{\"metric_name\":\"query_execution_time\",\"operator\":\">\",\"value\":60}],\"action\":\"abort\"}]},{\"name\":\"ETL\",\"user_role\":[\"data_scientist\"],\"query_group\":[\"analytics\",\"ml\"],\"rules\":[{\"rule_name\":\"long_timeout\",\"predicate\":[{\"metric_name\":\"query_execution_time\",\"operator\":\">\",\"value\":3600}],\"action\":\"log\"},{\"rule_name\":\"memory_limit\",\"predicate\":[{\"metric_name\":\"query_temp_blocks_to_disk\",\"operator\":\">\",\"value\":100000}],\"action\":\"abort\"}]},{\"name\":\"admin_queue\",\"user_role\":[\"admin\"],\"query_group\":[\"admin\"]}]"}]'
```

------

## 最佳實務
<a name="serverless-workgroup-query-queues-best-practices"></a>

當您使用無伺服器佇列時，請記住下列最佳實務。
+ 對於具有不同限制需求的工作負載 （例如 ETL、報告或臨機操作分析），請使用個別佇列。
+ 從簡單的閾值開始，並根據查詢行為和用量模式進行調整。您可以使用系統資料表和檢視中[記錄的資料表和檢視來監控查詢用量模式，以取得查詢監控規則](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html#cm-c-wlm-qmr-tables-and-views)。