Freigeben über


Kostenverwaltung für serverlose SQL-Pool in Azure Synapse Analytics

In diesem Artikel wird erläutert, wie Sie Kosten für serverlose SQL-Pool in Azure Synapse Analytics schätzen und verwalten können:

  • Geschätzte Datenmenge, die vor dem Ausgeben einer Abfrage verarbeitet wird
  • Verwenden der Kostensteuerungsfunktion zum Festlegen des Budgets

Verstehen Sie, dass die Kosten für serverlosen SQL-Pool in Azure Synapse Analytics nur ein Teil der monatlichen Kosten in Ihrer Azure-Rechnung sind. Wenn Sie andere Azure-Dienste verwenden, werden Ihnen alle Azure-Dienste und -Ressourcen in Rechnung gestellt, die in Ihrem Azure-Abonnement verwendet werden, einschließlich der Dienste von Drittanbietern. In diesem Artikel wird erläutert, wie Sie die Kosten für serverlose SQL-Pools in Azure Synapse Analytics planen und verwalten.

Verarbeitete Daten

Verarbeitete Daten sind die Datenmenge, die das System vorübergehend speichert, während eine Abfrage ausgeführt wird. Die verarbeiteten Daten bestehen aus den folgenden Mengen:

  • Datenmenge, die aus dem Speicher gelesen wird. Dieser Betrag umfasst:
    • Daten werden beim Lesen von Daten gelesen.
    • Daten, die beim Lesen von Metadaten gelesen werden (für Dateiformate, die Metadaten enthalten, wie Parquet).
  • Datenmenge in Zwischenergebnissen. Diese Daten werden während der Ausführung der Abfrage zwischen Knoten übertragen. Sie enthält die Datenübertragung an Ihren Endpunkt in einem nicht komprimierten Format.
  • Datenmenge, die in den Speicher geschrieben wurde. Wenn Sie CETAS verwenden, um Ihre Ergebnismenge in den Speicherplatz zu exportieren, dann wird die Menge der ausgeschriebenen Daten zur Menge der für den SELECT-Teil von CETAS verarbeiteten Daten hinzugefügt.

Das Lesen von Dateien aus dem Speicher ist hoch optimiert. Der Prozess verwendet:

  • Beim Vorabrufen kann es zu einem gewissen Mehraufwand im Datenlesevorgang kommen. Wenn eine Abfrage eine ganze Datei liest, liegt kein Aufwand vor. Wenn eine Datei teilweise gelesen wird, z. B. in TOP N-Abfragen, werden ein bisschen mehr Daten mithilfe von Vorabrufen gelesen.
  • Ein optimierter durch Trennzeichen getrennter Wert (CSV)-Parser. Wenn Sie PARSER_VERSION='2.0' zum Lesen von CSV-Dateien verwenden, erhöhen sich die Datenmengen, die aus dem Speicher gelesen werden, geringfügig. Ein optimierter CSV-Parser liest Dateien parallel, in Blöcken gleicher Größe. Blöcke enthalten nicht unbedingt ganze Zeilen. Um sicherzustellen, dass alle Zeilen analysiert werden, liest der optimierte CSV-Parser auch kleine Fragmente benachbarter Blöcke vor. Dieser Vorgang fügt einen geringen Mehraufwand hinzu.

Statistik

Der serverlose SQL-Pool-Abfrageoptimierer basiert auf Statistiken, um optimale Abfrageausführungspläne zu generieren. Sie können Statistiken manuell erstellen. Andernfalls erstellt der serverlose SQL-Pool diese automatisch. Auf beide Weise werden Statistiken erstellt, indem eine separate Abfrage ausgeführt wird, die eine bestimmte Spalte mit einer angegebenen Stichprobenrate zurückgibt. Diese Abfrage verfügt über eine zugeordnete Menge verarbeiteter Daten.

Wenn Sie dieselbe oder eine andere Abfrage ausführen, die von erstellten Statistiken profitieren würde, werden Statistiken nach Möglichkeit wiederverwendet. Für die Erstellung von Statistiken werden keine zusätzlichen Daten verarbeitet.

