179 messaggi dal 13 febbraio 2004
salve a tutti

ho uno scenario un pò tosto da gestire.

in pratica effettuo delle statistiche di vendita di articoli, su un db SQL2000 con una SP che effettua un group da una prima select di oltre 1 milione di righe.

il primo problema è il TimeOut di SQL, infatti la SP ci impiega 36secondi a estrapolare le righe, di conseguenza ho dovuto aumentarlo.

secondo problema è che ho dovuto anche attivare il caching del SQLdataSource , altrimenti ad ogni postback di paginazione, ci volevano 40 e passa secondi.

Ho impostato comunque un tempo di circa 5 minuti.

Nella stessa paginew però ho due calendar che selezionano il periodo di analisi.

di conseguenza in questo caso il Datasouce dovrebbe cambiare.

Come faccio a far scadere la chache?

grazie a tutti

PS. ogni tanto comunque va ugualmente in timeout, ma la durata va impostata solo nella connection string giusto?


Modificato da cristian0579 il 22 luglio 2008 15.17 -
Per il timeout, ovviamente la prima è cosa è ottimizzare la query ma su questo devi vedere te. Nella connecion string aumenti il timeout di connessione, non quello di esecuzione. Per questo devi agirare sulla proprietà CommandTimeout del SqlCommand.
Per la cache, il motore crea una chiave in funzione dei vari parametri di cache. La invalida se cambi uno di questi parametri. Quindi a questo punto è meglio se abbandoni il SqlDataSource e fai te la chiamata alla SP, così gestisci te la cache con una tua chiave, andandola eventualmente a rimuoverla quando non ti serve più.

Ciao

Il mio blog
Homepage
179 messaggi dal 13 febbraio 2004
si pensavo anche io di abbandonare il datasource

non mi è operò chiaro il concetto della chiave della cache, come faccio ad invalidarla?
L'oggetto HttpRuntine.Cache ha i metodi Add/Insert e Remove per aggiungere o rimuovere elementi in cache in base ad una chiave. Tu genera la chiave in funzione di certi parametri e poi usa quei metodi per togliere e mettere

Ciao

Il mio blog
Homepage
Ciao,

visto che i dati vengono "paginati" potresti risolvere tutto con un PagedDataSource. Dai un occhio qui: http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.pageddatasource(VS.80).aspx

Fabrizio Canevali
40 messaggi dal 07 gennaio 2008
Come dice Fabrizio Canevali,
visto che pagini, pagina :D

Cerca un pò su google, in pratica devi modificare la tua SP in modo tale da passargli la pagina attuale, la pagina dove stai andando (quando l'utente clicca sul numero pagina) e il numero di elementi da visualizzare nella pagina.

Così facendo farai delle select mirate, stresserai meno il db e viaggeranno meno dati.
179 messaggi dal 13 febbraio 2004
Salvodif ha scritto:
Come dice Fabrizio Canevali,
visto che pagini, pagina :D

Cerca un pò su google, in pratica devi modificare la tua SP in modo tale da passargli la pagina attuale, la pagina dove stai andando (quando l'utente clicca sul numero pagina) e il numero di elementi da visualizzare nella pagina.

Così facendo farai delle select mirate, stresserai meno il db e viaggeranno meno dati.



attualmente per questa griglia ho utilizzato un controllo di terze parti in particolare gli asp ajx controls della Teletik.

pensavo di usare la loro gaginazione.

PErò in effetti invece di usare la cache, visto che il db è SQL2000 e di conseguenza non se ne parla di inserirgli delle dipendenze in cache con i triger.

Forse spostare l'onere della paginazione al db è la soluzione migliore.

non mi sono mai trovato in questa situazione, se ho capito bene consigli alla quesry di utilizzare "TOP n righe" al binding della griglia e ai sucessivi eventi di paginazione

Ma come faccio?

grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.