Kostnadshantering för serverlös SQL-pool i Azure Synapse Analytics

Den här artikeln beskriver hur du kan beräkna och hantera kostnader för serverlös SQL-pool i Azure Synapse Analytics:

  • Beräkna mängden data som bearbetas innan du utfärdar en fråga
  • Använd funktionen kostnadskontroll för att ange budgeten

Förstå att kostnaderna för serverlös SQL-pool i Azure Synapse Analytics bara är en del av månadskostnaderna i din Azure-faktura. Om du använder andra Azure-tjänster debiteras du för alla Azure-tjänster och resurser som används i din Azure-prenumeration, inklusive tjänsterna från tredje part. Den här artikeln beskriver hur du planerar för och hanterar kostnader för serverlös SQL-pool i Azure Synapse Analytics.

Bearbetade data

Data som bearbetas är mängden data som systemet tillfälligt lagrar medan en fråga körs. Data som bearbetas består av följande kvantiteter:

  • Mängden data som läss från lagringen. Det här beloppet omfattar:
    • Data som läse vid läsning av data.
    • Data som läse vid läsning av metadata (för filformat som innehåller metadata, till exempel Parquet).
  • Mängden data i mellanliggande resultat. Dessa data överförs mellan noder medan frågan körs. Den innehåller dataöverföringen till slutpunkten i ett okomprimerat format.
  • Mängden data som skrivs till lagring. Om du använder CETAS för att exportera din resultatuppsättning till lagring läggs mängden data som skrivs ut till mängden data som bearbetas för SELECT-delen av CETAS.

Läsning av filer från lagring är mycket optimerat. Processen använder:

  • Prefetching, vilket kan lägga till en del omkostnader för mängden data som läses. Om en fråga läser en hel fil finns det inga kostnader. Om en fil läses delvis, till exempel i TOP N-frågor, läses lite mer data med hjälp av prefetching.
  • En optimerad kommaavgränsad värdeparser (CSV). Om du använder PARSER_VERSION='2.0' för att läsa CSV-filer ökar mängden data som läss från lagringen något. En optimerad CSV-parser läser filer parallellt, i segment med samma storlek. Segment innehåller inte nödvändigtvis hela rader. För att säkerställa att alla rader parsas läser den optimerade CSV-parsern även små fragment av angränsande segment. Den här processen lägger till en liten mängd omkostnader.

Statistik

Frågeoptimeraren för serverlös SQL-pool förlitar sig på statistik för att generera optimala frågekörningsplaner. Du kan skapa statistik manuellt. Annars skapar serverlös SQL-pool dem automatiskt. Hur som helst skapas statistik genom att köra en separat fråga som returnerar en specifik kolumn med en angiven exempelfrekvens. Den här frågan har en associerad mängd data som bearbetas.

Om du kör samma eller någon annan fråga som skulle dra nytta av statistik som skapats återanvänds statistik om möjligt. Det finns inga ytterligare data som bearbetas för att skapa statistik.

När statistik skapas för en Parquet-kolumn läss endast den relevanta kolumnen från filer. När statistik skapas för en CSV-kolumn läs- och parsas hela filer.

Avrundning

Mängden data som bearbetas avrundas upp till närmaste MB per fråga. Varje fråga har minst 10 MB data som bearbetas.

Vilka data som bearbetas omfattar inte

  • Metadata på servernivå (till exempel inloggningar, roller och autentiseringsuppgifter på servernivå).
  • Databaser som du skapar i slutpunkten. Dessa databaser innehåller endast metadata (till exempel användare, roller, scheman, vyer, infogade tabellvärdesfunktioner [TVF:er], lagrade procedurer, databasomfattande autentiseringsuppgifter, externa datakällor, externa filformat och externa tabeller).
    • Om du använder schemainferens läser du filfragment för att härleda kolumnnamn och datatyper, och mängden dataläsning läggs till i mängden data som bearbetas.
  • DDL-instruktioner (Data Definition Language), förutom instruktionen CREATE STATISTICS eftersom den bearbetar data från lagring baserat på den angivna exempelprocenten.
  • Frågor som endast gäller metadata.

Minska mängden data som bearbetas

Du kan optimera mängden data per fråga som bearbetas och förbättra prestanda genom att partitionera och konvertera dina data till ett komprimerat kolumnbaserat format som Parquet.

Exempel

