

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 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/)。

# 使用 Amazon Redshift Serverless 监控查询和工作负载
<a name="serverless-monitoring"></a>

您可以使用提供的系统视图监控 Amazon Redshift Serverless 查询和工作负载。

*监控视图*是 Amazon Redshift Serverless 中用于监控查询和工作负载使用情况的系统视图。这些视图位于 `pg_catalog` 架构中。可用的系统视图旨在为您提供监控 Amazon Redshift Serverless 所需的信息，这比预置集群所需的信息简单得多。SYS 系统视图旨在与 Amazon Redshift Serverless 配合使用。要显示这些视图提供的信息，请运行 SQL SELECT 语句。

系统视图的定义是为了支持以下监控目标。

**工作负载监控**  
您可以随时间推移监控查询活动，以便：  
+ 了解工作负载模式，这样您就可以了解正常运行状况（基准）以及业务服务级别协议 (SLA) 中的内容。
+ 快速识别偏离正常运行的状况，这可能是个暂时性问题，或是需要采取进一步操作的问题。

**数据加载和卸载监控**  
进出 Amazon Redshift Serverless 的数据移动是一项关键功能。您可以使用 COPY 和 UNLOAD 来加载和卸载数据，并且必须密切监控传输的字节/行数和文件的完成进度，以跟踪遵守业务 SLA 的情况。这通常是通过频繁运行系统表查询（即每分钟）来完成，以便跟踪进度，并在检测到重大偏差时发出调查/纠正操作的提示。

**故障和问题诊断**  
某些情况下，必须对查询或运行时故障采取措施。开发人员依靠系统表自行诊断问题，并确定正确的纠正补救措施。

**性能优化**  
您可能需要优化从一开始就不符合 SLA 要求的查询或随时间推移而降级的查询。要进行优化，您必须具有运行时详细信息，包括运行计划、统计数据、持续时间和资源占用情况。您需要用于违规查询的基准数据，以确定偏差的原因并指导您如何改进性能。

**用户对象事件监控**  
您需要监控用户对象上的操作和活动，例如刷新实体化视图、VACUUM 和分析。这包括系统管理的事件，例如实体化视图的自动刷新。如果事件是用户启动的，您想监控事件结束时间，或者如果事件是系统启动的，则监控最后一次成功运行。

**计费的使用情况跟踪**  
您可以随时间转移监控您的使用情况趋势，以便：  
+ 告知预算计划和业务扩展估计值。
+ 确定潜在的成本节约机会，例如删除冷数据。

