Funzionalità delle prestazioni del flusso di dati
In questo argomento sono inclusi alcuni suggerimenti sulla progettazione di pacchetti di Integration Services per evitare problemi di prestazioni comuni. Vengono inoltre fornite informazioni sugli strumenti e sulle funzionalità che è possibile utilizzare per risolvere i problemi relativi alle prestazioni dei pacchetti.
Configurazione del flusso di dati
Per configurare l'attività Flusso di dati per ottenere prestazioni migliori, è possibile configurare le proprietà dell'attività, modificare le dimensioni del buffer e configurare il pacchetto per l'esecuzione parallela.
Configurazione delle proprietà dell'attività Flusso di dati
[!NOTA]
Le proprietà trattate in questa sezione devono essere impostate separatamente per ogni attività Flusso di dati in un pacchetto.
È possibile configurare le proprietà seguenti dell'attività Flusso di dati, che influenzano le prestazioni:
Specificare il percorso per l'archiviazione temporanea dei dati del buffer, impostando la proprietà BufferTempStoragePath, e delle colonne contenenti dati BLOB (Binary Large Object), impostando la proprietà BLOBTempStoragePath. Per impostazione predefinita, le proprietà contengono i valori delle variabili di ambiente TEMP e TMP. Potrebbe essere necessario specificare altre cartelle per inserire i file temporanei in un'unità disco rigido diversa o più potente o distribuirli in più unità. È possibile specificare più directory delimitando i relativi nomi con punti e virgola (;).
Definire le dimensioni predefinite del buffer utilizzato dall'attività, impostando la proprietà DefaultBufferSize, e il numero massimo di righe in ogni buffer, impostando la proprietà DefaultBufferMaxRows. Le dimensioni predefinite del buffer sono di 10 MB e quelle massime di 100 MB. Il numero di righe massimo predefinito è 10.000.
Definire il numero di thread che l'attività può utilizzare durante l'esecuzione, impostando la proprietà EngineThreads. Questa proprietà indica al motore flusso di dati il numero di thread da utilizzare. Il valore predefinito è 10 e il valore minimo è 3. Il motore, tuttavia, non usa più thread di quelli necessari, indipendentemente dal valore di questa proprietà. Il motore può inoltre utilizzare un numero di thread maggiore di quello specificato da questa proprietà, se necessario per evitare problemi di concorrenza.
Indicare se l'attività Flusso di dati viene eseguita in modalità ottimizzata, impostando la proprietà RunInOptimizedMode. La modalità ottimizzata consente di migliorare le prestazioni rimuovendo dal flusso di dati le colonne, gli output e i componenti inutilizzati.
[!NOTA]
Per indicare che l'attività Flusso di dati viene eseguita in modalità ottimizzata durante il debug, è possibile impostare una proprietà con lo stesso nome, ovvero RunInOptimizedMode, a livello di progetto in SQL Server Data Tools (SSDT). Questa proprietà ha la precedenza sulla proprietà RunInOptimizedMode delle attività Flusso di dati in fase di progettazione.
Modificare il ridimensionamento dei buffer
Il motore flusso di dati inizia l'attività di ridimensionamento dei buffer calcolando le dimensioni stimate di una singola riga di dati. Queste dimensioni vengono quindi moltiplicate per il valore di DefaultBufferMaxRows, per ottenere un valore preliminare per le dimensioni del buffer.
Se il risultato è superiore al valore di DefaultBufferSize, il numero di righe viene ridotto.
Se il risultato è inferiore alle dimensioni minime del buffer calcolate internamente, il numero di righe viene aumentato.
Se il risultato è compreso tra le dimensioni minime del buffer e il valore della proprietà DefaultBufferSize, il buffer viene ridimensionato per ottenere il valore più vicino possibile alle dimensioni stimate della riga per il valore di DefaultBufferMaxRows.
Quando si inizia a testare le prestazioni delle attività Flusso di dati, utilizzare i valori predefiniti di DefaultBufferSize e DefaultBufferMaxRows. Abilitare la registrazione nell'attività Flusso di dati e selezionare l'evento BufferSizeTuning per verificare il numero di righe presenti in ogni buffer.
Prima di iniziare a modificare il ridimensionamento dei buffer, è possibile ridurre le dimensioni di ogni riga di dati rimuovendo le colonne non necessarie e configurando i tipi di dati in modo appropriato.
Quando è disponibile una quantità di memoria sufficiente, è consigliabile utilizzare un numero inferiore di buffer di grandi dimensioni anziché molti buffer di piccole dimensioni. In altre parole, è possibile migliorare le prestazioni riducendo il numero totale di buffer necessari per l'archiviazione dei dati e inserendo in ogni buffer il maggior numero possibile di righe. Per determinare il numero e le dimensioni ottimali dei buffer, provare a utilizzare diversi valori di DefaultBufferSize e DefaultBufferMaxRows monitorando le prestazioni e analizzando le informazioni riportate dall'evento BufferSizeTuning.
Evitare di aumentare le dimensioni del buffer fino al punto in cui inizia a verificarsi il paging su disco. Il paging su disco influisce negativamente sulle prestazioni più di quanto non faccia la mancata ottimizzazione delle dimensioni del buffer. Per determinare il verificarsi o meno del paging, monitorare il contatore delle prestazioni "Buffer con spooling" nello snap-in Prestazioni di Microsoft Management Console (MMC).
Configurare il pacchetto per l'esecuzione parallela
L'esecuzione parallela migliora le prestazioni nei computer dotati di più processori fisici o logici. Per supportare l'esecuzione parallela di attività diverse nel pacchetto, Integration Services usa due proprietà: MaxConcurrentExecutables e EngineThreads.
Proprietà MaxConcurrentExcecutables
La proprietà MaxConcurrentExecutables è una proprietà del pacchetto stesso. Questa proprietà definisce il numero massimo di attività che è possibile eseguire simultaneamente. Il valore predefinito è -1, a indicare il numero di processori fisici o logici più 2.
Per comprendere il funzionamento di questa proprietà, considerare un pacchetto di esempio contenente tre attività Flusso di dati. Se si imposta MaxConcurrentExecutables su 3, le tre attività Flusso di dati potranno essere eseguite tutte simultaneamente. Si supponga, tuttavia, che ogni attività Flusso di dati contenga 10 alberi di esecuzione dall'origine alla destinazione. L'impostazione di MaxConcurrentExecutables su 3 non garantisce l'esecuzione in parallelo degli alberi di esecuzione in ogni attività Flusso di dati.
Proprietà EngineThreads
La proprietà EngineThreads è una proprietà di tutte le attività Flusso di dati. Questa proprietà definisce il numero di thread che il motore del flusso di dati può creare ed eseguire in parallelo. La proprietà EngineThreads si applica ugualmente sia ai thread di origine creati dal motore del flusso di dati per le origini sia ai thread di lavoro creati dal motore per trasformazioni e destinazioni. L'impostazione di EngineThreads su 10, pertanto, indica che il motore può creare fino a dieci thread di origine e fino a dieci thread di lavoro.
Per comprendere il funzionamento di questa proprietà, considerare il pacchetto di esempio contenente tre attività Flusso di dati. Ogni attività Flusso di dati contiene dieci alberi di esecuzione dall'origine alla destinazione. Se si imposta EngineThreads su 10 in ogni attività Flusso di dati, è virtualmente possibile eseguire tutti i 30 alberi di esecuzione simultaneamente.
[!NOTA]
Una trattazione del threading esula dall'ambito di questo argomento. La regola generale, tuttavia, consiste nell'evitare l'esecuzione in parallelo di un numero di thread maggiore del numero di processori disponibili. L'esecuzione di un numero di thread maggiore del numero di processori disponibili può influire negativamente sulle prestazioni a causa del frequente scambio del contesto tra thread.
Configurazione di singoli componenti del flusso di dati
Per configurare singoli componenti del flusso di dati ai fini delle prestazioni, è consigliabile seguire alcune linee guida generali. Sono inoltre disponibili linee guida specifiche per ogni tipo di componente del flusso di dati, ovvero origine, trasformazione e destinazione.
Linee guida generali
Indipendentemente dal componente del flusso di dati, è consigliabile seguire due linee guida generali per migliorare le prestazioni: ottimizzare le query ed evitare stringhe non necessarie.
Ottimizzazione delle query
Numerosi componenti del flusso di dati utilizzano query in operazioni di estrazione dei dati dalle origini o in operazioni di ricerca per la creazione di tabelle di riferimento. La query predefinita utilizza la sintassi SELECT * FROM <nomeTabella>, con cui vengono restituite tutte le colonne della tabella di origine. La disponibilità di tutte le colonne in fase di progettazione consente di scegliere qualsiasi colonna come colonna di ricerca, colonna pass-through o colonna di origine. Dopo avere selezionato le colonne da utilizzare, è tuttavia necessario modificare la query in modo che includa solo le colonne selezionate. La rimozione delle colonne superflue garantisce una maggiore efficienza del flusso di dati in un pacchetto, in quanto un minor numero di colonne comporta la creazione di una riga con dimensioni inferiori. Una riga con dimensioni inferiori fa sì che sia possibile inserire più righe in un buffer e che l'elaborazione di tutte le righe nel set di dati risulti meno complessa.
Per creare una query, è possibile digitarla o utilizzare Generatore query.
[!NOTA]
Quando si esegue un pacchetto in SQL Server Data Tools (SSDT), nella scheda Stato di Progettazione SSIS vengono visualizzati alcuni avvisi. Tali avvisi includono l'identificazione di qualsiasi colonna di dati resa disponibile per il flusso di dati da un'origine, ma che non viene utilizzata successivamente dai componenti del flusso di dati a valle. È possibile utilizzare la proprietà RunInOptimizedMode per rimuovere queste colonne automaticamente.
Eliminazione di operazioni di ordinamento superflue
L'ordinamento è di per sé un'operazione lenta. Evitando operazioni di ordinamento non necessarie è pertanto possibile migliorare le prestazioni del flusso di dati di un pacchetto.
Talvolta i dati di origine sono già ordinati prima di essere utilizzati da un componente a valle. Questo preordinamento può verificarsi quando la query SELECT utilizza una clausola ORDER BY o quando i dati vengono inseriti nell'origine come già ordinati. Per tali dati di origine preordinati, è possibile fornire un hint indicante che i dati sono ordinati e pertanto evitare l'utilizzo di una trasformazione Ordinamento per rispondere ai requisiti di ordinamento di determinate trasformazioni a valle. Le trasformazioni Unione e Merge Join, ad esempio, richiedono input ordinati. Per fornire un hint indicante che i dati sono ordinati, è necessario eseguire le attività seguenti:
Impostare la proprietà IsSorted nell'output di un componente del flusso di dati a monte su True.
Specificare le colonne chiave di ordinamento in cui i dati sono ordinati.
Per ulteriori informazioni, vedere Ordinamento dei dati per le trasformazioni Unione e Merge Join.
Se è necessario ordinare i dati del flusso di dati, è possibile migliorare le prestazioni progettando il flusso di dati in modo che venga eseguito il minor numero possibile di operazioni di ordinamento. Il flusso di dati, ad esempio, utilizza una trasformazione Multicast per copiare il set di dati. Ordinare il set di dati una volta prima dell'esecuzione della trasformazione Multicast anziché ordinare più output in seguito alla trasformazione.
Per ulteriori informazioni, vedere Trasformazione Ordinamento, Trasformazione Unione, Trasformazione Merge join e Trasformazione Multicast.
Origini
Origine OLE DB
Quando si utilizza un'origine OLE DB per recuperare dati da una vista, selezionare "Comando SQL" come modalità di accesso ai dati e immette un'istruzione SELECT. L'accesso a dati tramite un'istruzione SELECT è più efficace rispetto alla selezione di "Tabella o vista" come modalità di accesso ai dati.
Trasformazioni
Utilizzare i suggerimenti inclusi in questa sezione per migliorare la prestazione delle trasformazioni Aggregazione, Ricerca fuzzy, Raggruppamento fuzzy, Ricerca, Merge Join e Dimensione a modifica lenta.
Trasformazione Aggregazione
La trasformazione Aggregazione include le proprietà Keys, KeysScale, CountDistinctKeys e CountDistinctScale. Queste proprietà migliorano le prestazioni in quanto consentono alla trasformazione di preallocare la quantità di memoria necessaria per i dati memorizzati nella cache. Se si conosce il numero esatto o approssimativo di gruppi che dovrebbero risultato da un'operazione Group by, impostare rispettivamente le proprietà Keys e KeysScale. Se si conosce il numero esatto o approssimativo di valori distinct che dovrebbero risultare da un'operazione Distinct Count, impostare rispettivamente le proprietà CountDistinctKeys e CountDistinctScale.
Se in un flusso di dati è necessario creare più aggregazioni, valutare l'opportunità di creare più aggregazioni che utilizzano una singola trasformazione Aggregazione anziché creare più trasformazioni. Questo approccio consente prestazioni migliori quando un'aggregazione è un subset di un'altra aggregazione, in quanto la trasformazione può ottimizzare l'archiviazione interna ed eseguire l'analisi dei dati in ingresso una sola volta. Nel caso, ad esempio, di un'aggregazione che utilizza la clausola GROUP BY e l'aggregazione AVG, è possibile migliorare le prestazioni combinando clausola e aggregazione in una sola trasformazione. L'esecuzione di più aggregazioni all'interno di una trasformazione Aggregazione, tuttavia, comporta la serializzazione delle operazioni di aggregazione e può pertanto influire sulle prestazioni quando è necessario calcolare più aggregazioni indipendentemente.
Trasformazioni Ricerca fuzzy e Raggruppamento fuzzy
Per informazioni sull'ottimizzazione della prestazione di tali trasformazioni, vedere il white paper relativo a Ricerca fuzzy e Raggruppamento fuzzy in SQL Server Integration Services 2005.
Trasformazione Ricerca
È possibile ridurre al minimo le dimensioni dei dati di riferimento nella memoria immettendo un'istruzione SELECT per la ricerca delle sole colonne necessarie. Questa opzione garantisce prestazioni migliori rispetto alla selezione di un'intera tabella o vista, che restituisce invece una quantità elevata di dati non necessari.
Trasformazione Merge join
Non è più necessario configurare il valore della proprietà MaxBuffersPerInput, in quanto Microsoft ha apportato modifiche che riducono il rischio di utilizzo di una quantità eccessiva di memoria da parte della trasformazione Merge join. Questo problema si verificava in genere quando tramite i diversi input della trasformazione Merge Join venivano prodotti dati con frequenze irregolari.
Trasformazione Dimensione a modifica lenta
La Configurazione guidata dimensioni a modifica lenta e la trasformazione Dimensione a modifica lenta sono strumenti di utilizzo generale in grado di rispondere alle esigenze della maggior parte degli utenti. Il flusso di dati generato dalla procedura guidata, tuttavia, non è ottimizzato per le prestazioni.
I componenti più lenti nella trasformazione Dimensione a modifica lenta sono in genere le trasformazioni Comando OLE DB che eseguono istruzioni UPDATE su una singola riga per volta. Il modo più efficace per migliorare le prestazioni della trasformazione Dimensione a modifica lenta consiste pertanto nel sostituire le trasformazioni Comando OLE DB. È possibile sostituire tali trasformazioni con componenti di destinazione che salvano tutte le righe da aggiornare in una tabella di gestione temporanea. È quindi possibile aggiungere un'attività Esegui SQL per l'esecuzione di un singola istruzione UPDATE di Transact-SQL basata su set su tutte le righe contemporaneamente.
Gli utenti avanzati possono progettare un flusso di dati personalizzato per l'elaborazione delle dimensioni a modifica lenta ottimizzata per dimensioni estese. Per una descrizione e un esempio di questo approccio, vedere la sezione relativa allo scenario con dimensione univoca nel white paper relativo al Progetto REAL: progettazione ETL di Business Intelligence.
Destinazioni
Per ottenere prestazioni migliori con le destinazioni, valutare l'opportunità di utilizzare una destinazione SQL Server e di testarne le prestazioni.
Destinazione SQL Server
Quando un pacchetto carica dati in un'istanza di SQL Server nello stesso computer, utilizzare una destinazione SQL Server. Tale destinazione è ottimizzata per caricamenti bulk ad alta velocità.
Test delle prestazioni delle destinazioni
In alcuni casi il salvataggio di dati nelle destinazioni potrebbe richiedere tempi più lunghi di quelli previsti. Per stabilire se ciò è dovuto a un'elaborazione lenta dei dati nella destinazione, è possibile sostituire temporaneamente la destinazione con una trasformazione Conteggio righe. Se la velocità effettiva risulta notevolmente migliorata, è probabile che la causa delle prestazioni lente sia la destinazione in cui vengono caricati i dati.
Analisi delle informazioni nella scheda Stato
Quando si esegue un pacchetto in SQL Server Data Tools (SSDT), in Progettazione SSIS vengono visualizzate informazioni sia sul flusso di controllo che sul flusso di dati. Nella scheda Stato sono elencati i contenitori e le attività in ordine di esecuzione, nonché l'ora di inizio e di fine, gli avvisi e i messaggi di errore per ogni contenitore e attività, inclusi quelli relativi al pacchetto stesso. Sono inoltre elencati i componenti del flusso di dati in ordine di esecuzione, nonché informazioni sullo stato, visualizzato in forma di percentuale di completamento, e il numero di righe elaborate.
Per abilitare o disabilitare la visualizzazione di messaggi nella scheda Stato, attivare o disattivare l'opzione Debug report di stato del menu SSIS. La disabilitazione del report di stato consente di migliorare le prestazioni durante l'esecuzione di un pacchetto complesso in SQL Server Data Tools.
Attività correlate
Contenuto correlato
Articoli e post di Blog
Articolo tecnico relativo a SQL Server 2005 Integration Services: una strategia per ottimizzare le prestazioni su technet.microsoft.com
Articolo tecnico relativo alle tecniche di ottimizzazione delle prestazione in Integration Services, disponibile su technet.microsoft.com
Articolo tecnico sull'aumento della velocità effettiva delle pipeline suddividendo le trasformazioni sincrone in più attività, su sqlcat.com
Articolo tecnico relativo alla guida alle prestazioni del caricamento dati sul sito msdn.microsoft.com
Articolo tecnico relativo al caricamento di 1 TB in 30 minuti con SSIS, disponibile su msdn.microsoft.com
Articolo tecnico relativo alle 10 principali procedure consigliate per SQL Server Integration Services, disponibile su sqlcat.com
Articolo tecnico ed esempio relativo al server di distribuzione di dati bilanciati di SSIS, disponibile su sqlcat.com
Post del blog relativo alla risoluzione dei problemi di prestazioni dei pacchetti SSIS su blogs.msdn.com
di DQS
Serie di video relativi alla progettazione e ottimizzazione per le prestazioni nei pacchetti SSIS in Enterprise (serie di video su SQL)
Video sull'ottimizzazione del flusso di dati del pacchetto SSIS nell'organizzazione (video di SQL Server), su technet.microsoft.com
Video sulle informazioni sui buffer del flusso di dati SSIS (video di SQL Server), su technet.microsoft.com
Video, Modelli di progettazione per prestazioni del servizio di integrazione di Microsoft SQL Server su channel9.msdn.com.
Presentazione relativa all'utilizzo dei miglioramenti al motore del flusso di dati di SQL Server 2008 SSIS da parte di Microsoft IT, su sqlcat.com.
Video relativo al server di distribuzione di dati bilanciati sul sito technet.microsoft.com.
|
Vedere anche
Attivitá
Risoluzione dei problemi relativi agli strumenti per lo sviluppo dei pacchetti
Concetti
Risoluzione dei problemi relativi agli strumenti per l'esecuzione del pacchetto