Sito con connessione al MySQL che va ad intermittenza

lunedì 19 marzo 2012 - 16.45
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  MySQL 5.0  |  Firefox

ravalon Profilo | Expert

SAlve, ho appena pubblicato un sito che sfrutta ASP.NET 4.0 e MySQL.

In locale funziona tutto alla perfezione ma in remoto il sito ha un comportamente strano...
Navigo per qualche pagina e vedo tutti i dati estratti dal database...poi o che io torni sulle pagine precedenti o che ne carichi di nuove, non vedo più i dati ma solo la struttura come se non li caricasse...

Sospetto che manchi per qualche ragione il collegamento al database ogni poco tempo (questione di nemmeno un minuto se navigo velocemente o se refresho una pagina)...

Non ottengo alcun errore, solo la mancanza dei dati....

Mi collego tramite un driver ODBC 3.51 di MySQL dato che essendo un server vecchio non posso sfruttare il 5.1 inoltre avendo PLESK come pannello di amministratore non posso usare al momento connector .NET...

La domanda è....secondo voi cosa accade ? E', come io penso ed ho esposto ai gestori del server, una connessione al db che fa schifo per qualche motivo ?? Posso fare dei tentativi per vedere se ho sbagliato qualcosa ? Eppure in locale va tutto bene sia usando il webserver Cassini che usando direttamente IIS....

Ultima cosa...il sito è precompilato e messo sul server...

alx_81 Profilo | Guru

>Sospetto che manchi per qualche ragione il collegamento al database
>ogni poco tempo (questione di nemmeno un minuto se navigo velocemente
>o se refresho una pagina)...
mmmmmh.. prenderesti una sqlexception. La gestisci oppure se hai eccezione prendi il classico errore? Se non l'hai gestita con altro e se hai un errore sql, prendi la sqlexception e s e non sopprimi l'errore devi vedere il messaggio di errore, se di errore si trattasse.

>La domanda è....secondo voi cosa accade ? E', come io penso ed
>ho esposto ai gestori del server, una connessione al db che fa
>schifo per qualche motivo ?? Posso fare dei tentativi per vedere
>se ho sbagliato qualcosa ? Eppure in locale va tutto bene sia
>usando il webserver Cassini che usando direttamente IIS....
intanto in locale prova IIS come immagino usi il provider.
Poi, direi che controllerei più qualcosa a livello di scripting client, server..
Sembra più un comportamento di logica di business. Hai fatto uso di ajax? Ci sono casi in cui per qualche motivo svuoti le sorgenti?
Sei certo che non possa verificarsi una cosa del genere nel caso in cui non si sincronizzi qualcosa (vedi i tempi diversi sulla tua macchina rispetto al server)?
Potrebbe essere un timeout o un errore di un js.. hai attivato la console di debug del browser (tipo firebug, ecc)?


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

ravalon Profilo | Expert

Ciao e grazie per la risposta...

I blocchi di codice sono gestiti con i costrutti TRY - CATCH, ovunque, ma in caso di errore mi faccio scrivere lo stesso su un file di testo e non vi ho trovato nulla...

Il sito usa AJAX si , sia ajax base che tramite controlli del AJAX control Toolkit.... a questo punto non so come catturare l'errore.... abilitare il debug una volta compilato serve a qualcosa ?
Come faccio ad abilitare il debug sul browser ? io uso firefox....


***************************************
AGGIORNAMENTO
***************************************

Io utilizzo questo modus operandi generale...
1) creo un nuovo oggetto per la classe Connessione
2) Apro la connessione col database
3) Estraggo i dati e li visualizzo
4) Distruggo l'oggetto della classe Connessione creato e svuoto i dati (intesi come datareader)

NElla masterpage però questo giro avviene più volte, ho diverse estrazioni di dati da sub diverse....sarà quello che crea una eccessiva richiesta di connessioni ??

Posto un esempio di una sub dentro la masterpage...

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

***********************************
ULTERIORE AGGIORNAMENTO
***********************************

In alcune occasioni, anche in locale su IIS e non su Cassini, ho ottenuto un messaggio TOO MANY CONNECTION....mi pare strano dato che stavo refreshando continuamente la stessa pagina, quante connessioni potevano mai essere sospese...
...inoltre io uso la connessione, la chiudo, chiudo i dati e chiudo gli oggetti che hanno usati questi elementi ad ogni sub....

...non so come risolvere sto guasto....

Vorrei inoltre domandare se è corretto dopo ogni uso di una connessione chiuderla anche se subito dopo devo riutilizzarla (ad esempio se in una pagina ho 10 operazioni di lettura dei dati da sub diverse) oppure se è meglio come logica lasciarla aperta senza richiamare implicitamente la chiusura alla connessione.

ravalon Profilo | Expert

Ho aggiunto delle info importanti sul precedente thread.... Se per favore Alx_81 mi ci dai un occhio te ne sarei eternamente grato perchè sono un po in ristrettezze di tempo..il sito è pubblicato e non gira affatto bene e il cliente (un mio amico) è insoddisfatto ovviamente.....scusa se mi sono permesso di sollecitare, siete una grande comunità e vi apprezzo comunque

ravalon Profilo | Expert

Salve di nuovo ragazzi.... ci sono novità..

dopo tentativi apocalittici di modifiche al codice, mi è venuto in mente di tentare di monitorare le connessioni in atto....ebbene....ogni pagina mi carica 3 connessioni diverse che non cadono mai !! E' come se non venissero distrutte ma io ho chiamato la chiusura della connessione subito dopo ogni suo utilizzo....

Alla fine ho tante connessioni aperte fino a che non crasha tutto...

É normale che rimangano appese? Per caso le svuota ogni tot connessioni aperte da solo o dovrei avere sempre una situazione di pulizia?

Quindi l'errore in qualche modo è mio...ma come posso risolverlo ???

alx_81 Profilo | Guru

>dopo tentativi apocalittici di modifiche al codice, mi è venuto
>in mente di tentare di monitorare le connessioni in atto....ebbene....ogni
>pagina mi carica 3 connessioni diverse che non cadono mai !!
>E' come se non venissero distrutte ma io ho chiamato la chiusura
>della connessione subito dopo ogni suo utilizzo....
>Alla fine ho tante connessioni aperte fino a che non crasha tutto...
Questa è una delle prime cose da guardare, soprattutto quando il server ti torna un "TOO MANY CONNECTION".
Il debug e il troubleshooting sono quelle cose i cui risultati aiutano perfettamente a capire dove intervenire.

>É normale che rimangano appese? Per caso le svuota ogni tot connessioni
>aperte da solo o dovrei avere sempre una situazione di pulizia?
Non è per niente normale che rimangano aperte, perchè ciò significa che non scalerà mai il tuo sito, anzi, si accumuleranno richieste che rimangono per sempre in stato di pending.
L'unica è fare per bene code inspection e utilizzare tutte le best practices per gestire le connessioni. Ad esempio, utilizza il costrutto USING per gestirle (http://msdn.microsoft.com/it-it/library/yh598w02(v=vs.100).aspx). Chiudi sempre subito le connessioni e fanne il dispose (using lo fa implicitamente) non appena torni i tuoi resultset.
Il tuo problema sono a mio avviso le disallocazioni. Vedrai che using e disposing di certo ridurranno il problema o lo elimineranno se non hai troppi accessi per il server che hai.
--
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

ravalon Profilo | Expert

Ti ringrazio della risposta ma ho risolto come indicato in altra discussione su questo medesimo forum

http://www.dotnethell.it/forum/messages.aspx?ThreadID=40697
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