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

时间:2015-01-23 15:13:08

标签: java multithreading concurrency amazon-redshift

最初,这个问题出现在数据库管理员网站here中,但由于那里没有注意到,我以为我会在这里提出来。我要做一个总结,因为整个问题是如何在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中的一个线程。查询到达并被指定 到#34;负载较少"队列,等待轮到你解决了。 我们可以拥有尽可能多的队列。队列有一些内存 已分配(我们猜是平均分配?)在队列中我们可以分配用户 组或查询组。但从短期来看,这很多 我们的查询中的分类工作现在无法完成。

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

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

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

那么,我们理解正确吗? 我们有一些查看最多25-28个查询,加载时间总量大约是60秒,我们如何让设置更快地解决查询?

1 个答案:

答案 0 :(得分:0)

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

根据我的理解,当您的某些查询是“重型”时,通常会定义多个队列。这使您可以将重型查询重定向到一个队列,将“正常”查询重定向到另一个队列。通过这种方式,您可以确保您的“正常”查询不会遇到一些持续数小时的重型查询。