Architettura di Azure Synapse SQL

Questo articolo descrive i componenti dell'architettura di Synapse SQL. Illustra anche come Azure Synapse SQL unisce funzionalità di elaborazione di query distribuite con Archiviazione di Azure per raggiungere prestazioni e scalabilità elevate.

Componenti dell'architettura di Synapse SQL

Synapse SQL usa un'architettura scale-out per distribuire l'elaborazione computazionale dei dati su più nodi. Poiché le risorse di calcolo sono separate dall'archiviazione, è possibile ridimensionarle indipendentemente dai dati presenti nel sistema.

Per il pool SQL dedicato, l'unità di scala è un'astrazione della potenza di calcolo nota come unità di data warehouse.

Per il pool SQL serverless, essendo serverless, il ridimensionamento viene eseguito automaticamente in base ai requisiti di risorse delle query. Con il progressivo cambiamento della topologia a seguito dell'aggiunta e della rimozione di nodi o failover, il ridimensionamento viene adattato in base alle modifiche per garantire che la query disponga di risorse sufficienti e venga completata correttamente. Ad esempio, l'immagine seguente mostra il pool SQL serverless che usa quattro nodi di calcolo per eseguire una query.

Screenshot of Synapse SQL architecture.

Synapse SQL usa un'architettura basata su nodi. L'applicazione si connette ed esegue comandi T-SQL in un nodo di controllo che rappresenta l'unico punto di ingresso per Synapse SQL.

Il nodo di controllo di Azure Synapse SQL utilizza un motore di query distribuite per ottimizzare le query per l'elaborazione parallela e quindi passa le operazioni ai nodi di calcolo che eseguiranno l'elaborazione in parallelo.

Il nodo di controllo del pool SQL serverless utilizza un motore di elaborazione di query distribuite per ottimizzare e orchestrare l'esecuzione distribuita di una query utente dividendola in query di dimensioni più piccole che verranno eseguite nei nodi di calcolo. Ognuna delle query più piccole è definita attività e rappresenta un'unità di esecuzione distribuita. Tale attività legge i file nelle risorse di archiviazione, unisce i risultati generati da altre attività e raggruppa o ordina i dati recuperati da altre attività.

I nodi di calcolo archiviano tutti i dati utente in Archiviazione di Azure ed eseguono le query parallele. Data Movement Service (DMS) è un servizio interno a livello di sistema che sposta i dati tra i nodi per eseguire query in parallelo e restituire risultati accurati.

Grazie alla separazione delle risorse di archiviazione dalle risorse di calcolo, l'uso di Synapse SQL offre la vantaggiosa possibilità di ridimensionare la potenza di calcolo indipendentemente, senza dover tener conto delle esigenze di archiviazione. Per il pool SQL serverless il ridimensionamento viene eseguito automaticamente, mentre per il pool SQL dedicato è possibile:

  • Aumentare o ridurre la potenza di calcolo all'interno di un pool SQL dedicato senza spostare i dati.
  • Sospendere la capacità di calcolo mantenendo intatti i dati e consentendo di pagare solo per l'archiviazione.
  • Ripristinare le capacità di calcolo durante l'orario operativo.

Archiviazione di Azure

Synapse SQL usa Archiviazione di Azure per proteggere i dati dell'utente. Poiché i dati vengono archiviati e gestiti da Archiviazione di Azure, è previsto un addebito separato per l'uso dello spazio di archiviazione.

Il pool SQL serverless consente di eseguire query sui file del data lake, mentre il pool SQL dedicato consente di eseguire query e inserire dati dai file del data lake. I dati inseriti nel pool SQL dedicato vengono partizionati in distribuzioni per ottimizzare le prestazioni del sistema. È possibile scegliere il modello di partizionamento orizzontale da usare per distribuire i dati quando si definisce la tabella. Sono supportati i modelli di partizionamento seguenti:

  • Hash
  • Round Robin
  • Replica

Nodo di controllo

Il nodo di controllo è il componente principale dell'architettura. È il front-end che interagisce con tutte le applicazioni e le connessioni.

In Synapse SQL il motore di query distribuite viene eseguito nel nodo di controllo al fine di ottimizzare e coordinare le query parallele. Quando si invia una query T-SQL al pool SQL dedicato, il nodo di controllo la trasforma in query che verranno eseguite su ogni distribuzione in parallelo.

Nel pool SQL serverless il motore di elaborazione di query viene eseguito nel nodo di controllo per ottimizzare e coordinare l'esecuzione distribuita di una query utente dividendola in query più piccole che possono essere eseguite sui nodi di calcolo. Il motore assegna anche set di file che devono essere elaborati in ogni nodo.

Nodi di calcolo

I nodi di calcolo forniscono la potenza di calcolo.

