L'esecuzione del pacchetto SSIS crea un numero enorme. di file temporanei che mi fanno esaurire lo spazio su disco

sqlbulkcopy ssis

Domanda

Ho un pacchetto ssis che eseguo usando un lavoro sql per la copia di massa di dati da un database all'altro. la destinazione è il nostro server di integrazione in cui abbiamo spazio sufficiente per il database. Ma quando eseguo questo lavoro (es. Pacchetto). crea un numero enorme di file temporanei nella cartella localsettings / temp negli ordini di un file mdf da 1 GB e crea circa 20 gb di file temporanei. Ho creato manualmente questo pacchetto e non ho usato la procedura guidata per l'esportazione di importazione. Qualcuno può aiutarmi a evitare questi enormi tempfiles durante l'esecuzione?. Se ulteriori dettagli dovessero essere menzionati.

Nota: molti hanno detto che se creiamo un pacchetto utilizzando la procedura guidata di esportazione di importazione e impostiamo l'ottimizzazione per molte tabelle, ciò avverrà. Ma in questo pacchetto interrogo solo una tabella e ho creato manualmente senza utilizzare la procedura guidata di esportazione di importazione.

Risposta popolare

Perché il pacchetto crea file temporanei?

SSIS è una soluzione ETL in memoria, tranne quando non è in grado di tenere tutto in memoria e inizia lo scambio su disco.

Perché ristrutturare il pacchetto come @jeff hornby ha suggerito aiuto?

Trasformazioni di blocco completamente e parzialmente impongono la copia della memoria nel flusso di dati. Supponi di avere 10 bucket con 1 MB di dati ciascuno. Quando si utilizza una trasformazione di blocco, quando tali bucket arrivano a una trasformazione, i dati devono essere copiati da una posizione di memoria a un'altra. Ora hai raddoppiato il consumo totale di memoria dei pacchetti poiché hai utilizzato 10 MB di dati prima della trasformazione dell'unione e poi di altri 10 MB dopo.

Utilizza solo le colonne di cui hai bisogno. Se una colonna non è nella destinazione, non aggiungerla al flusso di dati. Utilizzare il database per eseguire ordinamenti e fusioni. Trasmetti i tuoi dati ai tipi appropriati prima che colpiscano il flusso di dati.

Cos'altro potrebbe causare l'utilizzo del file temporaneo

Ricerca trasformazioni. Ho visto persone schiacciare il loro server ETL quando usano SELECT * FROM dbo.BillionRowTable quando tutto SELECT * FROM dbo.BillionRowTable cui avevano bisogno era una o due colonne per il periodo di tempo corrente. Il comportamento predefinito di un'operazione di ricerca è eseguire la query di origine e memorizzare i risultati nella memoria. Per tabelle di grandi dimensioni, ampie e / o profonde, questo può far sembrare che il flusso di dati non sia nemmeno in esecuzione mentre SSIS è occupato a eseguire lo streaming e il caching di tutti i dati come parte della fase di pre-esecuzione.

Dati Binary / LOB. Hai un tipo di dati (n) varchar (max) / varbinary (max) o classico BLOB nella tabella di origine? Scusa, non sarà in memoria. Invece, il flusso di dati porterà un puntatore lungo e scriverà un file per ognuno di questi oggetti.

Troppa elaborazione parallela. SSIS è fantastico in quanto ottieni una paralleizzazione gratuita delle tue proiezioni. Tranne che puoi avere troppe cose buone. Se si dispone di 20 flussi di dati tutti fluttuanti nello spazio senza precedenza tra di loro, il motore di Integration Services può tentare di eseguirli tutti contemporaneamente. Aggiungere un vincolo di precedenza tra di loro, anche se è solo al termine (in caso di successo / il fail) per forzare un po 'la serializzazione delle operazioni. All'interno di un flusso di dati, è possibile introdurre la stessa sfida avendo operazioni non correlate in corso. La mia regola generale è che partendo da qualsiasi fonte o destinazione, dovrei essere in grado di raggiungere tutte le altre fonti / destinazioni.

Cos'altro posso fare?

Esaminare cos'altro sta usando la memoria sulla scatola. Hai impostato un valore di memoria massimo normale (non predefinito) per SQL Server ? SSIS come la RAM come un ragazzino grasso ama la torta quindi è necessario bilanciare le esigenze di memoria di SSIS con il database stesso - hanno spazi di memoria completamente separati.

Ogni flusso di dati ha la possibilità di impostare [BufferTempStoragePath e BlobTempStoragePath 2 . Approfittate di questo e mettetelo su un'unità con spazio sufficiente

Infine, aggiungi più RAM. Se non riesci a rendere il pacchetto migliore facendo quanto sopra, getti altro hardware e fallo.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow