Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Dfferenze pazzesche tra ssis e stored
martedì 03 novembre 2009 - 10.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
memmo77
Profilo
| Expert
683
messaggi | Data Invio:
mar 3 nov 2009 - 10:39
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
8.814
messaggi | Data Invio:
mar 3 nov 2009 - 10:47
>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
683
messaggi | Data Invio:
mar 3 nov 2009 - 10:58
>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
8.814
messaggi | Data Invio:
mar 3 nov 2009 - 11:09
>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
683
messaggi | Data Invio:
mer 4 nov 2009 - 12:02
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
Torna su
Stanze Forum
Elenco Threads
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 !