Použití uložených procedur pro vyhrazené fondy SQL v Azure Synapse Analytics

Tento článek obsahuje tipy pro vývoj řešení vyhrazených fondů SQL implementací uložených procedur.

Co očekávat

Vyhrazený fond SQL podporuje řadu funkcí T-SQL, které se používají v SQL Server. Ještě důležitější je, že existují funkce specifické pro škálování na více instancí, které můžete použít k maximalizaci výkonu vašeho řešení.

Pro zajištění škálování a výkonu vyhrazeného fondu SQL jsou také k dispozici další funkce, které mají rozdíly v chování.

Představení uložených procedur

Uložené procedury představují skvělý způsob zapouzdření kódu SQL, který je uložený v blízkosti dat vyhrazeného fondu SQL. Uložené procedury také pomáhají vývojářům modularizovat svá řešení zapouzdřením kódu do jednotek, které se dají spravovat, a tím usnadňují větší opětovnou použitelnost kódu. Každá uložená procedura může také přijímat parametry, aby byly ještě flexibilnější.

Vyhrazený fond SQL poskytuje zjednodušenou a zjednodušenou implementaci uložených procedur. Největší rozdíl oproti SQL Server spočívá v tom, že uložená procedura není předkompilovaný kód.

Obecně platí, že u datových skladů je doba kompilace malá v porovnání s dobou potřebnou ke spouštění dotazů na velké objemy dat. Důležitější je zajistit, aby kód uložené procedury byl správně optimalizovaný pro velké dotazy.

Tip

Cílem je ušetřit hodiny, minuty a sekundy, ne milisekundy. Proto je užitečné si uložené procedury představit jako kontejnery pro logiku SQL.

Když vyhrazený fond SQL spustí uloženou proceduru, příkazy SQL se analyzují, překládají a optimalizují za běhu. Během tohoto procesu se každý příkaz převede na distribuované dotazy. Kód SQL, který se spouští s daty, se liší od odeslaného dotazu.

Vnoření uložených procedur

Když uložené procedury volají jiné uložené procedury nebo provádějí dynamické sql, znamená to, že vnitřní uložená procedura nebo vyvolání kódu je vnořené.

Vyhrazený fond SQL podporuje maximálně osm úrovní vnoření. Naproti tomu úroveň vnoření v SQL Server je 32.

Volání uložené procedury nejvyšší úrovně odpovídá vnoření úrovně 1.

EXEC prc_nesting

Pokud uložená procedura také provede další volání EXEC, úroveň vnoření se zvýší na dvě.

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

Pokud druhý postup pak provede nějaký dynamický SQL, úroveň vnoření se zvýší na tři.

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

Vyhrazený fond SQL v současné době nepodporuje @@NESTLEVEL. Proto je potřeba sledovat úroveň vnoření. Je nepravděpodobné, že překročíte limit úrovně osmi vnoření. Pokud to ale uděláte, musíte kód přepracovat tak, aby odpovídal úrovním vnoření v rámci tohoto limitu.

VLOŽIT.. PROVÉST

Vyhrazený fond SQL neumožňuje využívat sadu výsledků uložené procedury příkazem INSERT. Existuje však alternativní přístup, který můžete použít. Příklad najdete v článku o dočasných tabulkách.

Omezení

Existují některé aspekty uložených procedur jazyka Transact-SQL, které nejsou implementovány ve vyhrazeném fondu SQL, které jsou následující:

  • dočasné uložené procedury
  • číslování uložených procedur
  • rozšířené uložené procedury
  • Uložené procedury CLR
  • možnost šifrování
  • možnost replikace
  • Parametry vracející tabulku
  • Parametry jen pro čtení
  • výchozí parametry
  • kontexty spuštění
  • return – příkaz

Další kroky

Další tipy pro vývoj najdete v přehledu vývoje.