Redshift WLM:“最终队列可能不包含用户组或查询组”

Posted

技术标签:

【中文标题】Redshift WLM:“最终队列可能不包含用户组或查询组”【英文标题】:Redshift WLM: "final queue may not contain User Groups or Query Groups" 【发布时间】:2016-06-01 19:08:09 【问题描述】:

我想更新我的 Redshift 集群的 WLM 配置,但由于显示以下消息,我无法进行更改并保存它们:

必须先纠正以下问题,然后才能保存此工作负载配置:

最终队列可能不包含用户组或查询组。

现在,显而易见的解决方案是创建一个不指定用户组的新队列,并为其分配剩余的内存量,这样所有的内存加起来就达到 100%。这很烦人,因为添加新队列需要重新启动集群,但这不是我问这个问题的原因。

我的主要问题是在哪里需要解释新的“非用户”队列?这绝对是一个变化,因为以前,我有四个队列,每个队列都有一个分配的用户组,它们的总内存分配是 87%。加起来不是 100%,据说其余部分是由 redshift 动态管理的。

现在,我创建这个新队列没有问题,但我真的很想在我做之前看到一个明确的解释它的作用/它的影响是什么。我没有在他们的官方博客上看到更新,我没有在文档中看到这一点,或者文档更新(http://docs.aws.amazon.com/redshift/latest/mgmt/document-history.html,https://docs.aws.amazon.com/redshift/latest/dg/doc-history.html)这阻止了我对现有队列进行其他所需的更改。

【问题讨论】:

【参考方案1】:

我不确定你的这个说法:

以前,我有四个队列,每个队列都有一个分配的用户组

但是,很容易猜到为什么 Redshift 需要一个默认队列(即没有任何用户或查询组的队列)作为最后一个。假设您有四个队列,每个队列都有不同的用户组,例如 UG1、UG2、UG3 和 UG4。现在,来自另一个用户组(例如 UG5)的用户查询 Redshift。它被路由到哪个队列?在这种情况下,默认队列会有所帮助。

您可能会反驳说 Redshift 可以使用剩余的 13% 内存。如果 100 个并发查询来自 UG5。 Redshift 没有任何关于您希望如何将 13% 内存分配给这些查询的配置。如果它自己管理内存,您的集群的性能将无法预测。

但是,是的,我同意 Redshift 文档对此缺乏明确性。我能找到的最接近的是this。不过,它并没有说默认队列不能有任何用户或查询组。

默认队列必须是 WLM 配置中的最后一个队列。任何 未路由到其他队列的查询在默认队列中运行。

无论如何,我猜你必须忍受它。

【讨论】:

谢谢,但它仍然令人困惑,因为在同一页面上,它说 - - For example, if you configure four queues, you can allocate memory as follows: 20 percent, 30 percent, 15 percent, 15 percent. The remaining 20 percent is unallocated and managed by the service. 与文档中的任何内容都不矛盾 也许它并没有直接矛盾,但它暗示你可以有未分配的内存,而在文档的其他地方,它说你必须定义一个默认队列。不同之处在于,以前,当您可以拥有未分配的内存时,我认为如果系统认为可以提高性能,也许可以暂时将更多资源分配给不同的队列。 (也许它从来没有这样做过,我不知道)。但现在,似乎暗示每个队列都有固定容量,默认队列仅用于运行不符合其他队列条件的查询

以上是关于Redshift WLM:“最终队列可能不包含用户组或查询组”的主要内容,如果未能解决你的问题,请参考以下文章

wlm redshift 为两个队列提供 100% 的内存

Redshift WLM 配置:如何使用未分配的内存?

在 redshift 中动态地将内存分配给 WLM 队列

Redshift Auto WLM 配置、队列数和查询槽?

批量插入的 Redshift 查询队列使用情况

我如何知道已运行的查询的 query_group?