Kostenbeheer voor serverloze SQL-pool in Azure Synapse Analytics

In dit artikel wordt uitgelegd hoe u de kosten voor een serverloze SQL-pool in Azure Synapse Analytics kunt schatten en beheren:

  • Een schatting maken van de hoeveelheid gegevens die is verwerkt voordat een query wordt uitgevoerd
  • Kostenbeheerfunctie gebruiken om het budget in te stellen

Begrijp dat de kosten voor een serverloze SQL-pool in Azure Synapse Analytics slechts een deel zijn van de maandelijkse kosten in uw Azure-factuur. Als u andere Azure-services gebruikt, wordt u gefactureerd voor alle Azure-services en -resources die worden gebruikt in uw Azure-abonnement, inclusief de services van derden. In dit artikel wordt uitgelegd hoe u kosten voor een serverloze SQL-pool plant en beheert in Azure Synapse Analytics.

Verwerkte gegevens

Verwerkte gegevens zijn de hoeveelheid gegevens die het systeem tijdelijk opslaat terwijl een query wordt uitgevoerd. De verwerkte gegevens bestaan uit de volgende hoeveelheden:

  • Hoeveelheid gegevens die uit de opslag worden gelezen. Dit bedrag is inclusief:
    • Gegevens die worden gelezen tijdens het lezen van gegevens.
    • Gegevens die worden gelezen tijdens het lezen van metagegevens (voor bestandsindelingen die metagegevens bevatten, zoals Parquet).
  • Hoeveelheid gegevens in tussenliggende resultaten. Deze gegevens worden overgedragen tussen knooppunten terwijl de query wordt uitgevoerd. Het omvat de gegevensoverdracht naar uw eindpunt, in een niet-gecomprimeerde indeling.
  • De hoeveelheid gegevens die naar de opslag wordt geschreven. Als u CETAS gebruikt om uw resultatenset te exporteren naar opslag, wordt de hoeveelheid gegevens die wordt weggeschreven opgeteld bij de hoeveelheid gegevens die voor het SELECT-gedeelte van CETAS is verwerkt.

Het lezen van bestanden uit de opslag is sterk geoptimaliseerd. Het proces maakt gebruik van:

  • Prefetching, wat enige overhead kan toevoegen aan de hoeveelheid gelezen gegevens. Als een query een heel bestand leest, is er geen overhead. Als een bestand gedeeltelijk wordt gelezen, zoals in TOP N-query's, worden er iets meer gegevens gelezen met behulp van vooraf ophalen.
  • Een geoptimaliseerde CSV-parser (door komma's gescheiden waarden). Als u PARSER_VERSION='2.0' gebruikt om CSV-bestanden te lezen, nemen de hoeveelheden gegevens die uit de opslag worden gelezen iets toe. Een geoptimaliseerde CSV-parser leest bestanden parallel, in segmenten van gelijke grootte. Segmenten bevatten niet noodzakelijkerwijs hele rijen. Om ervoor te zorgen dat alle rijen worden geparseerd, leest de geoptimaliseerde CSV-parser ook kleine fragmenten van aangrenzende segmenten. Dit proces voegt een kleine hoeveelheid overhead toe.

statistieken

Het queryoptimalisatieprogramma voor de serverloze SQL-pool is afhankelijk van statistieken om optimale queryuitvoeringsplannen te genereren. U kunt handmatig statistieken maken. Anders worden deze automatisch gemaakt door een serverloze SQL-pool. In beide gevallen worden statistieken gemaakt door een afzonderlijke query uit te voeren die een specifieke kolom retourneert met een opgegeven samplefrequentie. Aan deze query is een gekoppelde hoeveelheid gegevens verwerkt.

Als u dezelfde of een andere query uitvoert die baat zou hebben bij het maken van statistieken, worden statistieken indien mogelijk hergebruikt. Er worden geen aanvullende gegevens verwerkt voor het maken van statistieken.

Wanneer statistieken worden gemaakt voor een Parquet-kolom, wordt alleen de relevante kolom uit bestanden gelezen. Wanneer statistieken worden gemaakt voor een CSV-kolom, worden hele bestanden gelezen en geparseerd.

Afronden

De hoeveelheid verwerkte gegevens wordt naar boven afgerond op de dichtstbijzijnde MB per query. Voor elke query is minimaal 10 MB aan gegevens verwerkt.

Welke verwerkte gegevens bevatten niet

  • Metagegevens op serverniveau (zoals aanmeldingen, functies en referenties op serverniveau).
  • Databases die u in uw eindpunt maakt. Deze databases bevatten alleen metagegevens (zoals gebruikers, rollen, schema's, weergaven, inline tabelwaardefuncties [TVF's], opgeslagen procedures, referenties binnen databasebereik, externe gegevensbronnen, externe bestandsindelingen en externe tabellen).
    • Als u schemadeductie gebruikt, worden bestandsfragmenten gelezen om kolomnamen en gegevenstypen af te leiden en wordt de hoeveelheid gelezen gegevens opgeteld bij de hoeveelheid verwerkte gegevens.
  • DDL-instructies (Data Definition Language), met uitzondering van de instructie CREATE STATISTICS, omdat hiermee gegevens uit de opslag worden verwerkt op basis van het opgegeven voorbeeldpercentage.
  • Query's met alleen metagegevens.

De hoeveelheid verwerkte gegevens verminderen

U kunt de hoeveelheid verwerkte gegevens per query optimaliseren en de prestaties verbeteren door uw gegevens te partitioneren en te converteren naar een indeling op basis van gecomprimeerde kolommen, zoals Parquet.

