Поделиться через


Использование хранимых процедур для выделенных пулов SQL в Azure Synapse Analytics

В этой статье приведены советы по разработке выделенных решений пула SQL, реализуя хранимые процедуры.

Чего следует ожидать

Выделенный пул SQL поддерживает многие функции T-SQL, используемые в SQL Server. Более важно, существуют специальные функции масштабирования, которые можно использовать для повышения производительности решения.

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

Введение хранимых процедур

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

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

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

Подсказка

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

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

Вложенные хранимые процедуры

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

Выделенный пул SQL поддерживает не более восьми уровней вложения. Напротив, уровень вложенности в SQL Server составляет 32.

Вызов хранимой процедуры верхнего уровня соответствует уровню вложенности 1.

EXEC prc_nesting

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

CREATE PROCEDURE prc_nesting
AS
EXEC prc_nesting_2  -- This call is nest level 2
GO
EXEC prc_nesting

Если вторая процедура затем выполняет определенный динамический SQL, уровень вложенности увеличивается до трех.

CREATE PROCEDURE prc_nesting_2
AS
EXEC sp_executesql 'SELECT 'another nest level'  -- This call is nest level 2
GO
EXEC prc_nesting

Выделенный пул SQL в настоящее время не поддерживает @@NESTLEVEL. Таким образом, необходимо отслеживать уровень вложения. Маловероятно, что вы превысите восемь пределов уровня вложения. Но если это сделать, необходимо переработать код, чтобы уложиться в пределы уровней вложенности.

ВСТАВКА.. ИСПОЛНЯТЬ

Выделенный пул SQL не позволяет использовать результирующий набор хранимой процедуры с инструкцией INSERT. Однако существует альтернативный подход, который можно использовать. Пример см. в статье о #B0 временных таблицах #A1.

Ограничения

Некоторые аспекты хранимых процедур Transact-SQL не реализованы в выделенном пуле SQL.

  • временные хранимые процедуры
  • нумерованные хранимые процедуры
  • расширенные хранимые процедуры
  • Хранимые процедуры CLR
  • Параметр шифрования
  • Параметр репликации
  • Параметры с табличным значением
  • Параметры только для чтения
  • Параметры по умолчанию
  • Контексты выполнения
  • Оператор return

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

Дополнительные советы по разработке приведены в обзоре разработки.