Integration services file da 1,2 gb

giovedì 10 aprile 2008 - 10.23

memmo77 Profilo | Expert

Tramite integration services sono riuscito a creare un file ci 1,2 gb circa, che contiene una grande mole di INSERT.
Tornato sul Control Flow, ho provato a darlo in "pasto" ad sql server 2005 tramite l'oggetto attività esegui sql, passandogli direttamente il file. Sql va in out of memory.
Facendo una prova con lo stesso file ma con pochissimi record, sql effettua gli inserimenti tranquillamete. Allora ho provato a dividere il mio file in percetuale (2%) creando un + sottofile da circa 20 mb ma anche così Sql va in out of memory.
Ciclandolo invece, ed effettuando l'insert di un record alla volta, effettivamente non ci sono problemi, il ssis inserisce ma richiede tempi davvero troppo lunghi.
Come posso risolvere? Grazie

lbenaglia Profilo | Guru

>Come posso risolvere? Grazie
Proviamo ad affrontare il problema da un altro punto di vista: che cosa ti ha portato a generare un file di 1,2GB contenente i comandi di INSERT?
Spiegaci dettagliatamente le tue esigenze in modo da individuare delle soluzioni alternative.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>Ciclandolo invece, ed effettuando l'insert di un record alla
>volta, effettivamente non ci sono problemi, il ssis inserisce
>ma richiede tempi davvero troppo lunghi.
SSIS non fa insert ciclando, a meno che tu non cicli proprio quel file che hai prodotto.
Forse non l'hai usato a dovere .

Come dice Lorenzo, dacci più dettagli e proviamo alternative

Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Allora. Io ho un file da 300 mb circa contenete delle informazioni. Ogni record può produrre n inserimenti.
Diciamo che una parte del record è fissa (padri), e va a finire su una tabella. La parte rimanente (figli), produce n inserimenti a seconda del record selezionato.
Questi vengono determinati da una una tabella sql che mi dice il numero di "figli" ha il record.

Da qui la creazione di un file che contiene:

n record (quelli del file da 300 mb) per i padri
n record (i figli di dei padri)

Il tutto messo in un unico file che viene da 1,2 gb contente gli insert dei padri e dei figli.

>>SSIS non fa insert ciclando, a meno che tu non cicli proprio quel file che hai prodotto.
a dire il vero ho ciclato una variabile object che riempivo prima di riempire il file e per ogni ciclo facevo un inserimento.

>>Forse non l'hai usato a dovere .
Forseeeee di sicuro

Grazie

lbenaglia Profilo | Guru

>Allora. Io ho un file da 300 mb circa contenete delle informazioni.
In che formato sono quelle "informazioni"? CSV? Altro?

>Da qui la creazione di un file che contiene:
>
>n record (quelli del file da 300 mb) per i padri
>n record (i figli di dei padri)
>
>Il tutto messo in un unico file che viene da 1,2 gb contente
>gli insert dei padri e dei figli.
Non mi sembra una buona idea.
Perché non generare un file CSV per i padri e un altro per i figli?
In questo modo tramite una banale BULK INSERT potrai importare in modo efficiente tutti i dati.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>Allora. Io ho un file da 300 mb circa contenete delle informazioni.
>Ogni record può produrre n inserimenti.
>Diciamo che una parte del record è fissa (padri), e va a finire
>su una tabella. La parte rimanente (figli), produce n inserimenti
>a seconda del record selezionato.
>Questi vengono determinati da una una tabella sql che mi dice
>il numero di "figli" ha il record.

>a dire il vero ho ciclato una variabile object che riempivo prima
>di riempire il file e per ogni ciclo facevo un inserimento.
Questa non è la via da seguire per sfruttare le potenzialità di SSIS.
Se puoi, preleva i dati direttamente via OLEDB e poi utilizza dei dataflow per andare ad inserire i record direttamente in una OLEDBDestination (facendo attenzione a determinare il rows per batch e ad attivare il FastLoad per evitare l'attesa sulla commit di transazioni troppo grandi).
All'interno del dataflow avrai la possibilità di definire le logiche di split che ti servono, senza per forza passare da file.
>
>Grazie
di nulla!

Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Ok sembra buona come soluzione. Faccio delle prove e ti faccio sapere ;).Grazie mille

alx_81 Profilo | Guru

>Ok sembra buona come soluzione. Faccio delle prove e ti faccio
>sapere ;).Grazie mille
Di nulla!

Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5