使用 SYS 系统视图监控 Amazon Redshift Serverless。有关 SYS 监控视图的更多信息，请转到《Amazon Redshift 数据库开发人员指南》中的 [SYS 监控视图](https://docs.aws.amazon.com//redshift/latest/dg/serverless_views-monitoring.html)。

# 添加查询监控策略
<a name="serverless-monitor-access"></a>

超级用户可以向不是超级用户的用户提供访问权限，以便他们可以对所有用户执行查询监控。首先，您可以为用户或角色添加策略以提供查询监控访问权限。然后，您可以授予用户或角色查询监控权限。

**添加查询监控策略**

1. 选择 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在**访问管理**下，选择**策略**。

1. 选择**创建策略**。

1. 选择 **JSON**，然后粘贴以下策略定义。

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
   "Effect": "Allow",
   "Action": [
       "redshift-data:ExecuteStatement",
       "redshift-data:DescribeStatement",
       "redshift-data:GetStatementResult",
       "redshift-data:ListDatabases"
   ],
   "Resource": "*"
   },
   {
   "Effect": "Allow",
   "Action": "redshift-serverless:GetCredentials",
   "Resource": "*"
   }
   ]
   }
   ```

------

1. 选择**查看策略**。

1. 对于**名称**，输入策略的名称，如 `query-monitoring`。

1. 选择**创建策略**。

创建策略后，您可授予相应的权限。

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

# 向用户授予查询监控权限
<a name="serverless-monitor-access-user"></a>

具有 `sys:monitor` 权限的用户可以查看所有查询。此外，具有 `sys:operator` 权限的用户可以取消查询、分析查询历史记录和执行 vacuum 操作。

**授予用户查询监控权限**

1. 输入以下命令以提供系统监控访问权限，其中 *user-name* 是您想要为其提供访问权限的用户的名称。

   ```
   grant role sys:monitor to "IAM:user-name";
   ```

1. （可选）输入以下命令以提供系统操作员访问权限，其中 *user name* 是您想要为其提供访问权限的用户的名称。

   ```
   grant role sys:operator to "IAM:user-name";
   ```

# 向角色授予查询监控权限
<a name="serverless-monitor-access-role"></a>

具有 `sys:monitor` 权限的角色的用户可以查看所有查询。此外，具有 `sys:operator` 权限的角色的用户可以取消查询、分析查询历史记录和执行 vacuum 操作。

**授予角色查询监控权限**

1. 输入以下命令以提供系统监控访问权限，其中 *role-name* 是您想要为其提供访问权限的角色的名称。

   ```
   grant role sys:monitor to "IAMR:role-name";
   ```

1. （可选）输入以下命令以提供系统操作员访问权限，其中 *role-name* 是您想要为其提供访问权限的角色的名称。

   ```
   grant role sys:operator to "IAMR:role-name";
   ```

# 设置使用限制，包括设置 RPU 限制
<a name="serverless-workgroup-max-rpu"></a>

在工作组的**限制**选项卡中，您可以添加一个或多个使用限制，以控制在给定时间段内使用的最大 RPU 数，或设置数据共享使用限制。

1. 选择**管理使用限制**。限制部分显示在**按时间段统计的计算使用量**面板的底部。

1. 以 RPU 小时数为单位设置使用量限制。

1. 选择**频率**，即**每天**、**每周**或**每月**。这将设置使用量限制的时间段。在这种情况下选择**每天**可向您提供更详细的控制权。

1. 设置使用限制（以小时数为单位）。

1. 选择操作。这些操作包括：
   + **记录到系统表** - 向系统视图 [SYS\$1QUERY\$1HISTORY](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_HISTORY.html) 中添加记录。您可以在此视图中查询 `usage_limit` 列，来确定查询是否超出了限制。
   + **提醒** - 使用 Amazon SNS 设置通知订阅，并在违反限制时发送通知。您可以选择现有的 Amazon SNS 主题或创建一个新主题。
   + **关闭用户查询** - 禁用查询以停止使用 Amazon Redshift Serverless。它还会发送通知。

   前两个操作是信息性的，但最后一个操作会关闭查询处理。

1. （可选）您可以设置**跨区域数据共享使用限制**，这限制了使用者可以查询的从生产者区域传输到使用者区域的数据量。为此，请选择**添加限制**，然后按以下步骤操作。

1. 选择页面底部的**保存**以保存限制。

1. 根据需要最多再设置 3 个限制。

有关 RPU 和计费的更多概念信息，请参阅 [Amazon Redshift Serverless 的计费](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-billing.html)。

# 设置查询限制
<a name="serverless-workgroup-query-limits"></a>

在工作组的**限制**选项卡中，您可以添加限制以监控性能和限制。有关查询监控限制的更多信息，请参阅 [WLM 查询监控规则](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html)。

1. 选择**管理查询限制**。在**管理查询限制**对话框中选择**添加新限制**。

1. 选择要设置的限制类型，然后为其相应的限制输入一个值。

1. 选择**保存更改**以保存限制。

当您更改查询限制和配置参数时，数据库将重新启动。

# 设置查询队列
<a name="serverless-workgroup-query-queues"></a>

Amazon Redshift Serverless 支持基于队列的查询资源管理。您可以为不同的工作负载创建带有自定义监控规则的专用查询队列。此功能提供对资源使用情况的精细控制。

查询监控规则（QMR）仅适用于 Redshift Serverless 工作组级别，并一致地影响在该工作组中运行的所有查询。基于队列的方法支持您创建具有不同监控规则的队列。您可以将这些队列分配给特定的用户角色和查询组。每个队列独立运行，而规则仅影响该队列中的查询。

队列可让您设置基于指标的谓词和自动响应。例如，您可以配置规则，以自动中止超过时间限制或消耗过多资源的查询。

## 注意事项
<a name="serverless-workgroup-query-queues-considerations"></a>

使用无服务器队列时，请注意以下事项：
+ Redshift 无服务器队列不支持在 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`。

  此外，无服务器不支持 hop、change\$1query\$1priority 操作。
+ Amazon Redshift Serverless 不支持 hop 操作（在队列之间移动查询）。
+ 仅 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 API 与 `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)中记录的表和视图来监控查询使用模式。

# 使用控制面板检查 Amazon Redshift Serverless 摘要数据
<a name="serverless-dashboard"></a>

Amazon Redshift Serverless 控制面板包含一系列面板，这些面板一目了然地显示有关工作组和命名空间的指标和其他信息。这些面板包括：
+ **资源摘要**：显示有关 Amazon Redshift Serverless 的概括性信息，如使用的存储空间和其他指标。
+ **查询摘要** - 显示有关查询的信息，包括已完成的查询和正在运行的查询。选择**查看详细信息**可转到具有其他筛选条件的屏幕。
+ **已用 RPU 容量** - 显示给定时间段内使用的总容量，例如前十个小时。
+ **数据共享** - 显示数据共享的计数，例如，用于在 AWS 账户之间共享数据的数据共享的计数。这些指标显示哪些数据共享需要授权以及其他信息。
+ **总计算使用量** – 显示选定工作组在选定时间范围内（最多为过去 7 天）消耗的 RPU 总时数。

从控制面板中，您可以快速了解这些可用的指标，以查看有关 Amazon Redshift Serverless 的详细信息，或查看查询或跟踪工作项目。