Снежинка Выбор Дома - PullRequest
0 голосов
/ 26 мая 2020

Наши задания ETL выполняются иногда как снежинка. У нас есть два склада средний и 2хл. Одно из правил, которым мы следуем, заключается в том, что если запрос выполняется менее 10 минут, мы переходим на средний склад, все, что больше этого, переходит в 2XL. Но правильный ли это способ сегрегации.

Я знаю, что Snowflake выполняет параллельный запрос в зависимости от доступности ядра. Например, кластер

2XL состоит из 32 узлов по 8 ядер в каждом. Snowflake пытается разбить каждый запрос на 256 частей. Так, например, если мы запустим запрос:

select sum (a) from mytable;

Затем каждое из 256 ядер сканирует 1/256 таблицы.

Но как мне узнать, можно ли разбить таблицу на 256 ядер, в ней может не хватить данных для разделения. В таком случае нет смысла запускать запрос на 2XL.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Если ваши процессы ETL являются частью часто выполняемого рабочего потока, то лучший способ приблизиться к этому - протестировать каждый запрос как на Medium, так и на 2XL и определить, получаете ли вы максимальную отдачу от вложенных средств. Я предполагаю, что у вас не просто все время работают оба склада, и вы хотите выяснить, как лучше всего разрешить запуск и отключение этих складов во время вашего рабочего потока. Как правило, тестирование каждого запроса - лучший способ получить go. В противном случае вы можете рассмотреть крайние случаи (например, когда среда создает утечку, вам определенно нужен склад большего размера). Кроме того, количество микроразделов, считываемых во время выполнения вашего запроса, даст вам представление о том, сколько потоков может использовать хранилище. Если у вас меньше микро-разделов, тогда у вас есть потоки, значит, вы используете слишком много хранилища.

Наконец, необычно иметь такой большой разрыв между вашей «маленькой» и «большой» нагрузкой. Я бы порекомендовал оценить склады большого и размера XL. Вам НИЧЕГО не нужно настраивать дополнительные склады и предоставлять их вам. Просто сделайте так, что вы закрываете их, когда запросы завершены, чтобы избежать дополнительного времени безотказной работы из-за вашей автоматической приостановки.

0 голосов
/ 27 мая 2020

Это скорее субъективный вопрос.

Если вы запускаете и среду, и 2XL одновременно, почему бы не запустить все на 2XL и не сохранить среду, где - как будто вы вращаете вверх / вниз по 2XL, если он держится менее 60 секунд, вы платите за 60 секунд. Что для запросов, которые занимают> 10 минут в абсолютно линейном режиме, займет более 1 минуты.

Как вы узнаете, можно ли его разделить, отчасти теоретически, это по своей сути параллельное

select id, count(*) from table group by id;

где у вас много идентификаторов, очень параллельных, даже если у вас только один идентификатор, это все еще можно распараллеливать из-за того, что счетчики не конфликтуют ... где-as

select id, count(distinct column2) ...

необходимо построить набор столбцов 2 для каждого идентификатора, поэтому 32 экземпляра не принесут многого. Но все же преобразования нагрузки ввода-вывода могут быть дорогостоящей частью ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...