Важность рабочей нагрузки Azure Synapse Analytics

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

Важность

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

Уровни важности

Существует пять уровней важности: low, below_normal, normal, above_normal и high. Запросам, которые не задают важность, назначается стандартный уровень normal. Запросы с одинаковым уровнем важности имеют одинаковое поведение планирования, существующее сегодня.

Сценарии важности

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

Блокировка

Доступ к блокировкам для операций чтения и записи является одной из типичных конфликтных областей. Для таких действий, как переключение раздела или ПЕРЕИМЕНОВАНИЕ ОБЪЕКТА, требуются повышенные блокировки. Несмотря на важность рабочей нагрузки, выделенный пул SQL в Azure Synapse оптимизирует пропускную способность. Оптимизация пропускной способности означает, что когда выполняемые и поставленные в очередь запросы имеют одинаковые потребности в блокировке и ресурсы доступны, поставленные в очередь запросы могут обходить запросы с более высокими потребностями в блокировке, которые поступили в очередь запросов раньше. После того, как важность рабочей нагрузки будет применена к запросам с более высокими требованиями к блокировке. Запрос с большей важностью будет выполнен перед запросом с меньшей важностью.

Рассмотрим следующий пример.

  • Q1 активно работает и выбирает данные из SalesFact.
  • Q2 находится в очереди, ожидая завершения Q1. Запрос был отправлен в 9 утра и пытается разделить новые данные в SalesFact.
  • Q3 был отправлен в 9:01 и пытается выбрать данные из SalesFact.

Если Q2 и Q3 имеют одинаковую важность, а Q1 все еще выполняется, начнет выполняться запрос Q3. Q2 будет продолжать ожидать монопольной блокировки SalesFact. Если Q2 имеет более высокое значение, чем Q3, Q3 будет ждать завершения Q2, прежде чем он сможет начать выполнение.

Неоднородные запросы

Другой сценарий, в котором важность может помочь удовлетворить запросы запросов, представляет собой отправку запросов с разными классами ресурсов. Как упоминалось ранее, при той же степени важности выделенный пул SQL в Azure Synapse оптимизирует пропускную способность. Когда запросы смешанного размера (например, smallrc или mediumrc) ставятся в очередь, выделенный пул SQL выберет наиболее ранний поступивший запрос, соответствующий доступным ресурсам. Если применяется важность рабочей нагрузки, следующим будет запланирован запрос наивысшей важности.

Рассмотрим следующий пример на DW500c:

  • Q1, Q2, Q3 и Q4 выполняют запросы smallrc.
  • Q5 отправляется с классом ресурсов mediumrc в 9 утра.
  • Q6 отправляется с классом ресурсов smallrc в 9:01.

Поскольку Q5 представлен mediumrc, для него требуется два слота параллелизма. Q5 необходимо дождаться завершения двух запущенных запросов. Однако, когда один из запущенных запросов (Q1—Q4) завершается, Q6 планируется немедленно, поскольку в наличии имеются ресурсы для выполнения данного запроса. Если Q5 имеет более высокое значение, чем Q6, Q6 ждет, пока не будет запущен Q5, прежде чем он сможет начать выполнение.

Дальнейшие действия