Compartilhar via


Usar procedimentos armazenados para pools de SQL dedicados no Azure Synapse Analytics

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

O que esperar

O pool de SQL dedicado é compatível com muitos recursos T-SQL usados no SQL Server. Mais importante, há recursos específicos de expansão que você pode usar para maximizar o desempenho da sua solução.

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

Apresentação dos procedimentos armazenados

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

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

No geral, para data warehouses, 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 otimizado corretamente para grandes consultas.

Dica

A meta é poupar horas, minutos e segundos, não milissegundos. Portanto, é mais útil pensar em procedimentos armazenados como contêineres para a lógica SQL.

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

Aninhamento de procedimentos armazenados

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

O pool de SQL dedicado é compatível com até oito níveis de aninhamento. E contraste a isso, o nível de aninhamento no SQL Server é de 32.

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

EXEC prc_nesting

Se o procedimento armazenado também criar outra chamada EXEC, o nível de aninhamento aumentará 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

No momento, o pool de SQL dedicado não dá suporte a @@NESTLEVEL. Assim sendo, é necessário rastrear o nível de aninhamento. É improvável que você exceda o limite de oito níveis de aninhamento. Mas, caso isso aconteça, você precisará retrabalhar o código para se ajustar aos níveis de aninhamento dentro desse limite.

INSERT..EXECUTE

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

Limitações

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

  • procedimentos armazenados temporariamente
  • procedimentos armazenados numerados
  • procedimentos armazenados estendidos
  • procedimentos armazenados de CLR
  • opção de criptografia
  • opção de replicação
  • parâmetros com valor de tabela
  • parâmetros somente leitura
  • parâmetros padrão
  • contextos de execução
  • Instrução return

Próximas etapas

Para obter mais dicas de desenvolvimento, confira visão geral de desenvolvimento.