【问题标题】:In AWS Redshift, how can query cancellation be fully automated?在 AWS Redshift 中,查询取消如何实现完全自动化?
【发布时间】:2020-05-09 03:35:44
【问题描述】:

在 AWS Redshift 中,我可以使用 pg_terminate_backend(pid); 命令终止查询。

问题是pid只能通过查询stv_recents表运行查询后才能得到。

这给自动化带来了问题 - 如何以编程方式终止查询(可能是因为它超过了时间限制)?据我所见,我可以通过过滤查询、用户和开始时间列(在 pid 中)来获取 pid。问题是,所有查询都来自应用程序用户(同一用户),一些用户可能执行相同的查询。

有什么方法可以在查询执行时/之后点击某种类型的回调并获取 pid?否则,如何自动取消查询?

提前致谢。

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    我自己实现了类似的方法,并推荐给你。 我在 Redshift WLM 中定义了组。例如,如果 DB 用户属于某个特定组,则可以无时间限制地运行查询,所有其他 DB 用户查询将在定义的时间后取消。这种方法的缺点是您需要手动设置所有内容,包括每组的最大并行查询数。但这只需要做一次。 这是为我们的目的创建的配置文件:

    [
      {
        "query_concurrency": 13,
        "memory_percent_to_use": 87,
        "query_group": [],
        "query_group_wild_card": 0,
        "user_group": [
          "wlm_main"
        ],
        "user_group_wild_card": 0
      },
      {
        "query_concurrency": 2,
        "max_execution_time": 300000,
        "query_group": [],
        "query_group_wild_card": 0,
        "user_group": [],
        "user_group_wild_card": 0
      },
      {
        "short_query_queue": true
      }
    ]
    

    它表示分配到组 wlm_main 的用户将被分配到第一个队列。 所有其他人将被分配到第二个队列,其中最多可以并行运行 2 个查询,所有其他人都在队列中等待。除此之外,还使用了short query acceleration。如您所见 - 第一个队列没有时间限制,第二个队列有 300000 毫秒(5 分钟)的限制。

    编辑:关于这个特定用例的扩展答案。

    获取提交到数据库的查询的 pid(进程 ID)。您可以在具有唯一值(散列或序列)的 SQL 语句前添加注释,如下所示:/* d131dd02c5e6eec4 */ select ...。然后基于此您可以在 stv_recents 或 stv_inflight 中搜索它并获取 pid。获取pid后可以用来终止会话:pg_terminate_backend(pid)

    【讨论】:

    • 很好的答案。我要补充一点,max_execution_time 这里实际上是执行时间,不适用于处于“等待”或“返回”状态的查询。如果您想确保查询在其他状态下被强制终止,您可以考虑使用 QMR 规则。 docs.aws.amazon.com/redshift/latest/dg/…
    • 这对于长时间运行的查询非常有用。然而,它并没有解决以编程方式终止查询的问题。如果它是事件驱动的呢?
    • 我是否理解正确:您想终止由某些特定 Web 应用程序(或类似前端)会话和/或用户发起的查询?
    • 该应用程序允许用户在 UI 中构建查询。拥有取消功能(允许用户取消)会非常有用。
    • 您可以在具有唯一值(散列或序列)的 SQL 语句前添加注释,如下所示:/* d131dd02c5e6eec4 */ select ...。然后基于此您可以在 stv_recents 或 stv_inflight 中搜索它并获取 pid。
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2020-06-14
    • 2023-03-06
    • 2016-04-30
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多