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.