创建表时出现内存不足错误,但 SELECT 有效

Yan*_*kee 5 sql amazon-redshift

我正在尝试使用 CREATE 一个表CREATE TABLE AS,这给出了以下错误:

[Amazon](500310) Invalid operation: Out Of Memory: 
Details: 
 -----------------------------------------------
  error:  Out Of Memory: 
  code:      1004
  context:   alloc(524288,MtPool)
  query:     6041453
  location:  alloc.cpp:405
  process:   query2_98_6041453 [pid=8414]
  -----------------------------------------------;
Run Code Online (Sandbox Code Playgroud)

每次执行查询时我都会收到此错误,但只执行查询的SELECT一部分(没有CREATE TABLE AS)可以正常工作。结果大约有 38k 行。但是,我发现在一张表上的顺序扫描中返回字节数存在巨大差异。

选择

在此处输入图片说明 在此处输入图片说明


创建表作为选择 在此处输入图片说明 在此处输入图片说明


我无法理解为什么这两种情况之间存在如此大的差异以及可以采取哪些措施来减轻这种差异。我也尝试创建一个,TEMP TABLE但这也会导致内存错误。

我不太了解查询计划(从来没有找到 Redshift 的详细指南,所以如果你能链接到一些资源,那将是一个奖励)。

更新:还尝试先创建表,然后使用 SELECT 插入数据,这也会产生相同的错误。

更新 2:尝试过set wlm_query_slot_count to 40;甚至50但仍然是相同的错误。

pco*_*net 0

在我们的集群更新到最新版本(1.0.10694)后,我们遇到了类似的问题。

有两件事有帮助:

  • 更改 WLM 以便为查询分配更多内存(在我们的示例中,我们切换到WLM Auto
  • 为您的查询分配更高的 query_slot_count : set wlm_query_slot_count to 2;例如分配 2 个查询槽。

我们怀疑 AWS 可能通过最新的更新改变了内存管理方面的某些内容。我们收到回复后我会更新。

  • 嘿,谢谢您的回答,我正在使用自动 WLM,并且实际上尝试将 `wlm_query_slot_count` 设置为从 4-5 到 40-50,但它仍然不起作用。 (2认同)