Tänk dig tre tabeller.

  • Tabellen population_csv backas upp av 5 TB CSV-filer. Filerna är ordnade i fem kolumner med samma storlek.
  • Tabellen population_parquet har samma data som tabellen population_csv. Den backas upp av 1 TB Parquet-filer. Den här tabellen är mindre än den föregående eftersom data komprimeras i Parquet-format.
  • Tabellen very_small_csv backas upp av 100 kB CSV-filer.

Fråga 1: VÄLJ SUM(population) FRÅN population_csv

Den här frågan läser och parsar hela filer för att hämta värden för populationskolumnen. Noder bearbetar fragment i den här tabellen och populationssumman för varje fragment överförs mellan noder. Den slutliga summan överförs till slutpunkten.

Den här frågan bearbetar 5 TB data plus en liten mängd omkostnader för överföring av summor av fragment.

Fråga 2: VÄLJ SUM(population) FRÅN population_parquet

När du kör frågor mot komprimerade och kolumnbaserade format som Parquet läse du mindre data än i fråga 1. Du ser det här resultatet eftersom en serverlös SQL-pool läser en enda komprimerad kolumn i stället för hela filen. I det här falletläss 0,2 TB. (Fem kolumner med samma storlek är 0,2 TB vardera.) Noder bearbetar fragment i den här tabellen och populationssumman för varje fragment överförs mellan noder. Den slutliga summan överförs till slutpunkten.

Den här frågan bearbetar 0,2 TB plus en liten mängd omkostnader för överföring av summor av fragment.

Fråga 3: VÄLJ * FRÅN population_parquet

Den här frågan läser alla kolumner och överför alla data i ett okomprimerat format. Om komprimeringsformatet är 5:1 bearbetar frågan 6 TB eftersom det läser 1 TB och överför 5 TB okomprimerade data.

Fråga 4: VÄLJ ANTAL(*) FRÅN very_small_csv

Den här frågan läser hela filer. Den totala storleken på filer i lagringen för den här tabellen är 100 kB. Noder bearbetar fragment i den här tabellen och summan för varje fragment överförs mellan noder. Den slutliga summan överförs till slutpunkten.

Den här frågan bearbetar drygt 100 kB data. Mängden data som bearbetas för den här frågan avrundas upp till 10 MB, enligt vad som anges i avsnittet Avrundning i den här artikeln.

Kostnadskontroll

Med funktionen Kostnadskontroll i en serverlös SQL-pool kan du ange en budget för mängden data som bearbetas. Du kan ange budgeten i TB för data som bearbetas under en dag, vecka eller månad. Du kan du ha en eller flera angivna budgetar samtidigt. Du kan konfigurera kostnadskontroll för en serverlös SQL-pool med hjälp av Synapse Studio eller T-SQL.

Konfigurera kostnadskontroll för serverlös SQL-pool i Synapse Studio

Om du vill konfigurera kostnadskontroll för serverlös SQL-pool i Synapse Studio gå till Hantera objekt i menyn till vänster än att välja SQL-poolobjekt under Analyspooler. När du hovra över en serverlös SQL-pool ser du en ikon för kostnadskontroll – klicka på den här ikonen.

Navigering för kostnadskontroll

När du klickar på kostnadskontrollikonen visas ett sidofält:

Konfiguration av kostnadskontroll

Om du vill ange en eller flera budgetar klickar du först på knappen Aktivera alternativ för en budget som du vill ange, än anger heltalsvärdet i textrutan. Enheten för värdet är TB: er. När du har konfigurerat de budgetar som du vill använda klickar du på använd-knappen längst ned i sidofältet. Det är allt, din budget är nu satt.

Konfigurera kostnadskontroll för serverlös SQL-pool i T-SQL

För att konfigurera kostnadskontroll för serverlös SQL-pool i T-SQL måste du köra en eller flera av följande lagrade procedurer.

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

Om du vill se den aktuella konfigurationen kör du följande T-SQL-instruktion:

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

Om du vill se hur mycket data som bearbetades under den aktuella dagen, veckan eller månaden kör du följande T-SQL-instruktion:

SELECT * FROM sys.dm_external_data_processed

Överskrider de gränser som definierats i kostnadskontrollen

Om en gräns överskrids under frågekörningen avslutas inte frågan.

När gränsen överskrids avvisas den nya frågan med felmeddelandet som innehåller information om perioden, definierad gräns för den perioden och data som bearbetas för den perioden. Om till exempel en ny fråga körs, där veckogränsen är inställd på 1 TB och den överskreds, visas felmeddelandet:

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

Nästa steg

Information om hur du optimerar dina frågor för prestanda finns i Metodtips för serverlös SQL-pool.