Выполняет ли redshift сериализацию операций записи?

У нас запущен кластер из 5 узлов dc1.large, и возникают проблемы с масштабированием загрузки данных.

Каждый «загрузчик» - это отдельный процесс, который: - запускает команду COPY из S3 в промежуточную таблицу - затем выполняется удаление активной таблицы (для удаления строк, которые находятся в промежуточной таблице) - наконец, вставляются промежуточные данные в основную таблицу

Вышеизложенное является в основном рекомендуемым методом в doc < / а>:

Следует отметить важную деталь: каждый загрузчик работает с отдельным набором таблиц (т.е. между загрузчиками нет конфликта блокировок, потому что они работают с разными наборами данных клиентов), поэтому первый загрузчик будет копировать в таблицу L1_Staging и, в конечном итоге, в таблицу L1_main, загрузчик два будут копироваться в L2_staging и, в конечном итоге, в таблицу L2_main и т. д.

Мы замечаем, что когда несколько загрузчиков работают параллельно, время выполнения задания увеличивается, как если бы redhift сериализует все операции записи. Опять же, нет конкуренции за блокировку.

Почему мы видим эту закономерность? Redshift плохо справляется с параллельной записью?


person maxTrialfire    schedule 26.11.2015    source источник
comment
Возможно ли, что записи используют доступную пропускную способность хранилища? Если запрос связан с вводом-выводом, дополнительные потоки не будут работать быстрее.   -  person Gordon Linoff    schedule 26.11.2015
comment
Запрос определенно привязан к вводу-выводу, это большая вставка, за которой следует удаление, за которым следует еще одна вставка. Redshift - это черный ящик, поэтому я действительно не знаю, сколько пропускной способности ввода-вывода я потребляю с каждым запросом.   -  person maxTrialfire    schedule 26.11.2015


Ответы (2)


Да, красное смещение действительно сериализует все операции. Все находится в очереди в их очередь WLM (управление рабочей нагрузкой)

person maxTrialfire    schedule 07.06.2016

Вы получите лучшую производительность, если сможете разделить каждая загрузка в несколько файлов, кратных узлам (в вашем случае 5). С одним файлом вы ограничены пропускной способностью одного узла.

Полезно использовать манифест. файл с несколькими загрузками файлов. Также сжимайте файлы и включите сжатие столбцов таблицы. Сжатие таблиц добавляет вычисления, но затем данные можно быстрее перемещать между узлами, чтобы добраться до них (узел нагрузки не такой, как узел в состоянии покоя).

Поскольку вы выполняете частую и тяжелую операцию удаления, вам необходимо запланировать регулярный vacuum операции с затронутыми таблицами.

Запросы (включая копии) могут выполняться одновременно, но одновременное количество ограничено ресурсами (по умолчанию 5 на узел). Это можно немного изменить. Таким образом, вы сможете эффективно загружать разные таблицы. Как указано выше, проблема, вероятно, больше связана с загрузкой отдельных файлов. Ознакомьтесь с информацией об очередях запросов .

Вот несколько других советов.

person systemjack    schedule 22.06.2016