SSIS e Transazioni - Lentezza dataFlow

martedì 03 aprile 2012 - 12.36
Tag Elenco Tags  SQL Server 2008 R2

the_driver Profilo | Senior Member

Ciao a tutti, sto implementando un pacchetto SSIS per migrare dati da un DB sql server 2008 r2 ad un altro db sql serv 2008 r2.

Siccome questo pacchetto sarà schedulato di notte, pensavo di gestire i vari blocchi utilizzando le transaction , in quanto non vorrei creare problemi sul DB di destinazione.

Dopo aver letto la wiki di Alex81 su MSDN , ho creato un pacchetto SSIS e ho impostato il TransactionOption a Required.


Quindi ho inserito un blocco sequence container con transactionOption Supported .

All'interno del blocco sequence container, ho iniziato ad inserire SqlTask component e DataFlow sempre con transactionOption Supported.

Ho notato però che quando va in esecuzione il primo DataFlow, il componente diventa giallo senza vedere transazioni. Dopo qualche minuto il componente è ancora nello stato giallo e VisualStudio rimane "bloccato" in debug.


Ho provato a riavviare il package impostando , a livello di package, TransactionOption a Supported. Cosi facendo il pacchetto non ho avuto problemi di lentezza (OVVIAMENTE, LE TRANSAZIONI IN QUESTO MODO ERANO OFF ....)


Secondo voi cosa sbaglio? E' normale che per trasferire dati ci sia tutta questa lentezza?????? grazie




alx_81 Profilo | Guru

Ciao

>Ho notato però che quando va in esecuzione il primo DataFlow,
>il componente diventa giallo senza vedere transazioni. Dopo qualche
>minuto il componente è ancora nello stato giallo e VisualStudio
>rimane "bloccato" in debug.
hai guardato il process explorer per capire cosa sta facendo il SSIS?

>Ho provato a riavviare il package impostando , a livello di package,
>TransactionOption a Supported. Cosi facendo il pacchetto non
>ho avuto problemi di lentezza (OVVIAMENTE, LE TRANSAZIONI IN
>QUESTO MODO ERANO OFF ....)
>Secondo voi cosa sbaglio? E' normale che per trasferire dati
>ci sia tutta questa lentezza??????
potrebbe essere che sia il prepare dei comandi, il caching, dipende poi cosa hai nel dataflow.
Se usi R2 dovresti avere la gestione dei lookup, ad esempio, di molto ottimizzata..
prova a spiegare cosa fai all'interno di quel data flow.

>grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

the_driver Profilo | Senior Member

Come faccio a vedere cosa sta accadendo in SSIS? Se guardo sotto explorer vedo che mi dice

Information: Starting distributed transaction for this container.


e poi rimane in giallo .....


La dataflow legge N records e li invia in una tabella di destinazione

alx_81 Profilo | Guru

>Come faccio a vedere cosa sta accadendo in SSIS? Se guardo sotto explorer vedo che mi dice

>Information: Starting distributed transaction for this container.
sembra che sia fermo sull'handshaking per il DTC..
hai provato a fare un'operazione distribuita direttamente da management studio da quel server all'altro?
Così vedi se va tutto a priori..


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

the_driver Profilo | Senior Member

Ora sono in ambiente di test . Entrambi i database sono presenti nella stessa istanza sql server.

Come posso testare questa cosa?

the_driver Profilo | Senior Member

Ciao Alex, ho fatto una modifica al progetto.

A livello di package ho impostato SUPPORTED

Quindi ho creato un container con all'interno i soli SQL TASK (questi task mi creano tabelle temporanee e vengono popolate)

Questo container è impostato come REQUIRED e tutti gli SQL TASK sono con Supported

A questo container ho collegato un nuovo container che contiene tutti i dataflow. Idem come sopra , container impostato come REQUIRED e DATAFLOW come Supported.

Eseguendolo non mi va in blocco.

