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

ola*_*lls 5 amazon-web-services amazon-redshift

定义Redshift查询队列时,可以分配分配给每个队列的内存比例.因此,例如,如果您有5个队列,则可以为每个队列分配20%的内存.但是,您还允许分配内存,使其中的一部分保持未分配状态.

在本文档中:http: //docs.aws.amazon.com/redshift/latest/dg/cm-c-defining-query-queues.html 它说: "任何未分配的内存都由Amazon Redshift管理,可以暂时给出如果队列请求额外的内存进行处理,则为队列.例如,如果配置四个队列,则可以按如下方式分配内存:20%,30%,15%,15%.剩余的20%未分配和管理服务."

在文档的前面,它说,"如果特定查询需要的内存多于分配给单个查询槽的内存,则可以通过增加wlm_query_slot_count参数来增加可用内存.以下示例将wlm_query_slot_count设置为10,执行真空,以及然后将wlm_query_slot_count重置为1."

这与内存分配有关吗?可以使用查询插槽计数调整来暂时消耗比通常允许的整个队列更多的内存吗?

我认为我的问题实际上是关于第一个引用的这一部分,"任何未分配的内存都由Amazon Redshift管理,如果队列请求额外的内存进行处理,可以暂时将其分配给队列."

这是否意味着运行查询的用户必须专门请求额外的内存?这是否意味着除非您提出这些特定请求,否则保留一些未分配的内存是没有用的?

Guy*_*Guy 7

wlm_query_slot_count和队列的内存分配这两个概念是不同的.

例如,当您将群集的并发级别分配给20时,您将创建20个执行槽.如果这些较小的插槽(与默认的较大的5个插槽相比)对于某些查询(例如VACUUM或更大的报告)来说太小,则可以使用wlm_query_slot_count为这些特定查询提供多个插槽而不是单个插槽.

在CPU,IO和RAM方面对各个插槽的资源分配不必是统一的,因为您可以为某些队列提供比其他队列更多的内存,因为发送到此队列的查询需要更多内存.当您在计算过程中看到更多查询溢出到磁盘时,您可以知道需要更多内存.

对于您正在运行的每个查询,Redshift将根据您要访问的列以及您在这些列上应用的函数来估计内存要求(这是使列定义尽可能窄的另一个好理由).如果WLM具有未分配的内存,则可以将其中的一部分提供给需要它的查询.

然而,当您创建此类队列定义时,您在群集上缺少为查询分配资源的灵活性.例如,您可能会创建一个完全阻塞的队列,而其他队列处于空闲状态并浪费群集资源.因此,请小心操作,并监视这些队列的使用情况,以验证您实际上是在改进群集优先级和性能,而不是伤害它.