Wenn Statistiken für eine Parquet-Spalte erstellt werden, wird nur die relevante Spalte aus Dateien gelesen. Wenn Statistiken für eine CSV-Spalte erstellt werden, werden ganze Dateien gelesen und analysiert.

Runden

Die menge der verarbeiteten Daten wird auf die nächste MB pro Abfrage aufgerundet. Jede Abfrage umfasst mindestens 10 MB verarbeitete Daten.

Welche Daten nicht verarbeitet werden

  • Metadaten auf Serverebene (wie Anmeldungen, Rollen und Serverberechtigungen).
  • Datenbanken, die Sie in Ihrem Endpunkt erstellen. Diese Datenbanken enthalten nur Metadaten (z. B. Benutzer, Rollen, Schemas, Ansichten, Inline-Tabellenwertfunktionen [TVFs], gespeicherte Prozeduren, Anmeldeinformationen mit Datenbankbereich, externe Datenquellen, externe Dateiformate und externe Tabellen).
    • Wenn Sie Schemaerkennung verwenden, werden Dateifragmente gelesen, um Spaltennamen und Datentypen abzuleiten, und die Menge der gelesenen Daten wird zur verarbeiteten Datenmenge hinzugefügt.
  • DDL-Anweisungen (Data Definition Language), mit Ausnahme der CREATE STATISTICS-Anweisung, da sie Daten aus dem Speicher basierend auf dem angegebenen Beispielprozentsatz verarbeitet.
  • Nur Metadatenabfragen.

Verringern der verarbeiteten Datenmenge

Sie können die pro Abfrage verarbeitete Datenmenge optimieren und die Leistung verbessern, indem Sie Ihre Daten partitionieren und in ein komprimiertes spaltenbasiertes Format wie Parkett konvertieren.

Beispiele

Stellen Sie sich drei Tabellen vor.

  • Die population_csv Tabelle wird durch 5 TB CSV-Dateien gesichert. Die Dateien sind in fünf Spalten in gleicher Größe angeordnet.
  • Die population_parquet Tabelle enthält dieselben Daten wie die population_csv Tabelle. Es wird von 1 TB Parquet-Dateien unterstützt. Diese Tabelle ist kleiner als die vorherige, da Daten im Parquet-Format komprimiert wurden.
  • Die very_small_csv Tabelle wird durch 100 KB CSV-Dateien gesichert.

Abfrage 1: SELECT SUMME(Population) FROM population_csv

Diese Abfrage liest und analysiert ganze Dateien, um Werte für die Grundgesamtheitsspalte abzurufen. Knoten verarbeiten Fragmente dieser Tabelle, und die Grundbestandssumme für jedes Fragment wird zwischen Knoten übertragen. Die endgültige Summe wird an Ihren Endpunkt übertragen.

Diese Abfrage verarbeitet 5 TB Daten und einen geringen Aufwand für die Übertragung von Summen von Fragmenten.

Abfrage 2: SELECT SUM(population) FROM population_parquet

Wenn Sie komprimierte und spaltenbasierte Formate wie Parkett abfragen, werden weniger Daten gelesen als in Abfrage 1. Dieses Ergebnis wird angezeigt, da serverloser SQL-Pool anstelle der gesamten Datei eine einzelne komprimierte Spalte liest. In diesem Fall werden 0,2 TB ausgelesen. (Fünf Spalten gleicher Größe sind jeweils 0,2 TB.) Knoten verarbeiten Fragmente dieser Tabelle, und die Bevölkerungssumme für jedes Fragment wird zwischen den Knoten übertragen. Die endgültige Summe wird an Ihren Endpunkt übertragen.

Diese Abfrage verarbeitet 0,2 TB plus einen geringen Mehraufwand für die Übertragung von Summen von Fragmenten.

Abfrage 3: SELECT * FROM population_parquet

Diese Abfrage liest alle Spalten und überträgt alle Daten in einem nicht komprimierten Format. Wenn das Komprimierungsformat 5:1 ist, verarbeitet die Abfrage 6 TB, da es 1 TB liest und 5 TB unkomprimierte Daten überträgt.

Abfrage 4: SELECT COUNT(*) AUS very_small_csv