Se però imposto anche il package su Required, eseguendolo va in blocco.(il primo dataflow che trova nel container task rimane giallo).


DOMANDONA: ma se imposto required, non viene mica creata una transazione specifica e isolata dalle eventuali alrtre required???? ?

alx_81 Profilo | Guru

>Eseguendolo non mi va in blocco.
così non ti seguo.. purtroppo senza il SSIS davanti è dura..

>DOMANDONA: ma se imposto required, non viene mica creata una
>transazione specifica e isolata dalle eventuali alrtre required?????
required significa che se non è stata specificata una transazione, la crea il task, altrimenti esso sottoscrive quella preesistente.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

the_driver Profilo | Senior Member

Ti allego immagine flusso:



286x506 16Kb

alx_81 Profilo | Guru

>Ti allego immagine flusso:
il fatto è che se tu imposti a required, il task dovrebbe sottoscrivere la stessa transazione. Se invece sta fermo lì, solo nel caso in cui la transazione venga creata ex novo, significa che per qualche motivo, in base anche al messaggio che mi hai passato, la transazione viene promossa come distribuita. Mi sorge spontanea una domanda.. Hai provato a vedere se il dtc locale è attivo? Secondo me è un problema simile a quello del transaction scope con più connection string (.net)..
Per verificare vai sui component services e da lì scegli nel tree il DTC locale. Destro --> proprietà e in tab sicurezza metti attivo in inbound e outbound il servizio.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

the_driver Profilo | Senior Member

Allora ecco come è impostato:


464x500 19Kb


Ho riavviato il servizio ,quindi ho rifatto andare il package SSIS.


1444x900 127Kb


A livello di package transaction è impostato a supported.

Ogni Container è impostato su required.

la tabella in cui rimane in standby trasferisce pochi record, circa 2500 .

Cosa sbaglio?

the_driver Profilo | Senior Member

Ovviamente appena imposto tutti gli elementi su Supported, il package funziona bene ed è veloce

the_driver Profilo | Senior Member

Stranezza: ho cambiato l'ordine di esecuzione dei dataflow all'interno del container,ho notato che si "inchioda" sempre e solo su 2 (il primo è proprio quello in giallo nell'immagine). Gli altri Data flow vengono eseguiti correttamente.

Da cosa può dipendere? dalla numerosità dei campi (colonne) letti dalla query ????

Cosa posso controllare?

Intanto ho ANCHE FATTO QUESTA PROVA: mentre era in running, ho fermato il servizio sqlserver. ecco il risultato




636x601 24Kb


si inchioda in quanto non riesce a collegardi all'OLE DB destination ... potrebbe essere il problema che si presenta durante il running del package????? però non dovrebbe diventare subito rosso?? come mai invece con gli altri Dataflow funziona?

the_driver Profilo | Senior Member

Forse ho risolto:

ho impostato nei dataflow incriminati la proprietà OpenRowset Using FastLoad sui componenti OLEDB destination.


Secondo voi ho fatto bene?

La transazione viene mantenuta correttamente????


Grazie!

alx_81 Profilo | Guru

>Forse ho risolto:
>ho impostato nei dataflow incriminati la proprietà OpenRowset
>Using FastLoad sui componenti OLEDB destination.
La FastLoad da sola dovrebbe essere usata per i dati basati su double-byte character set. Hai casi di questo tipo?
Usata con OpeRowSet dovrebbe essere necessaria se accedi al modello ad oggetti del data flow programmaticamente..
ma questi sembrano semplici dataflow.

>Secondo voi ho fatto bene?
>La transazione viene mantenuta correttamente????
non dovrebbe impattare in alcun modo sulla transazione, serve solo per la gestione dei casi particolari di cui sopra..
Mi sembra strano però che si blocchi in quel modo.. non hai a che fare con piattaforme non sql server..
Hai provato su altre macchine?

>Grazie!
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

the_driver Profilo | Senior Member

al momento non ho provato su altre macchine.

ti faccio sapere appena migro la soluzione

grazie
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5