Opgeslagen procedures gebruiken voor toegewezen SQL-pools in Azure Synapse Analytics
Dit artikel bevat tips voor het ontwikkelen van toegewezen SQL-pooloplossingen door opgeslagen procedures te implementeren.
Wat u kunt verwachten
Toegewezen SQL-pool ondersteunt veel van de T-SQL-functies die worden gebruikt in SQL Server. Nog belangrijker is dat er specifieke functies voor uitschalen zijn die u kunt gebruiken om de prestaties van uw oplossing te maximaliseren.
Om u te helpen de schaal en prestaties van de toegewezen SQL-pool te behouden, zijn er ook extra functies en functionaliteiten met gedragsverschillen.
Introductie van opgeslagen procedures
Opgeslagen procedures zijn een uitstekende manier voor het inkapselen van uw SQL-code, die dicht bij de gegevens van uw toegewezen SQL-pool wordt opgeslagen. Opgeslagen procedures helpen ontwikkelaars ook bij het modulariseren van hun oplossingen door de code in te kapselen in beheerbare eenheden, waardoor de herbruikbaarheid van code groter wordt. Elke opgeslagen procedure kan ook parameters accepteren om ze nog flexibeler te maken.
Een toegewezen SQL-pool biedt een vereenvoudigde en gestroomlijnde implementatie van opgeslagen procedures. Het grootste verschil met SQL Server is dat de opgeslagen procedure geen vooraf gecompileerde code is.
Over het algemeen is de compilatietijd voor datawarehouses klein in vergelijking met de tijd die nodig is om query's uit te voeren op grote gegevensvolumes. Het is belangrijker om ervoor te zorgen dat de opgeslagen procedurecode correct is geoptimaliseerd voor grote query's.
Tip
Het doel is om uren, minuten en seconden op te slaan, niet milliseconden. Het is dus handig om opgeslagen procedures te beschouwen als containers voor SQL-logica.
Wanneer een toegewezen SQL-pool uw opgeslagen procedure uitvoert, worden de SQL-instructies tijdens runtime geparseerd, vertaald en geoptimaliseerd. Tijdens dit proces wordt elke instructie geconverteerd naar gedistribueerde query's. De SQL-code die wordt uitgevoerd op basis van de gegevens, is anders dan de query die is verzonden.
Opgeslagen procedures nesten
Wanneer opgeslagen procedures andere opgeslagen procedures aanroepen of dynamische SQL uitvoeren, wordt de interne opgeslagen procedure of codeaanroep genest.
Toegewezen SQL-pool ondersteunt maximaal acht geneste niveaus. Het nestniveau in SQL Server is daarentegen 32.
De aanroep van de opgeslagen procedure op het hoogste niveau is gelijk aan nestniveau 1.
EXEC prc_nesting
Als de opgeslagen procedure ook nog een EXEC-aanroep doet, wordt het nestniveau verhoogd naar twee.
CREATE PROCEDURE prc_nesting
AS
EXEC prc_nesting_2 -- This call is nest level 2
GO
EXEC prc_nesting
Als met de tweede procedure vervolgens een dynamische SQL wordt uitgevoerd, wordt het nestniveau verhoogd naar drie.
CREATE PROCEDURE prc_nesting_2
AS
EXEC sp_executesql 'SELECT 'another nest level' -- This call is nest level 2
GO
EXEC prc_nesting
Toegewezen SQL-pool biedt momenteel geen ondersteuning voor @@NESTLEVEL. Daarom moet u het nestniveau bijhouden. Het is onwaarschijnlijk dat u de limiet voor acht nestniveaus overschrijdt. Maar als u dat wel doet, moet u uw code aanpassen aan de geneste niveaus binnen deze limiet.
INVOEGEN.. UITVOEREN
Toegewezen SQL-pool staat niet toe dat u de resultatenset van een opgeslagen procedure met een INSERT-instructie gebruikt. Er is echter een alternatieve aanpak die u kunt gebruiken. Zie het artikel over tijdelijke tabellen voor een voorbeeld.
Beperkingen
Er zijn enkele aspecten van opgeslagen Transact-SQL-procedures die niet zijn geïmplementeerd in een toegewezen SQL-pool. Dit zijn de volgende aspecten:
- tijdelijke opgeslagen procedures
- genummerde opgeslagen procedures
- uitgebreide opgeslagen procedures
- Opgeslagen CLR-procedures
- versleutelingsoptie
- replicatieoptie
- parameters met tabelwaarde
- alleen-lezenparameters
- standaardparameters
- uitvoeringscontexten
- retourinstructie
Volgende stappen
Zie Overzicht van ontwikkeling voor meer tips voor ontwikkeling.