Gestione dei costi per il pool SQL serverless in Azure Synapse Analytics

Questo articolo illustra come stimare e gestire i costi per il pool SQL serverless in Azure Synapse Analytics:

  • Stimare la quantità di dati elaborati prima di eseguire una query
  • Usare la funzionalità di controllo dei costi per impostare il budget

Tenere presente che i costi per il pool SQL serverless in Azure Synapse Analytics sono solo una parte dei costi mensili nella fattura di Azure. Se si usano altri servizi di Azure, verranno addebitati tutti i servizi e le risorse di Azure usati nella sottoscrizione di Azure, inclusi i servizi di terze parti. Questo articolo illustra come pianificare e gestire i costi per il pool SQL serverless in Azure Synapse Analytics.

Dati elaborati

Dati elaborati è la quantità di dati archiviati temporaneamente dal sistema durante l'esecuzione di una query. I dati elaborati sono costituiti dalle quantità seguenti:

  • Quantità di dati letti dall'archiviazione. La quantità include:
    • Dati letti durante la lettura dei dati.
    • Dati letti durante la lettura dei metadati (per i formati di file che contengono metadati, ad esempio Parquet).
  • Quantità di dati nei risultati intermedi. Questi dati vengono trasferiti tra i nodi durante l'esecuzione della query. È incluso il trasferimento dei dati all'endpoint, in un formato non compresso.
  • Quantità di dati scritti nella risorsa di archiviazione. Se si usa CREATE EXTERNAL TABLE AS SELECT (CETAS) per esportare il set di risultati nell'archiviazione, la quantità di dati scritti viene aggiunta alla quantità di dati elaborati per la parte SELECT di CETAS.

La lettura dei file dall'archiviazione è altamente ottimizzata. Il processo usa:

  • Prelettura, che potrebbe comportare un sovraccarico per la quantità di dati letti. Se una query legge un intero file, non è previsto alcun sovraccarico. Se un file viene letto parzialmente, ad esempio nelle query TOP N, una parte dei dati viene letta usando la prelettura.
  • Parser CSV (valori delimitati da virgole) ottimizzato. Se si usa PARSER_VERSION='2.0' per leggere i file CSV, aumentano leggermente le quantità di dati letti dall'archiviazione. Un parser CSV ottimizzato legge i file in parallelo, in blocchi di dimensioni uguali. I blocchi non contengono necessariamente righe intere. Per assicurarsi che tutte le righe vengano analizzate, il parser CSV ottimizzato legge anche piccoli frammenti di blocchi adiacenti. Questo processo aggiunge una piccola quantità di sovraccarico.

Statistiche

Query Optimizer per il pool SQL serverless si basa sulle statistiche per generare piani di esecuzione delle query ottimali. È possibile creare le statistiche manualmente. In caso contrario, il pool SQL serverless le crea automaticamente. In entrambi i casi, le statistiche vengono create eseguendo una query separata che restituisce una colonna specifica a una frequenza di campionamento specificata. A questa query è associata una quantità di dati elaborati.

Se si esegue la stessa query o qualsiasi altra query che può sfruttare le statistiche create, queste vengono riutilizzate, se possibile. Non vengono elaborati ulteriori dati per la creazione delle statistiche.

Quando vengono create statistiche per una colonna Parquet, solo la colonna pertinente viene letta dai file. Quando vengono create statistiche per una colonna CSV, vengono letti e analizzati i file interi.

Arrotondamento

La quantità di dati elaborati viene arrotondata fino al MB più vicino per ogni query. Ogni query ha almeno 10 MB di dati elaborati.

Elementi non inclusi nei dati elaborati

  • Metadati a livello di server, ad esempio account di accesso, ruoli e credenziali a livello di server.
  • Database creati nell'endpoint. Tali database contengono solo metadati (ad esempio utenti, ruoli, schemi, viste, funzioni con valori di tabella inline, stored procedure, credenziali con ambito database, origini dati esterne, formati di file esterni e tabelle esterne).
    • Se si usa l'inferenza dello schema, vengono letti frammenti di file per dedurre i nomi di colonna e i tipi di dati e la quantità di dati letti viene aggiunta alla quantità di dati elaborati.
  • Istruzioni DDL (Data Definition Language), ad eccezione dell'istruzione CREATE STATISTICS, perché elabora i dati dall'archiviazione in base alla percentuale del campione specificata.
  • Query di soli metadati.

Riduzione della quantità di dati elaborati

È possibile ottimizzare la quantità di dati elaborati per query e migliorare le prestazioni partizionando e convertendo i dati in un formato compresso basato su colonne come Parquet.

Esempi

