Как работает очередь запуска в Snowflake? Существует ли вообще понятие временной задержки?

#snowflake-cloud-data-platform

#snowflake-cloud-data-platform

Вопрос:

Я новичок в Snowflake, и документация неясна.

  1. Допустим, я использую большой склад с 5 максимальными одновременными запросами
  2. Есть 5 пользователей, которые запускают сверхмощные запросы, выполнение которых может занять много минут
  3. У 6-го пользователя есть простой запрос для выполнения
  4. Выдают ли процессы, выполняющие эти 5 запросов, в любой момент времени или они выполняются до завершения?
  5. Должен ли 6-й пользователь ждать, пока не будет достигнут предел времени ожидания, и пытаться использовать другой виртуальный склад

Спасибо!

Ответ №1:

Очередь — это очередь первого поступления, как и большинство (все?) Других баз данных. Если запрос помещен в очередь из-за того, что другие запросы потребляют все ресурсы кластера, ему придется подождать, пока другие запросы не будут завершены (или время ожидания), прежде чем он сможет выполняться. Snowflake не приостанавливает выполнение запроса, который выполняется, чтобы «подкрасться» к меньшему запросу.

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

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

Ответ №2:

На самом деле это хороший вопрос, и понимание того, как это работает в snowflake, поможет вам использовать snowflake более оптимально. Как вы уже знаете, snowflake использует виртуальные хранилища для вычислений, которые представляют собой не что иное, как кластер вычислительных узлов. Каждый узел имеет 8 ядер. Итак, когда вы отправляете запрос в виртуальное хранилище, каждый запрос обрабатывается одним или несколькими ядрами (в зависимости от того, может ли запрос быть распараллелен). Итак, если у виртуального хранилища нет ядра для выполнения 6-го запроса, оно встанет в очередь. Если вы войдете в пользовательский интерфейс snowflake и нажмете на вкладку склада, вы увидите эту очередь через желтый цвет на столбцах. Вы также можете увидеть его в разделе ‘QUEUED_OVERLOAD_TIME’, если вы запрашиваете представление QUERY_HISTORY.

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

Комментарии:

1. Я думаю, что здесь есть 2 дополнительных пункта. # 1 — только потому, что у вас есть хранилище с максимальным параллелизмом 5, не означает, что 5 больших запросов действительно будут выполняться. Snowflake может определить, что первый запрос использует все ресурсы, и, следовательно, поставит остальные в очередь. # 2 — как уже упоминалось, именно поэтому вы должны кластеризировать свои склады! Это позволяет Snowflake запускать дополнительные вычисления, когда это необходимо, и вы по-прежнему платите только за то, что используете!