Extraction Transformation Load (ETL) è la spina dorsale di qualsiasi data warehouse. Nel mondo del data warehouse i dati sono gestiti dal processo ETL, che consiste in tre processi, Estrazione-Pull/Acquisisci dati dalle sorgenti, Trasformazione-modifica dati nel formato richiesto e Carica-push dati a destinazione generalmente in un data warehouse o un data mart.
Impara SSIS e inizia oggi la tua prova gratuita!
SQL Server Integration Services (SSIS) è lo strumento della famiglia ETL utile per lo sviluppo e la gestione di un data warehouse aziendale. Un data warehouse per sua stessa caratterizzazione funziona su un enorme volume di dati e le prestazioni rappresentano una grande sfida quando si gestisce un enorme volume di dati per qualsiasi architetto o DBA.
Considerazioni sul miglioramento dell'ETL
Oggi parlerò della facilità con cui è possibile migliorare le prestazioni ETL o progettare un sistema ETL ad alte prestazioni con l'aiuto di SSIS. Per una migliore comprensione, dividerò dieci metodi in due diverse categorie; in primo luogo, le considerazioni sulla fase di progettazione del pacchetto SSIS e in secondo luogo la configurazione di diversi valori di proprietà dei componenti disponibili nel pacchetto SSIS.
Considerazioni sulla fase di progettazione del pacchetto SSIS
#1 Estrarre i dati in parallelo:SSIS fornisce il modo per estrarre i dati in parallelo utilizzando i contenitori Sequence nel flusso di controllo. Puoi progettare un pacchetto in modo tale che possa estrarre dati da tabelle o file non dipendenti in parallelo, il che contribuirà a ridurre il tempo di esecuzione ETL complessivo.
#2 Estrai i dati richiesti:estrai solo il set di dati richiesto da qualsiasi tabella o file. Devi evitare la tendenza a estrarre tutto ciò che è disponibile sulla sorgente per ora che utilizzerai in futuro; consuma larghezza di banda di rete, consuma risorse di sistema (I/O e CPU), richiede spazio di archiviazione aggiuntivo e degrada le prestazioni complessive del sistema ETL.
Se il tuo sistema ETL è di natura davvero dinamico e le tue esigenze cambiano frequentemente, sarebbe meglio prendere in considerazione altri approcci di progettazione, come ETL basato sui metadati, ecc. piuttosto che progettare per inserire tutto in una volta.
#3 Evita l'uso di componenti di trasformazione asincrona:SSIS è uno strumento ricco con un set di componenti di trasformazione per eseguire attività complesse durante l'esecuzione di ETL ma allo stesso tempo ti costa molto se questi componenti non vengono utilizzati correttamente.
In SSIS sono disponibili due categorie di componenti di trasformazione:Sincrono e Asincrono .
Le trasformazioni sincrone sono quei componenti che elaborano ogni riga e spingono verso il componente/destinazione successivo, utilizza la memoria buffer allocata e non richiede memoria aggiuntiva in quanto è una relazione diretta tra la riga di dati di input/output che si inserisce completamente nella memoria allocata. Componenti come Ricerca, Colonne derivate e Conversione dati ecc. rientrano in questa categoria.
Le trasformazioni asincrone sono quei componenti che prima archiviano i dati nella memoria buffer, quindi elaborano operazioni come Ordina e Aggrega. È necessaria una memoria buffer aggiuntiva per completare l'attività e finché la memoria buffer non è disponibile conserva tutti i dati in memoria e blocca la transazione, nota anche come trasformazione di blocco. Per completare l'attività, il motore SSIS (motore della pipeline del flusso di dati) allocherà memoria buffer aggiuntiva, che è ancora una volta un sovraccarico per il sistema ETL. Componenti come Ordina, Aggrega, Unisci, Unisci e così via rientrano in questa categoria.
Nel complesso, dovresti evitare le trasformazioni asincrone, ma comunque, se ti trovi in una situazione in cui non hai altra scelta, devi essere consapevole di come gestire i valori delle proprietà disponibili di questi componenti. Ne parlerò più avanti in questo articolo.
#4 Uso ottimale dell'evento nei gestori di eventi:per tenere traccia dell'avanzamento dell'esecuzione del pacchetto o intraprendere qualsiasi altra azione appropriata su un evento specifico, SSIS fornisce una serie di eventi. Gli eventi sono molto utili, ma un uso eccessivo degli eventi avrà un costo aggiuntivo per l'esecuzione di ETL.
Qui, devi convalidare tutte le caratteristiche prima di abilitare un evento nel pacchetto SSIS.
#5 È necessario essere a conoscenza dello schema della tabella di destinazione quando si lavora su un enorme volume di dati. È necessario pensarci due volte quando è necessario estrarre un enorme volume di dati dall'origine e inserirlo in un data warehouse o in un data mart. È possibile che si verifichino problemi di prestazioni quando si tenta di inviare dati di grandi dimensioni nella destinazione con una combinazione di operazioni di inserimento, aggiornamento ed eliminazione (DML), poiché potrebbe esserci la possibilità che la tabella di destinazione abbia indici cluster o non cluster, il che potrebbe causare molti dati vengono spostati in memoria a causa di operazioni DML.
Se l'ETL presenta problemi di prestazioni a causa di un'enorme quantità di operazioni DML su una tabella che ha un indice, è necessario apportare le modifiche appropriate alla progettazione dell'ETL, ad esempio eliminare gli indici cluster esistenti nella fase di pre-esecuzione e ricreare tutti gli indici nella fase post-esecuzione. Potresti trovare altre alternative migliori per risolvere il problema in base alla tua situazione.
Configura le proprietà dei componenti
#6 Controlla l'esecuzione parallela di un'attività configurando MaxConcurrentExecutables e EngineThreads proprietà. Il pacchetto SSIS e le attività del flusso di dati hanno una proprietà per controllare l'esecuzione parallela di un'attività:MaxConcurrentExecutables è la proprietà a livello di pacchetto e ha un valore predefinito di -1 , il che significa che il numero massimo di attività che possono essere eseguite è uguale al numero totale di processori sulla macchina più due;
Pacchetto
EngineThreads è una proprietà a livello di attività del flusso di dati e ha un valore predefinito di 10, che specifica il numero totale di thread che possono essere creati per l'esecuzione dell'attività del flusso di dati.
Attività flusso di dati
È possibile modificare i valori predefiniti di queste proprietà in base alle esigenze ETL e alla disponibilità delle risorse.
#7 Configura l'opzione della modalità di accesso ai dati nella destinazione OLEDB. Nell'attività del flusso di dati SSIS possiamo trovare la destinazione OLEDB, che fornisce un paio di opzioni per inviare i dati nella tabella di destinazione, nella modalità di accesso ai dati; in primo luogo, l'opzione “Tabella o vista”, che inserisce una riga alla volta; in secondo luogo, l'opzione "Caricamento rapido tabella o visualizzazione", che utilizza internamente l'istruzione di inserimento in blocco per inviare dati nella tabella di destinazione, che fornisce sempre prestazioni migliori rispetto ad altre opzioni. Una volta scelta l'opzione "caricamento rapido", avrai un maggiore controllo per gestire il comportamento della tabella di destinazione durante un'operazione di push dei dati, come Mantieni identità, Mantieni valori nulli, Blocco tabella e Verifica vincoli.
Editor di destinazione OLE DB
Si consiglia vivamente di utilizzare l'opzione di caricamento rapido per eseguire il push dei dati nella tabella di destinazione per migliorare le prestazioni ETL.
#8, Configura righe per batch e Dimensione massima del commit di inserimento nella destinazione OLEDB. Queste due impostazioni sono importanti per controllare le prestazioni di tempdb e del registro delle transazioni perché con i valori predefiniti specificati di queste proprietà verranno inseriti i dati nella tabella di destinazione in un batch e una transazione. Richiederà un uso eccessivo di tembdb e del log delle transazioni, che si trasforma in un problema di prestazioni ETL a causa del consumo eccessivo di memoria e spazio di archiviazione su disco.
Editor di destinazione OLE DB
Per migliorare le prestazioni ETL puoi inserire un valore intero positivo in entrambe le proprietà in base al volume di dati previsto, che aiuterà a dividere un intero gruppo di dati in più batch e i dati in un batch possono nuovamente impegnarsi nella tabella di destinazione a seconda del valore specificato. Eviterà un uso eccessivo di tempdb e log delle transazioni, il che contribuirà a migliorare le prestazioni dell'ETL.
#9 Utilizzo della destinazione di SQL Server in un'attività di flusso di dati. Quando si desidera eseguire il push dei dati in un database SQL Server locale, si consiglia vivamente di utilizzare la destinazione SQL Server, poiché offre numerosi vantaggi per superare i limiti di altre opzioni, il che consente di migliorare le prestazioni ETL. Ad esempio, usa la funzionalità di inserimento in blocco incorporata in SQL Server ma offre la possibilità di applicare la trasformazione prima di caricare i dati nella tabella di destinazione. Oltre a ciò, ti dà la possibilità di abilitare/disabilitare l'attivazione del trigger durante il caricamento dei dati, il che aiuta anche a ridurre il sovraccarico ETL.
Componente del flusso di dati di destinazione di SQL Server
# 10 Evita il typecast implicito. Quando i dati provengono da un file flat, il gestore connessione file flat tratta tutte le colonne come un tipo di dati stringa (DS_STR), comprese le colonne numeriche. Come sapete, SSIS utilizza la memoria buffer per archiviare l'intero set di dati e applica la trasformazione richiesta prima di eseguire il push dei dati nella tabella di destinazione. Ora, quando tutte le colonne sono tipi di dati stringa, sarà necessario più spazio nel buffer, riducendo le prestazioni ETL.
Per migliorare le prestazioni ETL devi convertire tutte le colonne numeriche nel tipo di dati appropriato ed evitare la conversione implicita, che aiuterà il motore SSIS a contenere più righe in un unico buffer.
Riepilogo dei miglioramenti delle prestazioni ETL
In questo articolo abbiamo esplorato la facilità con cui le prestazioni ETL possono essere controllate in qualsiasi momento. Questi sono 10 modi comuni per migliorare le prestazioni ETL. Potrebbero esserci più metodi basati su diversi scenari attraverso i quali è possibile migliorare le prestazioni.
Nel complesso, con l'aiuto della categorizzazione è possibile identificare come gestire la situazione. Se sei nella fase di progettazione di un data warehouse, potresti dover concentrarti su entrambe le categorie, ma se stai supportando un sistema legacy, lavora prima da vicino sulla seconda categoria.