Amazon Redshift - 查询槽、并发和队列之间的区别



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

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

我们正在并行发送查询。起初,它的性能似乎并没有更好,就像它们是并行发送的,而是在数据库机器中按顺序解析的。

我们在文档中发现:

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

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

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

  • 队列就像 Java 中的线程。查询到达并被指定到"负载较少"的队列,等待轮到它解决。我们可以根据需要设置任意数量的队列。队列有一些内存分配(我们猜平分?在队列中,我们可以分配用户组或查询组。但在短期内,这是很多查询中的分类工作我们现在无法完成。

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

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

我们尝试有 3 个队列,

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

那么,我们理解正确吗?我们有一些视图最多可以执行 25-28 个查询,并且加载时间的总时间约为 60 秒,我们如何才能更快地解决查询的设置?

如果所有查询看起来都相似,则只能使用一个具有 100% 内存的队列,并将其并发级别增加到 30。(但是通常不建议将并发级别设置为 15-20>)

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

最新更新