Freigeben über


Verwenden von gespeicherten Prozeduren für dedizierte SQL-Pools in Azure Synapse Analytics

Dieser Artikel enthält Tipps zum Entwickeln dedizierter SQL-Poollösungen durch Implementieren von gespeicherten Prozeduren.

Was dich erwartet

Der dedizierte SQL-Pool unterstützt viele der T-SQL-Features, die in SQL Server verwendet werden. Wichtiger ist, dass es skalierungsspezifische Features gibt, die Sie verwenden können, um die Leistung Ihrer Lösung zu maximieren.

Darüber hinaus gibt es zusätzliche Features und Funktionen, die Verhaltensunterschiede aufweisen, um die Skalierung und Leistung des dedizierten SQL-Pools aufrechtzuerhalten.

Einführung von gespeicherten Prozeduren

Gespeicherte Prozeduren eignen sich hervorragend zum Kapseln des SQL-Codes, der in der Nähe ihrer dedizierten SQL-Pooldaten gespeichert ist. Gespeicherte Prozeduren helfen Entwicklern auch, ihre Lösungen zu modularisieren, indem der Code in verwaltbare Einheiten gekapselt wird, wodurch die Wiederverwendbarkeit von Code erleichtert wird. Jede gespeicherte Prozedur kann auch Parameter akzeptieren, um sie noch flexibler zu gestalten.

Der dedizierte SQL-Pool bietet eine vereinfachte und optimierte Implementierung gespeicherter Prozeduren. Der größte Unterschied im Vergleich zu SQL Server besteht darin, dass die gespeicherte Prozedur kein vorkompilierter Code ist.

Im Allgemeinen ist die Kompilierungszeit für Data Warehouses im Vergleich zu der Zeit, die zum Ausführen von Abfragen für große Datenvolumes benötigt wird, gering. Es ist wichtiger, sicherzustellen, dass der gespeicherte Prozedurcode für große Abfragen ordnungsgemäß optimiert ist.

Tipp

Ziel ist es, Stunden, Minuten und Sekunden zu sparen, nicht Millisekunden. Daher ist es hilfreich, gespeicherte Prozeduren als Container für SQL-Logik zu betrachten.

Wenn ein dedizierter SQL-Pool Ihre gespeicherte Prozedur ausführt, werden die SQL-Anweisungen zur Laufzeit analysiert, übersetzt und optimiert. Während dieses Prozesses wird jede Anweisung in verteilte Abfragen konvertiert. Der SQL-Code, der für die Daten ausgeführt wird, unterscheidet sich von der übermittelten Abfrage.

Schachteln von gespeicherten Prozeduren

Wenn gespeicherte Prozeduren andere gespeicherte Prozeduren aufrufen oder dynamische SQL ausführen, wird die innere gespeicherte Prozedur oder der Codeaufruf als geschachtelt bezeichnet.

Der dedizierte SQL-Pool unterstützt maximal acht Schachtelungsebenen. Im Gegensatz dazu sind in SQL Server 32 Schachtelungsebenen zulässig.

Der Aufruf der obersten gespeicherten Prozedur entspricht Schachtelungsebene 1.

EXEC prc_nesting

Wenn die gespeicherte Prozedur auch einen weiteren EXEC-Aufruf durchführt, wird die Schachtelungsebene auf 2 erhöht.

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

Wenn die zweite Prozedur dann dynamischen SQL-Code ausführt, wird die Schachtelungsebene auf 3 erhöht.

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

Dedizierter SQL-Pool unterstützt derzeit keine @@NESTLEVEL. Daher müssen Sie die Schachtelungsebene nachverfolgen. Es ist unwahrscheinlich, dass Sie den Grenzwert von acht Schachtelungsebenen überschreiten. Wenn dies dennoch der Fall ist, müssen Sie Ihren Code so überarbeiten, dass er den Schachtelungsebenen innerhalb dieses Grenzwerts entspricht.

INSERT..EXECUTE

Der dedizierte SQL-Pool ermöglicht es Ihnen nicht, das Resultset einer gespeicherten Prozedur mit einer INSERT-Anweisung zu nutzen. Es gibt jedoch einen alternativen Ansatz, den Sie verwenden können. Ein Beispiel finden Sie im Artikel zu temporären Tabellen.

Einschränkungen

Es gibt einige Aspekte von Transact-SQL gespeicherten Prozeduren, die nicht in dediziertem SQL-Pool implementiert sind, die wie folgt sind:

  • temporäre gespeicherte Prozeduren
  • Nummerierte gespeicherte Prozeduren
  • erweiterte gespeicherte Prozeduren
  • CLR-gespeicherte Prozeduren
  • Verschlüsselungsoption
  • Replikationsoption
  • Parameter mit Tabellenwert
  • schreibgeschützte Parameter
  • Standardparameter
  • Ausführungskontexte
  • return-Anweisung

Nächste Schritte

Weitere Hinweise zur Entwicklung finden Sie in der Entwicklungsübersicht.