Dfferenze pazzesche tra ssis e stored

martedì 03 novembre 2009 - 10.39

memmo77 Profilo | Expert

Ho effettuato la stessa operazione di select fetch e update sia da strored che da ssis.
L'unica differenza è che il ssis è in locale da me e lo lancio con visual studio.
Nella stored metto tutto su una temporanea e poi faccio l'update, il tutto in circa 30n secondi.
Nel ssis, anche se faccio il solo ciclo dei record selezionati, circa 15000, ci mette ben 1 minuto e 46 secondi.
Anzi per cercare di migliorarlo, visto che potevo ho diviso in due blocchi le select e i cicli. Allego un'immagine per far capire meglio cosa dico. Grazie


737x388 122Kb

alx_81 Profilo | Guru

>Nella stored metto tutto su una temporanea e poi faccio l'update, il tutto in circa 30n secondi.
30nano? o 30 secondi? Ora, non so la situazione reale, ma già 30 secondi sono tantissimi per una stored. Se ragioni a set, con buoni indici, dovrebbe volare.

>Nel ssis, anche se faccio il solo ciclo dei record selezionati, circa 15000, ci mette ben 1 minuto e 46 secondi.
eh beh, si tratta di cicli e di cursori, che seppur veloci, impiegano tempo anche a fare caching dei dati in memoria. Anche 1.46 è un'eternità.
Il caso reale qual è? vediamo di capire se stai seguendo la strada giusta. SSIS forse è troppo per il tuo problema.

>Grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

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

memmo77 Profilo | Expert

>30nano? o 30 secondi? Ora, non so la situazione reale, ma già 30 secondi sono tantissimi per una stored. Se ragioni a set, con buoni indici, dovrebbe volare.
Impiega 30 secondi. Gli indici ci sono. Cosa intendi per set? Io faccio una select di quello che mi serve, faccio una fetch per ciclarli , faccio un paio di controlli, ma niente di che, infine la metto su una temporanea e poi faccio l'update.

>eh beh, si tratta di cicli e di cursori, che seppur veloci, impiegano tempo anche a fare caching dei dati in memoria. Anche 1.46 è un'eternità.
Nel ssis faccio la stessa cosa. Solo che non metto i dati su una temporanea. Come vedi dall'immagine la parte dell'update l'ho disabilitata. Credevo fosse quella che, facendo un update record per record mi rallentasse tutto. Ma anche disabilitando quel task, il solo ciclo ci mette il tempo che ti ho detto

>Il caso reale qual è? vediamo di capire se stai seguendo la strada giusta. SSIS forse è troppo per il tuo problema.
Il caso è anche semplice, faccio una select, verifico per ogni record un campo della tabella, se zero, ci metto quello del record precedente. Infine faccio un update.

Grazie ciao

alx_81 Profilo | Guru

>Il caso è anche semplice, faccio una select, verifico per ogni
>record un campo della tabella, se zero, ci metto quello del record
>precedente. Infine faccio un update.
sicuro che serva ciclarli? prova a spiegare bene e in dettaglio la situazione reale, magari con una update risolvi tutto senza cursori o altro.
--

Alessandro Alpi | SQL Server MVP

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, provo a dirti cosa mi serve. Ho questa situazione, da una prima select:

DATA_TRIM FK_ID_SOGGETTO
---------- --------------
1999-09-30 1
2000-09-30 1
2001-09-30 1
2002-09-30 1
2003-12-31 1
2004-12-31 1
2005-03-31 1
2006-12-31 1
2008-06-30 1
2009-03-31 1
2000-12-31 2
2001-12-31 2
2002-03-31 2
2003-06-30 2
2004-12-31 2
2005-12-31 2
2006-06-30 2
2007-03-31 2
2008-12-31 2
2004-12-31 3
2006-03-31 3
2007-06-30 3
2008-06-30 3
2007-12-31 4
2008-12-31 4
2001-12-31 5
2002-12-31 5
2003-12-31 5
2004-06-30 5
2005-06-30 5
2006-09-30 5
2007-12-31 5
2009-03-31 5
1999-03-31 6
1999-09-30 6
2001-09-30 6
2003-06-30 6
2006-06-30 6
2008-03-31 6
1999-12-31 7
2004-09-30 7
2007-06-30 7
.....

Devo riempire i buchi mancanti. es prendo gli ultimi due record:

2004-09-30 7
2007-06-30 7

Qui mancano:

2004-12-31 7
2005-03-31 7
2005-06-30 7
2005-09-30 7
2005-12-31 7
2006-03-31 7
2006-06-30 7
2006-09-30 7
2006-12-31 7
2007-03-31 7

Tutti questi record avranno come valori quelli corrispondenti alla data:

2004-09-30 7


Mi spiego meglio, l'anno è composto dai periodi 03-06-09-12-anno. Quindi ogni anno, 4 analisi. Se trovo un periodo mancante, lo devo inserire con lo stesso valore del precedente.
Ho provato a ricostruire i periodi mancanti ciclandoli in un ssis selezionando con una top 1 ordinato per la data maggiore, il record precedente. Solo risulta estremamente lento. Considerate che mi produce circa 87000 record.
Come potrei risolvere?
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5