Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 红移WLM配置:如何使用未分配的内存?_Amazon Web Services_Amazon Redshift - Fatal编程技术网

Amazon web services 红移WLM配置:如何使用未分配的内存?

Amazon web services 红移WLM配置:如何使用未分配的内存?,amazon-web-services,amazon-redshift,Amazon Web Services,Amazon Redshift,定义红移查询队列时,可以分配分配给每个队列的内存比例。因此,例如,如果您有5个队列,您可以为每个队列分配20%的内存。但是,您还允许分配内存,使其一部分保持未分配状态 在本文件中: 上面说,, “任何未分配的内存都由Amazon Redshift管理,如果队列请求额外内存进行处理,则可以临时分配给队列。 例如,如果配置四个队列,则可以按如下方式分配内存:20%、30%、15%、15%。其余20%未分配,由服务管理。“ 在文件的前面,它说, 如果特定查询需要的内存超过分配给单个查询插槽的内存,可以

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

在本文件中: 上面说,, “任何未分配的内存都由Amazon Redshift管理,如果队列请求额外内存进行处理,则可以临时分配给队列。 例如,如果配置四个队列,则可以按如下方式分配内存:20%、30%、15%、15%。其余20%未分配,由服务管理。“

在文件的前面,它说, 如果特定查询需要的内存超过分配给单个查询插槽的内存,可以通过增加wlm\U query\U slot\U count参数来增加可用内存。以下示例将wlm\U query\U slot\U count设置为10,执行真空,然后将wlm\U query\U slot\U count重置为1

这与内存分配有关吗?查询时隙计数调整是否可以用于临时消耗超过整个队列正常允许的内存

我想我的问题是关于第一句话的这一部分,“任何未分配的内存都由Amazon Redshift管理,如果队列请求额外的内存进行处理,可以临时分配给队列。”


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

wlm\u查询\u插槽\u计数和队列的内存分配这两个概念是不同的

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

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

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


然而,当您创建这样的队列定义时,您缺少集群灵活性,无法为查询分配资源。例如,您可能会创建一个完全阻塞的队列,而其他队列处于空闲状态并浪费集群资源。因此,请小心操作,并监控这些队列的使用情况,以验证您是否确实在提高集群优先级和性能,而不是影响它

简单的回答是-wlm\u查询\u插槽\u计数和未分配内存管理是两个不同的东西

将wlm\u查询\u插槽\u计数视为Excel中的单元格合并。如果有5个单元格(队列中有5个插槽),则默认情况下,每个文本只能占用1个单元格(1个插槽)。通过为查询显式设置wlm_query_slot_count,您告诉Redshift合并该文本位(查询)的单元格(slot)。因此,如果将wlm_query_slot_count设置为3,则此特定查询将占用3个slot,就像决定将长文本分散到Excel中的3个合并单元格中一样

从队列管理的角度来看,这就好像有人已经占用了3个插槽。因此,队列中只允许再出现两个单槽查询,其他所有人都必须等待

就内存而言,队列总体上具有固定的内存分配,在插槽之间平均分布。所以,如果整个队列有100GB内存,5个插槽,每个插槽将获得20GB。在这个队列中有3个插槽的查询将得到60GB

“未分配内存管理”与此正交-无论插槽和队列如何,如果需要内存且内存未分配,Redshift可以自行决定将其提供给任何查询(我认为“如果队列请求额外内存”的措词是误导性的),通常基于计划/表统计信息