Richiamo stored lunga

mercoledì 23 febbraio 2011 - 17.39
Tag Elenco Tags  C#  |  .NET 2.0  |  Visual Studio 2008  |  Oracle 10g

paglio Profilo | Newbie

Ciao a tutti
sto richiamando da codice una stored procedures che dura parecchio tempo (fino a 2 ore), utilizzando il comando
conn.Open();
..
cmd.ExecuteNonQuery();
..
conn.Close();

Il mio obiettivo è quello di poter subito rientrare nella pagina (tramite menu), mentre ora per qualche minuto la pagina rimane bloccata.
Oltretutto uscendo forzatamente dalla pagina la connessione non si chiude.

Come posso ovviare a questi problemi?

Grazie
Lorenzo

alx_81 Profilo | Guru

>Ciao a tutti
Ciao

>sto richiamando da codice una stored procedures che dura parecchio
>tempo (fino a 2 ore), utilizzando il comando
oddio mio.. è veramente un tempo lunghissimo! Ma sei sicuro che la stored procedure sia lo strumento più indicato? E' ottimizzata? Davvero due ore sono troppe, per qualunque elaborazione..
Che ne dici di parlarci della situazione reale per capire se è possibile trovare una tecnica/tecnologia migliore?

>Il mio obiettivo è quello di poter subito rientrare nella pagina
>(tramite menu), mentre ora per qualche minuto la pagina rimane
>bloccata.
Devi cambiare approccio, di sicuro non puoi permetterti di eseguire così in sincrono.
O fai un processo separato ma via web rischi di perderti sul server, oppure penserei di scrivere un servizio che gira sul server ed effettua le operazioni. Di sicuro non farei il tutto appeso ad una connessione sul web server.

>Oltretutto uscendo forzatamente dalla pagina la connessione non si chiude.
E dopo poco il server ti dice "busy" se hai un numero di utenti che ti aprono n connessioni.
Cerchiamo di cambiare approccio.. ma prima dobbiamo capire la situazione reale.

>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

paglio Profilo | Newbie

grazie per la risposta. La stored non è stata creata da me, mi sono chiesto anch'io se non sia possibile ottimizzarla ma non è un lavoro che posso fare adesso.. ora dovrei trovare, se possibile, un modo di far funzionare il tutto: richiamare la Stored da una pagina web, ed avere la possibilità di rientrare nella pagina. Fosse una chiamata asincrona andrebbe benissimo (ma non so se e come si possa fare).
il problema del 'busy' non dovrebbe sussistere, nel senso che fino al termine dell'elaborazione non permetto un ulteriore richiamo (tramite una tabella di log posso vedere se la SP sta ancora giando o se ha terminato), ma vorrei riuscire almeno a dare un messaggio di impossibilità a procedere.


alx_81 Profilo | Guru

>grazie per la risposta. La stored non è stata creata da me, mi
>sono chiesto anch'io se non sia possibile ottimizzarla ma non
>è un lavoro che posso fare adesso.. ora dovrei trovare, se possibile,
>un modo di far funzionare il tutto: richiamare la Stored da una
>pagina web, ed avere la possibilità di rientrare nella pagina.
>Fosse una chiamata asincrona andrebbe benissimo (ma non so se
>e come si possa fare).
Per fare la chiamata asincrona puoi usare javascript. Se hai visual studio puoi sfruttare l'ajax toolkit di MS oppure usare un framework javascript e utilizzare le sue API per fare la chiamata asincrona. Ad esempio, con jQuery, puoi usare il metodo $.post:
http://api.jquery.com/jQuery.post/
Ogni tanto refreshi un pannello con una simil progress bar che ti dice a che punto sei con l'esecuzione della sp (se hai le politiche per capire a che punto è, come il tuo log della sp)

>il problema del 'busy' non dovrebbe sussistere, nel senso che
>fino al termine dell'elaborazione non permetto un ulteriore richiamo
>(tramite una tabella di log posso vedere se la SP sta ancora
>giando o se ha terminato), ma vorrei riuscire almeno a dare un
>messaggio di impossibilità a procedere.
In tal caso, potresti dare una callback ogni volta che leggi lo stato della suddetta progress bar rendendo nascosto a server il pulsante di esecuzione. E solo quando la sp ha finito, rimostrarlo. In tutto questo noterai che serve una sorta di polling lato client.


--
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
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