Diese Abfrage liest ganze Dateien. Die Gesamtgröße der Dateien im Speicher für diese Tabelle beträgt 100 KB. Knoten verarbeiten Fragmente dieser Tabelle, und die Summe für jedes Fragment wird zwischen Knoten übertragen. Die endgültige Summe wird an Ihren Endpunkt übertragen.

Diese Abfrage verarbeitet etwas mehr als 100 KB Daten. Die für diese Abfrage verarbeitete Datenmenge wird gemäß dem Abschnitt "Rundung" dieses Artikels auf 10 MB aufgerundet.

Kostensteuerung

Mit der Kostensteuerungsfunktion im serverlosen SQL-Pool können Sie das Budget für die Menge der verarbeiteten Daten festlegen. Sie können das Budget in TB von Daten festlegen, die für einen Tag, eine Woche und einen Monat verarbeitet werden. Gleichzeitig können Sie ein oder mehrere Budgets festlegen. Um die Kostenkontrolle für serverlosen SQL-Pool zu konfigurieren, können Sie Synapse Studio oder T-SQL verwenden.

Konfiguration der Kostenüberwachung für serverless SQL-Pools in Synapse Studio

Um die Kostenkontrolle für den serverlosen SQL-Pool in Synapse Studio zu konfigurieren, navigieren Sie im Menü auf der linken Seite zu "Element verwalten", als das SQL-Poolelement unter Analysepools auszuwählen. Wenn Sie mit dem Mauszeiger auf den serverlosen SQL-Pool zeigen, werden Sie ein Symbol für die Kostenkontrolle bemerken – klicken Sie auf dieses Symbol.

Navigationssteuerung zur Kostenkontrolle

Nachdem Sie auf das Kostensteuerungssymbol geklickt haben, wird eine Seitenleiste angezeigt:

Kostensteuerungskonfiguration

Wenn Sie ein oder mehrere Budgets festlegen möchten, klicken Sie zuerst auf das Optionsfeld "Aktivieren" für das gewünschte Budget, dann geben Sie die Ganzzahl in das Textfeld ein. Einheit für den Wert sind TBs. Nachdem Sie die budgets konfiguriert haben, klicken Sie unten auf der Seitenleiste auf die Schaltfläche "Anwenden". Das war's, Ihr Budget ist jetzt festgelegt.

Konfigurieren Sie die Kostenkontrolle für serverlose SQL-Pools in T-SQL

Um die Kostenkontrolle für serverlosen SQL-Pool in T-SQL zu konfigurieren, müssen Sie eine oder mehrere der folgenden gespeicherten Prozeduren ausführen.

sp_set_data_processed_limit
	@type = N'daily',
	@limit_tb = 1

sp_set_data_processed_limit
	@type= N'weekly',
	@limit_tb = 2

sp_set_data_processed_limit
	@type= N'monthly',
	@limit_tb = 3334

Um die aktuelle Konfiguration anzuzeigen, führen Sie die folgende T-SQL-Anweisung aus:

SELECT * FROM sys.configurations
WHERE name like 'Data processed %';

Um zu sehen, wie viele Daten während des aktuellen Tages, der aktuellen Woche oder des Monats verarbeitet wurden, führen Sie die folgende T-SQL-Anweisung aus:

SELECT * FROM sys.dm_external_data_processed

Überschreiten der in der Kostenkontrolle definierten Grenzwerte

Falls ein Grenzwert während der Abfrageausführung überschritten wird, wird die Abfrage nicht beendet.

Wenn der Grenzwert überschritten wird, wird eine neue Abfrage mit der Fehlermeldung abgelehnt, die Details zu dem Zeitraum enthält, definierter Grenzwert für diesen Zeitraum und die für diesen Zeitraum verarbeiteten Daten. Wenn beispielsweise eine neue Abfrage ausgeführt wird, bei der der wöchentliche Grenzwert auf 1 TB festgelegt und überschritten wurde, lautet die Fehlermeldung:

Query is rejected because SQL Serverless budget limit for a period is exceeded. (Period = Weekly: Limit = 1 TB, Data processed = 1 TB))

Nächste Schritte

Informationen zum Optimieren Ihrer Abfragen für die Leistung finden Sie unter Bewährte Methoden für serverlose SQL-Pool.