In questa risposta, cercherò di fornire informazioni dalla documentazione ufficiale di SSIS e menzionerò la mia esperienza personale con la destinazione SQL Server.
1. Destinazione SQL Server
Secondo la documentazione ufficiale della destinazione di SQL Server:
La destinazione di SQL Server si connette a un database SQL Server locale e carica i dati in blocco nelle tabelle e nelle viste di SQL Server. Non è possibile utilizzare la destinazione di SQL Server nei pacchetti che accedono a un database di SQL Server su un server remoto. I pacchetti dovrebbero invece utilizzare la destinazione OLE DB.
La destinazione di SQL Server offre lo stesso inserimento ad alta velocità di dati in SQL Server fornito dall'attività di inserimento in blocco; tuttavia, utilizzando la destinazione di SQL Server, un pacchetto può applicare trasformazioni ai dati delle colonne prima che i dati vengano caricati in SQL Server.
Per caricare i dati in SQL Server, dovresti prendere in considerazione l'utilizzo della destinazione SQL Server invece della destinazione OLE DB
2. Destinazione OLEDB
Secondo la documentazione ufficiale della destinazione OLEDB:
Destinazione OLEDB - opzione di caricamento rapido:carica i dati in una tabella o visualizza nella destinazione OLE DB e utilizza l'opzione di caricamento rapido, ottimizzata per gli inserimenti in blocco
3. Destinazione OLEDB e destinazione SQL Server
In base a Destinazione SQL Server e Destinazione OLE DB - Argomento MSDN:
Donald Farmer, l'ex Group Program Manager for Integration Services, ha affermato che è possibile ottenere un aumento delle prestazioni dal 5 al 10% utilizzando la SQL Server Destination
.
Inoltre, facendo riferimento al seguente post di Matt Masson, specialista dell'integrazione dei dati presso Microsoft, in cui ha risposto alla seguente domanda:
Devo usare la destinazione SQL Server?
La risposta era
No
...
La mia raccomandazione è che se hai bisogno di tutte le prestazioni (un aumento del 10% delle prestazioni su un carico di 10 ore può essere significativo), prova la destinazione di SQL Server per vedere come funziona per te. Tuttavia, tieni presente le seguenti limitazioni della destinazione SQL Server:
- Devi avere SSIS in esecuzione sulla stessa macchina del database di destinazione
- Devi eseguire il pacchetto come amministratore
- È molto difficile eseguire il debug quando le cose vanno male
Date queste limitazioni, consiglio di utilizzare la destinazione OLE DB anche se stai vedendo un aumento delle prestazioni con la destinazione SQL Server.
3.1. La guida alle prestazioni del caricamento dei dati
(Aggiornamento @ 25-03-2019)
Durante la ricerca sulle migliori pratiche SSIS ho trovato un articolo Microsoft molto utile che può essere utilizzato come riferimento:
- La guida alle prestazioni del caricamento dei dati
In questo articolo hanno effettuato un confronto tra tutti i metodi di caricamento dei dati, inclusa la destinazione SQL Server e la destinazione OLEDB, hanno menzionato che:
Destinazione SQL Server La destinazione di SQL Server è il modo più veloce per caricare in blocco i dati da un flusso di dati di Integration Services a SQL Server. Questa destinazione supporta tutte le opzioni di caricamento in blocco di SQL Server, ad eccezione di ROWS_PER_BATCH.
Tenere presente che questa destinazione richiede connessioni di memoria condivisa a SQL Server. Ciò significa che può essere utilizzato solo quando Integration Services è in esecuzione sullo stesso computer fisico di SQL Server.
Destinazione OLE DB: La destinazione OLE DB supporta tutte le opzioni di caricamento in blocco per SQL Server. Tuttavia, per supportare il carico di massa ordinato, è necessaria una configurazione aggiuntiva. Per ulteriori informazioni, vedere "Dati di input ordinati". Per utilizzare l'API di massa, devi configurare questa destinazione per il "caricamento rapido".
La destinazione OLE DB può utilizzare connessioni TCP/IP e named pipe a SQL Server. Ciò significa che la destinazione OLE DB, a differenza della destinazione SQL Server, può essere eseguita su un computer diverso dalla destinazione del caricamento in blocco. Poiché i pacchetti di Integration Services che utilizzano la destinazione OLE DB non devono essere eseguiti nel computer SQL Server stesso, è possibile aumentare il flusso ETL con i server workhorse.
3.2. Esperienza personale
(Aggiornamento @ 25-03-2019)
Poiché questa domanda viene utilizzata come riferimento da molti e dopo aver acquisito maggiore esperienza in questo dominio, ho aggiunto questa sezione per menzionare la mia esperienza personale nell'utilizzo della destinazione di SQL Server.
Sebbene la documentazione ufficiale menzionasse che la destinazione di SQL Server aumenterà le prestazioni, non consiglio affatto di utilizzare questi componenti per molte ragioni:
- Richiede che il server di destinazione e il server ETL siano gli stessi (funziona solo con il server SQL locale)
- Genera sempre eccezioni che non hanno alcun significato
- Dopo aver testato un enorme volume di dati, la differenza di prestazioni con la destinazione OLEDB è trascurabile (testata su circa 500 GB di dati caricati in blocchi e la differenza di tempo è inferiore a un minuto)
Puoi anche fare riferimento al seguente post (da @billinkc) per avere maggiori informazioni su questo argomento:
- I pacchetti SSIS e il database SQL dovrebbero trovarsi sullo stesso server?
4. Conclusione
Sulla base degli articoli Microsoft, puoi dire che SQL Server Destination
aumentare le prestazioni di inserimento dati (usa BULK insert) , ma è progettato per un caso specifico che è il server SQL locale. OLEDB Destination
è più generale e consigliato negli altri casi e utilizzando il Fast Load
modalità di accesso ai dati (che utilizza anche BULK insert) nella OLE DB destination
aumenterà le prestazioni di caricamento dei dati.
D'altra parte, in base alla mia esperienza ea molti articoli scritti da esperti SSIS, non è affatto consigliabile utilizzare SQL Server Destination poiché non è stabile e spesso genera eccezioni e le prestazioni possono essere considerate trascurabili.
Informazioni aggiuntive
Recentemente, ho pubblicato un articolo dettagliato su questo argomento. Puoi verificarlo su:
- Destinazione SSIS OLE DB vs Destinazione SQL Server