Si supponga di avere tre tabelle.

  • La tabella population_csv è supportata da 5 TB di file CSV. I file sono organizzati in cinque colonne di dimensioni uguali.
  • Nella tabella population_parquet sono presenti gli stessi dati della tabella population_csv. È supportata da 1 TB di file Parquet. Questa tabella è più piccola di quella precedente perché i dati vengono compressi in formato Parquet.
  • La tabella very_small_csv è supportata da 100 kB di file CSV.

Query 1: SELECT SUM(population) FROM population_csv

Questa query legge e analizza interi file per ottenere i valori per la colonna population. I nodi elaborano frammenti di questa tabella e la somma della popolazione per ogni frammento viene trasferita tra i nodi. La somma finale viene trasferita all'endpoint.

Questa query elabora 5 TB di dati e un piccolo sovraccarico per il trasferimento di somme di frammenti.

Query 2: SELECT SUM(population) FROM population_parquet

Quando si eseguono query su formati compressi e basati su colonne come Parquet, vengono letti meno dati rispetto alla query 1. Si osserva questo risultato perché il pool SQL serverless legge una singola colonna compressa anziché l'intero file. In questo caso, vengono letti 0,2 TB. Le cinque colonne di dimensioni uguali sono di 0,2 TB ciascuna. I nodi elaborano frammenti di questa tabella e la somma della popolazione per ogni frammento viene trasferita tra i nodi. La somma finale viene trasferita all'endpoint.

Questa query elabora 0,2 TB di dati e un piccolo sovraccarico per il trasferimento di somme di frammenti.

Query 3: SELECT * FROM population_parquet

Questa query legge tutte le colonne e trasferisce tutti i dati in un formato non compresso. Se il formato di compressione è 5:1, la query elabora 6 TB perché legge 1 TB e trasferisce 5 TB di dati non compressi.

Query 4: SELECT COUNT(*) FROM very_small_csv

Questa query legge file interi. Le dimensioni totali dei file nell'archiviazione per questa tabella è di 100 kB. I nodi elaborano frammenti di questa tabella e la somma per ogni frammento viene trasferita tra i nodi. La somma finale viene trasferita all'endpoint.

Questa query elabora poco più di 100 kB di dati. La quantità di dati elaborati per questa query viene arrotondata fino a 10 MB, come specificato nella sezione Arrotondamento di questo articolo.

Controllo costi

La funzionalità di controllo dei costi nel pool SQL serverless consente di impostare il budget per la quantità di dati elaborati. È possibile impostare il budget in TB di dati elaborati per un giorno, una settimana e un mese. Allo stesso tempo è possibile impostare uno o più budget. Per configurare il controllo dei costi per il pool SQL serverless, è possibile usare Synapse Studio o T-SQL.

Configurare il controllo dei costi per il pool SQL serverless in Synapse Studio

Per configurare il controllo dei costi per il pool SQL serverless in Synapse Studio, passare alla voce Gestisci nel menu a sinistra, quindi selezionare l'elemento pool SQL in Pool di analisi. Quando si passa il puntatore del mouse sul pool SQL serverless, si noterà un'icona per il controllo dei costi. Fare clic su questa icona.

Cost control navigation

Dopo aver fatto clic sull'icona del controllo dei costi, verrà visualizzata una barra laterale:

Cost control configuration

Per impostare uno o più budget, fare prima clic sul pulsante di opzione Abilita per un budget che si desidera impostare, quindi immettere il valore intero nella casella di testo. L'unità per il valore è espressa in TB. Dopo aver configurato i budget desiderati, fare clic sul pulsante Applica nella parte inferiore della barra laterale. A questo punto, il budget è impostato.

Configurare il controllo dei costi per il pool SQL serverless in T-SQL

Per configurare il controllo dei costi per il pool SQL serverless in T-SQL, è necessario eseguire una o più delle stored procedure seguenti.

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

Per visualizzare la configurazione corrente, eseguire l'istruzione T-SQL seguente:

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

Per verificare la quantità di dati elaborati durante il giorno, la settimana o il mese corrente, eseguire l'istruzione T-SQL seguente:

SELECT * FROM sys.dm_external_data_processed

Superamento dei limiti definiti nel controllo dei costi

Nel caso in cui un limite venga superato durante l'esecuzione della query, la query non verrà terminata.

Quando viene superato il limite, la nuova query verrà rifiutata con il messaggio di errore contenente i dettagli relativi al periodo, al limite definito per tale periodo e i dati elaborati per tale periodo. Ad esempio, nel caso in cui venga eseguita una nuova query, in cui il limite settimanale è impostato su 1 TB e viene superato, il messaggio di errore sarà:

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

Passaggi successivi

Per informazioni su come ottimizzare le query per le prestazioni, vedere le Procedure consigliate per il pool SQL serverless.