Nel pool SQL dedicato viene eseguito il mapping delle distribuzioni ai nodi di calcolo per l'elaborazione. Quando si ottengono risorse di calcolo aggiuntive a pagamento, il pool esegue di nuovo il mapping delle distribuzioni nei nodi di calcolo disponibili. Il numero di nodi di calcolo è compreso tra 1 e 60 ed è determinato dal livello di servizio per il pool SQL dedicato. Ogni nodo di calcolo ha un ID visibile nelle visualizzazioni di sistema. È possibile individuare l'ID del nodo di calcolo cercando la colonna node_id nelle visualizzazioni di sistema il cui nome inizia con sys.pdw_nodes. Per un elenco delle visualizzazioni di sistema, vedere le visualizzazioni di sistema di Synapse SQL.

Nel pool SQL serverless a ogni nodo di calcolo vengono assegnati un'attività e un set di file in cui eseguirla. L'attività corrisponde a un'unità di esecuzione della query distribuita, che costituisce una parte effettiva della query utente inviata. Il ridimensionamento automatico è attivato per verificare che venga usato un numero di nodi di calcolo sufficiente per eseguire la query utente.

Data Movement Service

Il servizio DMS (Data Movement Service) è la tecnologia di trasporto dati del pool SQL dedicato che coordina lo spostamento dei dati tra i nodi di calcolo. Alcune query richiedono lo spostamento dei dati per garantire che le query parallele restituiscano risultati accurati. Quando lo spostamento dei dati è necessario, DMS assicura che i dati corretti vengano spostati nel percorso corretto.

Distribuzioni

Una distribuzione è l'unità di base di archiviazione ed elaborazione di query parallele eseguite su dati distribuiti nel pool SQL dedicato. Quando il pool SQL dedicato esegue una query, il processo viene diviso in 60 query di dimensioni più piccole che vengono eseguite in parallelo.

Ognuna delle 60 query viene eseguita in una distribuzione dei dati. Ogni nodo di calcolo gestisce una o più delle 60 distribuzioni. Un pool SQL dedicato con il numero massimo di risorse di calcolo ha un'unica distribuzione per ogni nodo di calcolo. Un pool SQL dedicato con il numero minimo di risorse di calcolo ha tutte le distribuzioni in un unico nodo di calcolo.

Tabelle con distribuzione hash

Una tabella con distribuzione hash offre le prestazioni di query più elevate per join e aggregazioni in tabelle di grandi dimensioni.

Per partizionare i dati in una tabella con distribuzione hash, il pool SQL dedicato usa una funziona hash per assegnare in modo deterministico ogni riga a un'unica distribuzione. Nella definizione della tabella una delle colonne è definita come colonna di distribuzione. La funzione hash usa i valori della colonna di distribuzione per assegnare ogni riga a una distribuzione.

La figura seguente illustra come una tabella completa non distribuita viene archiviata come tabella con distribuzione hash.

Screenshot of a table stored as a hash-distribution.

  • Ogni riga appartiene a una sola distribuzione.
  • Un algoritmo hash deterministico assegna ogni riga a una sola distribuzione.
  • Il numero di righe di tabella per distribuzione varia come mostrano le diverse dimensioni delle tabelle.

Ai fini delle prestazioni, per la selezione di una colonna di distribuzione è necessario considerare alcuni aspetti, ad esempio la specificità, la differenza dei dati e i tipi di query eseguite nel sistema.

Tabelle con distribuzione round robin

La tabella round robin è la tabella più semplice da creare e offre ottime prestazioni quando viene usata come tabella di staging per i caricamenti.

Una tabella con distribuzione round robin distribuisce i dati in modo uniforme all'interno della tabella senza alcuna ottimizzazione aggiuntiva. Viene innanzitutto selezionata casualmente una distribuzione, quindi i buffer di righe vengono assegnati in sequenza alle distribuzioni. Sebbene il caricamento dei dati in una tabella round robin risulti rapido, è spesso possibile ottenere prestazioni di query migliori con le tabelle con distribuzione hash. Per i join nelle tabelle round robin è necessaria una ridistribuzione dei dati, che richiede più tempo.

Tabelle replicate

Una tabella replicata offre le migliori prestazioni di query per le tabelle di piccole dimensioni.

Una tabella replicata memorizza nella cache una copia completa della tabella in ogni nodo di calcolo. Quindi, la replica di una tabella elimina la necessità di trasferire dati tra i nodi di calcolo prima di un join o un'aggregazione. Le tabelle replicate sono particolarmente adatte all'uso con tabelle di piccole dimensioni. È necessario più spazio di archiviazione e si verifica un sovraccarico aggiuntivo durante la scrittura dei dati, il che impedisce l'uso di tabelle di grandi dimensioni.

Il diagramma seguente mostra una tabella replicata memorizzata nella cache durante la prima distribuzione in ogni nodo di calcolo.

Screenshot of the replicated table cached on the first distribution on each compute node.

Passaggi successivi

Dopo aver appreso alcune informazioni su Synapse SQL, vedere come creare un pool SQL dedicato rapidamente e caricare dati di esempio. Oppure iniziare a usare il pool SQL serverless. Se non si ha familiarità con Azure, il glossario di Azure può risultare utile quando si incontrano termini nuovi.