Ottimizzazione del flusso di dati del pacchetto SSIS nell'organizzazione (video di SQL Server)
Si applica a: Microsoft SQL Server Integration Services |
Autori: David Noor, Microsoft Corporation |
Durata: 00.15.50 Dimensioni: 68,1 MB Tipo: file WMV |
|
Riepilogo del video
In questo video viene descritto come migliorare le prestazioni del flusso di dati in un pacchetto Integration Services. Verranno illustrate le procedure per ottimizzare le fasi seguenti del flusso di dati:
- Estrazione
- Trasformazione
- Caricamento
Questi suggerimenti per l'ottimizzazione delle prestazioni possono essere applicati nel corso della progettazione, dello sviluppo e dell'esecuzione del flusso di dati.
Riconoscimenti
Grazie a Thomas Kejser per il contributo al materiale per la serie di video di SQL Server SSIS: progettazione e ottimizzazione delle prestazioni. Questo video è il secondo della serie.
Grazie a Carla Sabotta e Douglas Laudenschlager per le indicazioni e i preziosi commenti e suggerimenti.
Trascrizione del video
Timestamp video | Audio |
---|---|
00:00 |
Salve, sono David Noor, Senior Development Lead per SQL Server Integration Services qui in Microsoft. Benvenuti alla visione di questo video sull'ottimizzazione del flusso di dati del pacchetto SSIS nell'organizzazione. Questa è la seconda parte di una serie in quattro parti, intitolata SSIS: progettazione e ottimizzazione delle prestazioni. Nella prima parte, Denny vi ha mostrato il modo migliore per misurare e comprendere le prestazioni dei pacchetti SSIS. In questa puntata partiremo da quella base e vedremo come migliorare le prestazioni del flusso di dati del pacchetto SSIS. Inizieremo identificando i temi comuni in ogni flusso di dati e vedremo come scegliere le parti del flusso di dati su cui intervenire in modo prioritario per provare a migliorare le prestazioni. Una volta individuati i punti in cui si presentano problemi di prestazioni, potrete utilizzare molti accorgimenti per rendere il flusso di dati più veloce ed efficiente. Esamineremo una serie di suggerimenti specifici applicabili durante la progettazione, lo sviluppo e addirittura l'esecuzione del flusso di dati. Iniziamo! La maggior parte dei flussi di dati dei pacchetti riguarda il processo di estrazione, trasformazione e caricamento di dati critici, in alcuni casi denominato ETL. Ottimizzare i flussi di dati significa ottimizzare ciascuna delle fasi: estrazione, trasformazione e caricamento. Per quanto riguarda l'estrazione, vedremo come ottimizzare i componenti di origine SSIS e le query che eseguono in modo da ottenere le migliori prestazioni con il minimo impatto sui sistemi di origine. Ottimizzare le trasformazioni nei flussi di dati significa definire l'attività da svolgere e scegliere l'approccio ottimale per realizzarla eliminando i passaggi non necessari e, talvolta, modificando le query di origine in modo che eseguano automaticamente le trasformazioni. Infine, ottimizzare il caricamento del flusso di dati significa ottimizzare i componenti di destinazione SSIS, le reti, il blocco e altri fattori che possono ostacolare il corso del flusso mentre tenta di caricare dati nella destinazione prescelta. In questo video parleremo di suggerimenti pratici che potrete utilizzare per individuare possibilità di ottimizzazione in tutte e tre fasi del flusso di dati. Prima di esaminare questi suggerimenti, voglio però ricordarvi che i problemi di prestazioni non sono in genere di facile e completa soluzione. Nessuno dei suggerimenti che vi fornirò potrà risolvere tutti i problemi di prestazioni che potreste rilevare nel vostro flusso di dati. I suggerimenti che vedremo funzionano bene nei casi comuni, ma non sarebbe una buona idea applicarli in modo generalizzato al vostro problema specifico. Il miglior modo di procedere è sempre quello di capire qual è lo scopo dei vostri flussi di dati, assicuravi che siano progettati in modo adeguato a raggiungere tale scopo, misurarne le prestazioni correnti e apportarvi modifiche in modo iterativo, verificando di volta in volta se la modifica ha migliorato le prestazioni. Inoltre, quando esaminate un problema di prestazioni, vi può facilmente capitare di concentrarvi su una specifica tecnologia o un determinato componente, magari perché li conoscete meglio di altri. Provate invece a pensare al vostro flusso di dati nel contesto di un intero ecosistema: molto probabilmente più database relazionali, una rete, sistemi operativi, file system, tanti componenti. Quante più informazioni avete su questo intero ecosistema, tanto più completo sarà il quadro delle reali problematiche di prestazioni di ogni componente e tanto più sarete in grado di apportare modifiche più efficaci e meno rischiose. |
03:38 |
Inizieremo proprio dove inizia il flusso di dati, dall'estrazione. Quando utilizzate come origine SQL Server o un altro database con un'interfaccia bulk, dovreste provare ad aumentare le dimensioni del pacchetto. In genere, l'impostazione predefinita 4096 di SQL Server dà buoni risultati, ma poiché l'estrazione sposterà grandi quantità di dati, potrebbe essere utile aumentare questo valore. Perché questa modifica abbia effetto, dovrete chiedere al vostro amministratore di rete di abilitare "Frame jumbo" anche sulla vostra rete. Dovrete però testare l'effetto di questa modifica sul vostro pacchetto. Se utilizzate la stessa gestione connessione per operazioni bulk come nel caso di un'origine OLE DB e per operazioni su riga singola (come nel caso di un comando OLE DB), sarebbe preferibile creare una seconda gestione connessione per le operazioni con il comando OLE DB e utilizzarvi una dimensione di pacchetto minore. Come già detto, se ETL è in esecuzione su Windows 2008 e utilizzate un computer multicore con più NIC, potete migliorare leggermente le prestazioni di rete impostando l'affinità tra schede di rete e singoli core. Per maggiori informazioni cercate un post di blog chiamato Scaling Heavy Network Traffic with Windows sul sito MSDN. Una delle cose più facili da fare per ottimizzare l'estrazione è ottimizzare le query che state utilizzando. Può talora sembrare più veloce selezionare la tabella da cui effettuare l'estrazione e recuperare tutte le colonne, ma otterrete risultati decisamente migliori se selezionerete solo le colonne realmente necessarie. In questo modo non solo ridurrete il traffico di rete e la quantità di memoria utilizzata, ma probabilmente anche l'attività di I/O necessaria al server database per soddisfare la vostra query. Come mostrato in questo caso, per SQL Server potete utilizzare anche un hint per indicare di non generare blocchi condivisi nel corso dell'operazione SELECT, in modo che la query possa leggere eventuali dati dirty o di cui non è stato eseguito il commit. Riservate questo accorgimento per i casi in cui dovete assolutamente ottenere le migliori prestazioni e siete sicuri che la lettura di dati dirty sarà sempre adatta al processo ETL. Le ricerche possono essere considerate in termini di estrazione o trasformazione. Nell'uno o nell'altro caso, dovreste applicare alcune delle idee che vi ho illustrato nella diapositiva precedente. In questo caso, diventa ancora più essenziale selezionare solo le colonne necessarie, non solo per l'ottimizzazione della rete, ma anche per l'ottimizzazione della cache in memoria. Se utilizzate SQL Server 2008, una delle migliori funzionalità per le prestazioni è l'aggiunta di una nuova cache di ricerca condivisa. La condivisione di una cache di ricerca vi consente di recuperare i dati di riferimento una sola volta e riutilizzarli in più operazioni di ricerca nel pacchetto o anche in più pacchetti se salvate la cache in un file. Se avete più componenti di ricerca che fanno riferimento alla stessa tabella, questa nuova opzione vi consentirà di aumentare notevolmente la velocità dei pacchetti. Utilizzarla è molto semplice. Create una gestione connessione Cache nel pacchetto, popolate la cache utilizzando la nuova trasformazione Cache, quindi modificate le ricerche in modo che facciano riferimento a questa connessione cache per i dati di riferimento. |
06:29 |
Passiamo alla seconda fase di ETL: la trasformazione. Nella trasformazione lavorate con dati già caricati nel flusso, cercando di prepararli alla fase di caricamento. In SSIS ogni trasformazione appare come oggetto trascinabile nell'area di progettazione, ma non tutte le trasformazioni sono uguali. Esaminiamo i tre tipi di trasformazioni che esistono in SSIS:
Ora che vi ho illustrato i suggerimenti basilari possiamo esaminare qualche suggerimento più specifico:
|
11:59 |
Esaminiamo adesso la fase di caricamento. Quando eseguite il caricamento in SQL Server, avete a disposizione due opzioni efficienti:
In tutti questi casi, l'utilizzo di una dimensione di commit pari a 0 produrrà il caricamento più veloce. È una procedura abbastanza comune, inoltre, eliminare gli indici nel sistema di destinazione in caso di caricamenti di grandi dimensioni, ma è opportuno attenersi ad alcune linee di guida per stabilire quando l'operazione vada effettuata. Una linea guida comune è quella di scegliere di eliminare gli indici in base all'aumento percentuale che si prevede verrà causato dal caricamento e in base ai tipi di indici della tabella:
Se state eseguendo il caricamento in una tabella su cui sono in corso altre attività, dovrete mettere in atto una strategia. I caricamenti bulk probabilmente bloccheranno più o meno tutta la tabella di destinazione, quindi vorrete verificare che questo sia accettabile oppure utilizzare il partizionamento. Se dovete eseguire il caricamento in un database operativo, potreste impostare una partizione di caricamento, in modo che i dati operativi attuali restino attivi. Se il caricamento è lento, verificate quale altra attività è in corso sulla tabella o sulla partizione e assicuratevi che non ci siano altre attività concorrenti. Per una guida eccellente sul miglioramento delle prestazioni di caricamenti bulk e partizioni, cercate l'articolo SQLCAT intitolato The Data Loading Performance Guide sul sito MSDN. Inoltre, quando eseguite caricamenti, assicuratevi di utilizzare TRUNCATE, e non DELETE, per cancellare i dati, in modo che l'eliminazione non sia transazionale. Le destinazioni che utilizzano una connessione di rete sono inoltre soggette agli stessi problemi di rete che ho descritto in precedenza. Provate ad aumentare la dimensione del pacchetto e ad abilitare "Frame jumbo" sulla rete per ottenere prestazioni ottimali nella fase di caricamento. |
15:02 |
Con questo si conclude la seconda parte della serie sulle prestazioni. Uno speciale ringraziamento a Thomas per tutte le informazioni che hanno costituito la base di questa serie di video e a Carla e Douglas per la loro assistenza nella creazione della serie. Per ulteriori informazioni su questi argomenti, fate riferimento a Top 10 SQL Server Integration Services Best Practices. Grazie dell'attenzione. Vi invitiamo a guardare le altre tre parti di questa serie di video intitolata SSIS: progettazione e ottimizzazione delle prestazioni. Speriamo che il video vi sia stato utile e ci auguriamo di ricevere i vostri commenti al riguardo. Nell'angolo superiore destro della home page del video è disponibile un collegamento per dare una valutazione e un commento. |