【发布时间】: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