Voorbeelden

Stel je drie tabellen voor.

  • De population_csv tabel wordt ondersteund door 5 TB AAN CSV-bestanden. De bestanden zijn ingedeeld in vijf kolommen van gelijke grootte.
  • De population_parquet tabel bevat dezelfde gegevens als de population_csv tabel. Het wordt ondersteund door 1 TB aan Parquet-bestanden. Deze tabel is kleiner dan de vorige, omdat gegevens zijn gecomprimeerd in Parquet-indeling.
  • De very_small_csv tabel wordt ondersteund door 100 kB aan CSV-bestanden.

Query 1: SELECT SUM(population) FROM population_csv

Met deze query worden hele bestanden gelezen en geparseerd om waarden voor de populatiekolom op te halen. Knooppunten verwerken fragmenten van deze tabel en de som van de populatie voor elk fragment wordt overgedragen tussen knooppunten. De uiteindelijke som wordt overgedragen naar uw eindpunt.

Deze query verwerkt 5 TB aan gegevens plus een kleine hoeveelheid overhead voor het overdragen van som van fragmenten.

Query 2: SELECT SUM(population) FROM population_parquet

Wanneer u een query uitvoert op gecomprimeerde en kolomindelingen zoals Parquet, worden er minder gegevens gelezen dan in query 1. U ziet dit resultaat omdat de serverloze SQL-pool één gecomprimeerde kolom leest in plaats van het hele bestand. In dit geval wordt 0,2 TB gelezen. (Vijf kolommen van gelijke grootte zijn elk 0,2 TB.) Knooppunten verwerken fragmenten van deze tabel en de som van de populatie voor elk fragment wordt overgedragen tussen knooppunten. De uiteindelijke som wordt overgedragen naar uw eindpunt.

Deze query verwerkt 0,2 TB plus een kleine hoeveelheid overhead voor het overdragen van som van fragmenten.

Query 3: SELECT * FROM population_parquet

Deze query leest alle kolommen en draagt alle gegevens over in een niet-gecomprimeerde indeling. Als de compressie-indeling 5:1 is, verwerkt de query 6 TB omdat deze 1 TB leest en 5 TB aan niet-gecomprimeerde gegevens overdraagt.

Query 4: SELECT COUNT(*) FROM very_small_csv

Met deze query worden hele bestanden gelezen. De totale grootte van bestanden in de opslag voor deze tabel is 100 kB. Knooppunten verwerken fragmenten van deze tabel en de som voor elk fragment wordt overgedragen tussen knooppunten. De uiteindelijke som wordt overgedragen naar uw eindpunt.

Deze query verwerkt iets meer dan 100 kB aan gegevens. De hoeveelheid gegevens die voor deze query wordt verwerkt, wordt afgerond op 10 MB, zoals opgegeven in de sectie Afronden van dit artikel.

Kostenbeheer

Met de functie Kostenbeheer in een serverloze SQL-pool kunt u het budget instellen voor de hoeveelheid verwerkte gegevens. U kunt het budget instellen in TB aan verwerkte gegevens voor een dag, week en maand. Tegelijkertijd kunt u een of meer budgetten instellen. Als u kostenbeheer wilt configureren voor een serverloze SQL-pool, kunt u Synapse Studio of T-SQL gebruiken.

Kostenbeheer configureren voor serverloze SQL-pool in Synapse Studio

Als u kostenbeheer wilt configureren voor een serverloze SQL-pool in Synapse Studio navigeert u naar het item Beheren in het menu aan de linkerkant en selecteert u vervolgens SQL-poolitem onder Analysepools. Wanneer u de muisaanwijzer op de serverloze SQL-pool houdt, ziet u een pictogram voor kostenbeheer. Klik op dit pictogram.

Navigatie in kostenbeheer

Wanneer u op het pictogram Kostenbeheer klikt, wordt er een zijbalk weergegeven:

Configuratie van kostenbeheer

Als u een of meer budgetten wilt instellen, klikt u eerst op het keuzerondje Inschakelen voor een budget dat u wilt instellen en voert u vervolgens het gehele getal in het tekstvak in. Eenheid voor de waarde is TB. Zodra u de gewenste budgetten hebt geconfigureerd, klikt u op de knop Toepassen onderaan de zijbalk. Dat is het, je budget is nu ingesteld.

Kostenbeheer configureren voor serverloze SQL-pool in T-SQL

Als u kostenbeheer wilt configureren voor een serverloze SQL-pool in T-SQL, moet u een of meer van de volgende opgeslagen procedures uitvoeren.

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

Voer de volgende T-SQL-instructie uit om de huidige configuratie te zien:

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

Voer de volgende T-SQL-instructie uit om te zien hoeveel gegevens er zijn verwerkt tijdens de huidige dag, week of maand:

SELECT * FROM sys.dm_external_data_processed

De limieten overschrijden die zijn gedefinieerd in het kostenbeheer

Als een limiet wordt overschreden tijdens het uitvoeren van de query, wordt de query niet beëindigd.

Wanneer de limiet wordt overschreden, wordt een nieuwe query geweigerd met het foutbericht dat details bevat over de periode, de gedefinieerde limiet voor die periode en de gegevens die voor die periode zijn verwerkt. Als er bijvoorbeeld een nieuwe query wordt uitgevoerd, waarbij de wekelijkse limiet is ingesteld op 1 TB en deze is overschreden, wordt het foutbericht weergegeven:

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

Volgende stappen

Zie Best practices voor serverloze SQL-pool voor meer informatie over het optimaliseren van uw query's voor prestaties.