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 节点并行请求比顺序请求花费的时间更长的主要内容,如果未能解决你的问题,请参考以下文章