Ошибка нехватки памяти при создании таблицы, но SELECT работает

Я пытаюсь СОЗДАТЬ таблицу, используя 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]
  -----------------------------------------------;

Я получаю эту ошибку каждый раз, когда выполняю запрос, но выполнение только SELECT части запроса (без CREATE TABLE AS) работает нормально. Результат имеет около 38 тыс. строк. Однако я вижу существенную разницу в байтах, возвращаемых при последовательном сканировании одной таблицы.

ВЫБРАТЬ

введите здесь описание изображения введите здесь описание изображения


СОЗДАТЬ ТАБЛИЦУ КАК ВЫБРАТЬ введите здесь описание изображения введите здесь описание изображения


Я не понимаю, почему между этими двумя сценариями такая большая разница и что можно сделать, чтобы смягчить ее. Я также пытался создать TEMP TABLE, но это также приводит к ошибке памяти.

Я плохо разбираюсь в планах запросов (никогда не находил подробного руководства по Redshift, поэтому, если бы вы могли дать ссылку на какой-нибудь ресурс, это было бы бонусом).

Обновление: также попытался сначала создать таблицу, а затем ВСТАВИТЬ данные с помощью SELECT, что также дает ту же ошибку.

Обновление 2. Пробовал set wlm_query_slot_count to 40; или даже 50, но все равно та же ошибка.


person Yankee    schedule 24.10.2019    source источник
comment
Вы уже открыли тикет для поддержки AWS? Мы сделали, и, надеюсь, у нас будет ответ быстро. Несколько дней назад на Redshift вышло техническое обновление, которое может быть связано. А пока вы можете заставить его работать, если выберете меньше столбцов. Я не знаю, в какой степени вы можете это сделать, но это стоит попробовать.   -  person anteverse    schedule 28.10.2019
comment
@anteverse Кажется, у меня есть базовый план поддержки, поэтому было бы здорово, если бы вы могли сообщить мне здесь свои выводы, это действительно поможет мне понять эту странную проблему. Спасибо   -  person Yankee    schedule 29.10.2019
comment
Команда Redshift выпустила обновление через несколько дней, и после некоторого наблюдения нам кажется, что оно стало намного лучше. Какие-то изменения с вашей стороны?   -  person anteverse    schedule 13.12.2019
comment
@anteverse Я прибегнул к обходному пути для этого запроса, и он работает нормально. Я попробую исходный запрос и вернусь.   -  person Yankee    schedule 13.12.2019


Ответы (2)


Мы столкнулись с похожей проблемой после того, как наши кластеры были обновлены до последней версии (1.0.10694).

Две вещи, которые помогли:

  • Изменение вашего WLM, чтобы выделить больше памяти для вашего запроса (в нашем случае мы переключились на WLM Auto)
  • Выделение большего query_slot_count для вашего запроса: set wlm_query_slot_count to 2; для выделения 2 слоты запросов, например.

Мы подозреваем, что AWS, возможно, что-то изменила в управлении памятью с последними обновлениями. Я обновлю, как только мы получим ответ.

person pcothenet    schedule 28.10.2019
comment
Привет, спасибо за ответ, я использую автоматический WLM и пытался установить wlm_query_slot_count от 4-5 до 40-50, но это все равно не сработало. - person Yankee; 29.10.2019

В качестве обходного пути вы можете попробовать вставлять записи партиями.

person Melissa Guo    schedule 01.04.2021