Aumento Esponenziale connessioni al DB

ciao a tutti, ho un problema serio che mi sta affliggendo.

in una webapp ho una dashboard che, tramite timer, si aggiorna ogni tot sec.
per aggionarsi, effettua delle query ad un db MS SQL SERVER 2016 Express e riempie delle listbox.

Capita che dopo un tot il numero di connessioni al db cresca cosi tanto da mandarmi in crash la rete del pc su cui è installata l’applicazione.

Inizialmente la connessione al db era messa prima del momento in cui effettuavo la query (if db.connect…) e chiusa (db.close) al termine del riempimento della listbox.

Poi, pensando fosse quello il problema, ho messo la connessione db alla open della session e la close alla chiusura della sessione, ma le connessioni comunque aumentano di tanto, cosa può essere?

PS è un problema che avevo già segnalato qui

ma avevo risolto riavviando il servizio ogni notte, ora invece si presenta dopo un paio di ore…

Ciao Ciro,

Dovresti provare a fare una cosa di questo tipo:

  1. Usi il Connect solo la prima volta che starti l’app

  2. Ogni volta che il timer esegue la query controlli se da errore (ad esempio su Mysql il codice di errore per la perdita di connessione è 2013)

  3. Se viene riscontrato tale errore allora richiami il connect e ripeti la query

Se il timer aggiorna abbastanza spesso i dati ti evita di continuare a chiamare il connect ogni volta. Io utilizzo MySQLCommunityServer e non ho avuto questi problemi quindi non ti so dire se c’è qualche bug su MS SQL.

il connect è nella session open, dovrebbe partire solo una volta x utente…invece ne trovo diversi dallo stesso ip.

il timer viene lanciato (enabled) alla open della form principale (che contiene il dash).
ed è impostato su mode.multiple

la query non dovrebbe andare in errore perchè vedo i risultati a video che si aggiornano correttamente.

Molto strana come cosa… ma tutte le sessioni utilizzano lo stesso database o ogni sessione ha bisogno di accedere a un database diverso?
Se utilizzano lo stesso database puoi spostare l’inizializzazione del db nell’App e non nella Session in modo che tutti utilizzano la stessa connessione. Così facendo puoi provare a vedere se l’errore è legato ai riferimenti della sessione oppure no.

Non avendo un codice di riferimento faccio fatica ad aiutarti …

sì, il db è sempre lo stesso,

secondo me è il timer che crea ogni volta nuove connessioni (ho l’evento Action triggerato ogni 10 sec).

qui è dove viene inizializzato

posso provare a spostarlo nella session

Non penso che il problema sia la dichiarazione del timer …

ok, però io mi trovo in pochi minuti questa situazione e mi sta creando problemi, a nessuno con MS SQL è mai successo?

Purtroppo non so come aiutarti senza avere altre informazioni. Bisognerebbe capire come hai inizializzato le connessioni, come le usi ecc… Se nessun altro ha avuto problemi con MS SQL non penso sia un bug. Puoi provare a cercare sul feedback oppure provare a scorporare la parte del programma che non funziona in un progetto di test.

prima mi collegavo al db nei vari metodi, facevo le mie query (non faccio mai insert/update, solo select) e poi prima della fine del metodo chiudevo con db.close.

Ho spostato qui la connessione al db

e poi quando nei metodi devo fare le query, faccio così:

Molto probabilmente fai qualche casino con i riferimenti al database. Crea una proprietà nell’app e chiamala db o icamdb. Il tuo codice nell’evento open dell’app diventa

db = new MSSQLServerDatabase
db.host =""
...

if not db.Connect then
 dai errore
end if

Mentre nel metodo CaricaOrdini quando devi lanciare la query, richiami il database così:

ps = App.db.Prepare(stringa_sql)

Ti ho risposto molto veloce, ma se non hai capito dimmelo pure che ti allego un progetto di esempio.

dovrebbe essere già come dici tu

Ma nel metodo CaricaOrdini icam_incorso_dashbord non è la stessa proprietà dell’ App. Sbaglio?

icam_incorso_dashboard è il nome dell’app

immagine

Hai ragione scusa, non me ne ero accorto…Visto così ora mi sembra tutto giusto… Hai provato a eseguire le query senza il prepare per vedere se è quello il problema?

in effetti è l’unica cosa che mi resta da fare, ho anche disattivato il timer senza successo, aumentano al ritmo di circa 3/4 ogni 2 secondi

Ma se aumentano senza il timer che chiama le query allora c’è sicuramente un problema… che versione di Xojo stai utilizzando?

questo applicativo in particolare è 2017 R1

Prova solo in debug ad usare la versione 2019r3.2 che utilizza ancora il web1.0 e vedi se si presenta ancora lo stesso problema. Poi valuterai se aggiornare la licenza oppure no :wink: