Partilhar via


Usando procedimentos armazenados para pools SQL dedicados no Azure Synapse Analytics

Este artigo fornece dicas para desenvolver soluções de pool SQL dedicadas implementando procedimentos armazenados.

O que esperar

O pool SQL dedicado oferece suporte a muitos dos recursos T-SQL usados no SQL Server. Mais importante ainda, há recursos específicos de expansão que você pode usar para maximizar o desempenho de sua solução.

Além disso, para ajudá-lo a manter a escala e o desempenho do pool SQL dedicado, há recursos e funcionalidades adicionais que têm diferenças comportamentais.

Introdução aos procedimentos armazenados

Os procedimentos armazenados são uma ótima maneira de encapsular seu código SQL, que é armazenado perto dos dados dedicados do pool SQL. Os procedimentos armazenados também ajudam os desenvolvedores a modularizar suas soluções, encapsulando o código em unidades gerenciáveis, facilitando assim uma maior reutilização do código. Cada procedimento armazenado também pode aceitar parâmetros para torná-los ainda mais flexíveis.

O pool SQL dedicado oferece uma implementação de procedimento armazenado simplificada e otimizada. A maior diferença em comparação com o SQL Server é que o procedimento armazenado não é código pré-compilado.

Em geral, para armazéns de dados, o tempo de compilação é pequeno em comparação com o tempo necessário para executar consultas em grandes volumes de dados. É mais importante garantir que o código do procedimento armazenado seja corretamente otimizado para consultas grandes.

Sugestão

O objetivo é economizar horas, minutos e segundos, não milissegundos. Portanto, é útil pensar em procedimentos armazenados como contêineres para lógica SQL.

Quando um pool SQL dedicado executa seu procedimento armazenado, as instruções SQL são analisadas, traduzidas e otimizadas em tempo de execução. Durante esse processo, cada instrução é convertida em consultas distribuídas. O código SQL que é executado em relação aos dados é diferente da consulta enviada.

Aninhamento de Procedimentos Armazenados

Quando os procedimentos armazenados chamam outros procedimentos armazenados ou executam SQL dinâmico, o procedimento armazenado interno ou a invocação de código é considerada aninhada.

O pool SQL dedicado oferece suporte a um máximo de oito níveis de aninhamento. Por outro lado, o nível de aninhamento no SQL Server é 32.

A chamada de procedimento armazenado de nível superior equivale ao nível de aninhamento 1.

EXEC prc_nesting

Se o procedimento armazenado também fizer outra invocação EXEC, o nível de aninhamento é incrementado para dois.

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

Se o segundo procedimento executar algum SQL dinâmico, o nível de aninhamento aumentará para três.

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

Atualmente, o pool SQL dedicado não oferece suporte a @@NESTLEVEL. Como tal, deves acompanhar o nível do ninho. É improvável que você exceda o limite de oito níveis de ninho. Mas, se o fizeres, terás de retrabalhar o teu código para ajustar os níveis de aninhamento dentro deste limite.

INSERIR.. EXECUTAR

O pool SQL dedicado não permite que você consuma o conjunto de resultados de um procedimento armazenado com uma instrução INSERT. Existe, no entanto, uma abordagem alternativa que pode utilizar. Para um exemplo, consulte o artigo sobre tabelas temporárias.

Limitações

Há alguns aspetos dos procedimentos armazenados Transact-SQL que não são implementados no pool SQL dedicado, que são os seguintes:

  • Processos armazenados temporários
  • Procedimentos armazenados numerados
  • Procedimentos armazenados estendidos
  • Procedimentos armazenados CLR
  • opção de encriptação
  • opção de replicação
  • parâmetros com valor de tabela
  • Parâmetros somente leitura
  • parâmetros padrão
  • contextos de execução
  • Declaração de devolução

Próximos passos

Para obter mais dicas de desenvolvimento, consulte Visão geral do desenvolvimento.