【问题标题】:Amazon Redshift - The difference between Query Slots, Concurrency and Queues?Amazon Redshift - 查询槽、并发和队列之间的区别?
【发布时间】:2015-03-22 16:00:50
【问题描述】:

最初,问题是在 DB Administrators 站点here 中提出的,但由于那里没有引起注意,我想我会在这里提出来。我将做一个总结,因为整个问题是关于如何在 Amazon Redshift 中设置并行查询感到困惑:

我们正在构建一个商业智能系统,我们的后台是 JSF,我们的数据库机器是 Amazon Redshift。

我们正在并行发送查询。起初它似乎并没有表现得更好,就像它们是并行发送的,而是在 DB 机器中按顺序解析。

我们在文档中找到:

http://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html

http://docs.aws.amazon.com/redshift/latest/dg/c_troubleshooting_query_performance.html

http://docs.aws.amazon.com/redshift/latest/dg/r_wlm_query_slot_count.html

默认情况下,redshift 会同时接收 5 个查询,但这是我们可以更改的设置。

需要考虑 3 个主要事项:查询槽、并发和队列。我们已经明白这一点:

  • 队列就像 Java 中的线程。查询到达并被指定 到“负载较少”的队列,它等待轮到它解决。 我们可以有尽可能多的队列。队列有一些内存 分配(我们猜是平均分配?)在队列中我们可以分配用户 组或查询组。但在短期内,这是很多 我们现在无法在查询中进行分类工作。

  • 并发是队列可以运行的查询数量 平行线。默认为 5。

  • 查询槽是查询可以使用的内存量。它是 与我们理解的并发相关。并发越多 队列有,它拥有的每个查询槽中的内存越少。

我们尝试了 3 个队列,每个队列有 5 个并发;性能提高了很多,比如 40%,但我认为有更好的方法来设置它。

那么,我们理解正确了吗? 我们有一些视图最多做 25-28 个查询,总加载时间在 60s 左右,我们怎样才能让查询得到更快的解决?

【问题讨论】:

    标签: java multithreading concurrency amazon-redshift


    【解决方案1】:

    如果您的所有查询都相似,您可以只使用一个具有 100% 内存的队列并将其并发级别提高到 30。(但通常不建议将并发级别设置为 > 15-20)

    据我了解,当您的某些查询是“繁重的”时,您通常会定义多个队列。这使您可以将一个队列中的繁重查询和“正常”查询重定向到另一个队列。通过这种方式,您可以确保您的“正常”查询不会卡在一些持续数小时的繁重查询之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-03
      • 2013-10-24
      • 1970-01-01
      • 2014-12-10
      • 2015-06-25
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多