2011-09-12 16 views
5

Ho database cca 25 che ho bisogno di consolidare in 1 database. Per prima cosa ho cercato di costruire un pacchetto SSIS che copiare tutti i dati da ogni tabella in un unico luogo, ma poi ho ottenuto l'errore:SSIS - errore di memoria esaurita

Information: The buffer manager failed a memory allocation call for 10485760 bytes, but was unable to swap out any buffers to relieve memory pressure. 1892 buffers were considered and 1892 were locked. Either not enough memory is available to the pipeline because not enough are installed, other processes were using it, or too many buffers are locked.

poi ho capito questo non è buona idea e che ho bisogno di inserire solo i nuovi record e aggiornare quelli esistenti. Dopo che ho provato questa opzione:

  • Ottenere un elenco di tutti i conn. stringhe
  • foreach db, copiare nuovi record e aggiornare quelli esistenti (quelli che devono essere aggiornati copia dalla sorgente alla tabella temporanea, eliminarli dalla destinazione e copiare da temp tabella di destinazione)

enter image description here

Ecco come flusso di dati sembra

enter image description here

In alcuni casi i dati fluiscono procceses più di milioni di righe. MA, ho ancora lo stesso errore: esaurito la memoria.

Nel task manager la situazione è la seguente:

enter image description here enter image description here

devo notare che ci sono 28 banche dati di essere replicati su questo stesso server e quando questo pacchetto non è in esecuzione SQL server utilizza ancora più di 1 GB di memoria. Ho letto che è normale, ma ora io non sono così sicuro ...

Ho installato hotfix per SQL Server ho trovato in questo articolo: http://support.microsoft.com/kb/977190 Ma non aiuta ... Sto facendo qualcosa di sbagliato o questo è solo il modo in cui funzionano le cose e suppongo di trovare una soluzione alternativa?

Grazie,
Ile

+0

cosa hai oscurato? un processo "segreto"? –

risposta

1

ho trovato una soluzione e il problema è stato in SQL Server - si stava consumando troppa memoria. Per impostazione predefinita, la memoria massima del server è stata impostata su 2147483647 (questo è il valore predefinito). Poiché il mio server ha una RAM da 4 GB, ho limitato questo numero a 1100 MB. Da allora, non ci sono stati problemi di memoria, ma i miei compiti di flusso sono stati molto lenti. Il problema era nell'utilizzare la ricerca. Per impostazione predefinita, Ricerca seleziona tutto dalla tabella Ricerca: l'ho modificato e ho selezionato solo le colonne di cui ho bisogno per la ricerca: ha fissato il processo più volte.

Ora l'intero processo di consolidamento richiede circa 1: 15 ore.

3

Si potrebbe incorrere in problemi di memoria se la trasformazione Ricerca è impostato per la cache completa. Da quello che ho visto, la Merge Join si comporta meglio della trasformazione Ricerca se il numero di righe supera i 10 milioni.

Dai uno sguardo a quanto segue in cui ho spiegato le differenze tra Merge Join e Lookup transformation.

What are the differences between Merge Join and Lookup transformations in SSIS?

+0

Non vedo come utilizzare Merge Join per aggiornare le righe ...Vorrei provare anche questo metodo, ma mi manca la parte per l'aggiornamento ... Grazie! –

Problemi correlati