Amazon Redshift 节点并行请求比顺序请求花费的时间更长

Posted

技术标签:

【中文标题】Amazon Redshift 节点并行请求比顺序请求花费的时间更长【英文标题】:Amazon Redshift node parallel requests take longer than sequential 【发布时间】:2018-04-16 18:32:29 【问题描述】:

我正在尝试使用 node-redshift 和 pg 从我的节点应用程序中对 redshift 运行一堆选择查询。如果我按顺序运行查询,每个查询平均需要 2 秒。但是当我并行运行查询时,它们需要更长的时间,最后一个查询大约需要 32 秒。

我可以清楚地看到阻塞是由并行加载查询引起的。有什么办法呢?

我还可以得出结论,Redshift 不会花那么长时间。因为缓存的 Redshift 查询仍然需要相当大的开销。

顺序:

平行:

【问题讨论】:

【参考方案1】:

Amazon Redshift Workload Management可用于配置并发、队列和内存分配。

默认情况下,Amazon Redshift 配置一个队列,并发级别为 5,允许最多 5 个查询同时运行,外加一个预定义的超级用户队列,并发级别为 1。您最多可以定义八个队列。每个队列可配置最大并发级别为 50。所有用户自定义队列(不包括超级用户队列)的最大总并发级别为 50。

并发查询需要永久分配的内存。如果您总是运行并发查询,这很好,但如果只运行少量时间,则很浪费。

一种常见的做法是创建单独的队列:

一个队列用于低并发的长时间运行查询。这会为每个查询分配大量内存,但查询可能会排队。 一个用于短期查询的队列。这允许较短的查询快速完成,而不会受到长时间运行的查询的影响——例如,每隔几分钟计算一次仪表板查询。这些类型的查询可能需要更少的内存,因此可以增加并发性。

底线:默认情况下,Redshift 配置用于低并发的大型复杂查询。您可以调整设置。

【讨论】:

我们尝试增加队列数和并发性。但它显示的效果正好为 0。不知道为什么。瓶颈似乎在其他地方。

以上是关于Amazon Redshift 节点并行请求比顺序请求花费的时间更长的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift:拒绝访问还原集群快照请求

Amazon Redshift 术语

如何更新 Amazon Redshift 上的 Python 库?

与 Amazon Redshift 同步

Amazon Redshift 按特定值排序

Amazon Redshift:查找和修复倾斜的 DISTKEY