3 messaggi dal 14 maggio 2004
Ciao a tutti,

ho sviluppato un sito abbastanza complesso di e-commerce, tutto in ASP con db MYSQL. Complesso nel senso che ci sono 26.000 articoli e diverse tabella relazionate fra loro.
Dopo un po che il sito è stato pubblicato, mi hanno contattato quelli dell'hosting, e mi hanno detto che il sito utilizza troppo il database, causando saturazioni. Mi hanno indicato di chiudere quanto prima le connessioni e di non usare quelle persistenti.

Io le connessioni le chiudo sempre tutte, regolarmente, utilizzando un inclusione lato server in fondo alla pagina con le istruzioni per la chiusura della connessione.


La mia domanda è:

conta il fatto che la chiusura della connessione è a fine pagina, quando magari potrebbe essere prima? Certi raccomandano di chiudere tutto prima dell'HEAD.
Questo a me implica di mettere tutto il responso della query (che genera un HTML abbastanza complesso) in una variabile, da mostrare poi a metà pagina.
Qualcuno di voi ha adottato questa soluzione ?

Grazie in anticipo dell'aiuto
9 messaggi dal 06 settembre 2002
Ciao, l'hoster ti ha detto semplicemente di chiudere tutte le connessioni subito dopo aver effettuato le operazioni che ti necessitano (query ed altro) e poi se hai variabili application, di rilasciarle appena non ti occorrono piu', o di utilizzare al loro posto variabili session; tutto qui. Il chiudere una connessione a fine pagina non è salutare alle performance di un server ed occupa inutilmente risorse in quanto comunquesia una volta interrogato il db è perfettamente inutile continuare a tenere aperta la connessione; è preferibile riaprirla se necessita e poi richiuderla nuovamente rilasciando soprattutto il recordset (es: Set conn = nothing - oltre che ricordarsi di chiuderlo). L'head centra poco o niente visto che ASP utilizza il codice non direttamente sul client, ma compie le operazioni sul server (<% nostro codice %>). Spero di essere riuscito ad essere quanto più chiaro possibile e di esserti stato di aiuto. ARYSOFT.IT
3 messaggi dal 14 maggio 2004
Ciao ,

grazie per la risposta.

Il problema è che spesso la connessione mi serve fino alla fine della pagina.
Tu dici che dovrei aprire e chiudere la connessione N volte nel corso della pagina. Se però vengono fatte diverse query, non è che la continua apertura e chiusura della connessione sia peggio ? Ho inoltre notato che usando ADODB con MYSQL, anche chiudendole, le connessioni restano aperte. Guardando la lista dei thread aperti sul mysql administrator, restano connessioni in stato di sleep.

Può essere questo il problema ? In tal caso credo che potremmo farci poco

arysoft ha scritto:
Ciao, l'hoster ti ha detto semplicemente di chiudere tutte le connessioni subito dopo aver effettuato le operazioni che ti necessitano (query ed altro) e poi se hai variabili application, di rilasciarle appena non ti occorrono piu', o di utilizzare al loro posto variabili session; tutto qui. Il chiudere una connessione a fine pagina non è salutare alle performance di un server ed occupa inutilmente risorse in quanto comunquesia una volta interrogato il db è perfettamente inutile continuare a tenere aperta la connessione; è preferibile riaprirla se necessita e poi richiuderla nuovamente rilasciando soprattutto il recordset (es: Set conn = nothing - oltre che ricordarsi di chiuderlo). L'head centra poco o niente visto che ASP utilizza il codice non direttamente sul client, ma compie le operazioni sul server (<% nostro codice %>). Spero di essere riuscito ad essere quanto più chiaro possibile e di esserti stato di aiuto. ARYSOFT.IT
9 messaggi dal 06 settembre 2002
Ora non ricordo bene, ma con ASP c'era la possibilità di un dbclose.all o qualche cosa del genere; dovresti consultare i motori di ricerca; il fatto che vedi in sleep, vuol dire che la connessione con il db è aperta, e resta in attesa di assegnazione di un recordset per l'utilizzo di query o altro; quando chiudi il recordset alla fine della pagina, dopo tutte le tue elaborazioni, devi ricordarti di chiudere anche la connessione al db e settarla a nothing. ;) vedrai che le cose andranno sicuramente meglio. Un sito che abbiamo realizzato in ASP per un ns cliente ha una gestione completamente dinamica e lavora con db, ma la cpu per quanto stressata non supera mai il 21%. Non vorrei che il problema sia invece dovuto all'hoster, che utilizzando forse LINUX ti ha messo su un PC/Server con hardware obsoleto; a volte capita. Noi della Arysoft utilizzando invece tecnologia Microsoft che come tutti sappiamo, divora risorse a dismisura, utilizziamo PC/Server con minimo 1Gb di RAM e CPU P4 3.2Gb, in questo modo eliminiamo tutti i problemi. Ma dimmi, è cosi' drammatico utilizzare Access al posto di MySql? E' sicuramente piu' semplice da gestire e vedi subito i problemi che si generano. Un saluto ARYSOFT.IT
9 messaggi dal 06 settembre 2002
Dimenticavo una cosa importantissima; verifica gli indici delle tue tabelle che siano stati creati nel modo e con i campi corretti, in quanto le performance di una pagina asp, se interroghi con delle query il db senza aver generato degli indici utilizzati dalla query stessa, crollano paurosamente dando a volte tempi esasperanti di attesa ed impegnando la CPU in un modo veramente estremo. ARYSOFT.IT
3 messaggi dal 14 maggio 2004
No no,

le connessioni le chiudo sempre tutte (è il minimo, poi per carita magari può sfuggire qualcosa, ma se l'hoster te lo fa presente è la prima cosa che vai a controllare).
Invece ti dirò che la cosa interessante è che ho provato anche con una semplice pagina che apre e chiude le connessione tipo:
Dim CNN, ConnString,Connstring_log
Connstring = "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=miodb; Uid=root; Pwd="
  set Con =Server.CreateObject("ADODB.Connection")
  Con.Open Connstring
          Con.close()
  set Con=Nothing


ed ho visto che le connessioni restano aperte comunque. Sempre controllando dal mysql administrator vedo che restano appunto in stato di "sleep" (lista dei threads aperti in MYSQL administrator).
Non so se sia un bug del driver ODBC MYSQL, con ADO, in quanto con PHP, facendo la stessa cosa la connessione poi sparisce dalla lista dei thread tranquillamente, addirittura anche senza specificare il mysql_close quando essa non serve più.
Per quanto riguarda l'utilizzo di ACCESS, non so se sia una buona idea, in quanto il sito prevede un traffico abbastanza elevato, e non vorrei avere problemi di altro tipo. MYSQL, in questo caso mi sembrava la soluzione migliore, in vista sopratutto di futuri sviluppi, anche a livello promozionale (quindi con maggior numero di visite).

Inoltre, lavorando spesso con PHP/MYSQL ho potuto aprezzare molto questo database, sia a livello di prestazioni che di sicurezza.
poi con ASP, effettivamente, mi sembra che ci sia qualcosa da mettere a posto!!

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.