设置查询队列 - Amazon Redshift

从补丁 198 开始,Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息,请参阅博客文章

设置查询队列

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

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

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

注意事项

使用无服务器队列时,请注意以下事项:

  • Redshift 无服务器队列不支持在 Amazon Redshift 预置集群中使用的以下工作负载管理(WLM)配置键:max_execution_timeshort_query_queueauto_wlmconcurrency_scalingpriorityqueue_typequery_concurrencymemory_percent_to_useuser_groupuser_group_wild_card

    此外,无服务器不支持 hop、change_query_priority 操作。

  • Amazon Redshift Serverless 不支持 hop 操作(在队列之间移动查询)。

  • 仅 Amazon Redshift 预置集群支持队列优先级。

  • Amazon Redshift Serverless 会自动管理扩展和资源分配以实现最佳性能,因此您无需手动配置队列优先级。

设置查询队列

您可以使用 AWS 管理控制台、AWS CLI 或 Redshift Serverless API 在“限制”选项卡下为无服务器工作组创建队列。

Console

按照以下步骤为无服务器工作组创建队列。

  1. 导航到 Redshift Serverless 工作组。

  2. 选择“限制”选项卡。

  3. 查询队列下,选择启用队列

    重要

    启用查询队列是一项永久性更改。启用后,您将无法恢复到无队列监控。

  4. 使用以下参数配置队列:

    队列级别参数

    • 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\"]}]"}]'

最佳实践

使用无服务器队列时,请记住以下最佳实践。

  • 对具有不同限制要求(例如 ETL、报告或临时分析)的工作负载使用单独的队列。

  • 从简单的阈值开始,然后根据查询行为和使用模式进行调整。您可以使用查询监控规则的系统表和视图中记录的表和视图来监控查询使用模式。