2009-05-19 10 views
73

È cruciale chiudere l'efficienza delle connessioni mysql o si chiude automaticamente dopo l'esecuzione del file php?Sta chiudendo la connessione mysql importante?

+0

Suppongo che lo stesso valga per ftp_close? – rahmanisback

+0

Vedi anche questa domanda http://stackoverflow.com/questions/336078/php-mysql-when-is-the-best-time-to-disconnect-from-the-database – alex

+0

Sta chiudendo la connessione mysql importante? sì, è come un distruttore in C++ –

risposta

77

Dal documentation:

Nota: Il collegamento al server saranno chiuse non appena l'esecuzione dello script finisce, meno che non sia chiuso prima richiamando esplicitamente mysql_close().

Se lo script ha una buona quantità di elaborazione da eseguire dopo aver recuperato il risultato e ha recuperato il set di risultati completo, è assolutamente necessario chiudere la connessione. In caso contrario, è possibile che il server MySQL raggiunga il limite di connessione quando il server Web è in uso intensivo. Se non riesci a chiudere la connessione MySQL fino alla fine dello script, è più pulito, anche se non è necessario farlo esplicitamente.

Non sono sicuro di come fastcgi influenzi le cose. One page afferma che una build di PHP che supporta fastcgi creerà connessioni permanenti, anche per mysql_connect. Ciò contraddice la documentazione in quanto la connessione viene chiusa quando il processo, anziché lo script, termina. Piuttosto che provarlo, raccomanderò di usare mysql_close(). In realtà, ti consiglio di utilizzare PDO, se disponibile.

+0

Suppongo che lo stesso valga per ftp_close? – rahmanisback

+1

Significa che se l'utente chiude la pagina (ad esempio) in anticipo (o c'è qualche errore) la connessione potrebbe rimanere aperta? –

+0

@Toni Michel Caubet '" Il collegamento al server verrà chiuso non appena termina l'esecuzione dello script. "' Quando l'utente chiude una pagina in anticipo, non importa per il server PHP. Esegue script come sempre e termina lo script come sempre. Solo l'utente non vedrà il risultato. – arrowman

4

Quando si utilizza qualcosa come cgi, non è assolutamente necessario chiudere le connessioni mysql poiché si chiudono automaticamente al termine dell'esecuzione dello script. Quando si utilizzano tecnologie persistenti come mod_perl e altri, che mantengono le connessioni tra le richieste, è importante tenere traccia delle connessioni, variabili globali, ecc.

Fondamentalmente, per i dati persistenti, pulire da soli. Per dati banali e non persistenti, tutto andrà via quando la richiesta finirà comunque. In ogni caso, la migliore pratica è quella di chiudere sempre le connessioni.

+1

Sta parlando di PHP, che non è persistente, quindi non si applica. –

8

È cruciale? Non così tanto

È considerata una buona pratica da seguire? Sì.

Non vedo perché non vorrai chiuderlo.

+4

Bene, considerando che anche la pagina di manuale per 'mysql_close' dice" L'uso di mysql_close() di solito non è necessario, poiché i collegamenti aperti non permanenti vengono automaticamente chiusi al termine dell'esecuzione dello script. " Non considererei davvero una cattiva pratica non chiudere la connessione. – nico

+3

"Non vedo perché non vorresti chiuderlo." Non vorrai chiuderlo se c'è qualche possibilità che tu possa averne bisogno di nuovo. –

+1

se U usa ajax allora se la connessione è chiusa allora ogni volta che U prova ad usare ajax la connessione si aprirà e si chiuderà nuovamente e questo varrebbe la pena lasciare la connessione aperta al server e al client non interessa la connessione aperta o no si preoccupa che il sito web sia la velocità – robert

2

Si chiude non appena lo script completa l'esecuzione. A meno che tu non abbia aperto una connessione persistente. Idealmente dovresti rilasciare una risorsa (una connessione qui) non appena ne hai finito. A meno che non ci siano buone possibilità che ne avrai di nuovo bisogno molto presto nell'esecuzione.

Il pool di connessioni o l'utilizzo di connessioni permanenti (se questo è ciò che intendevi tu) è una buona idea se sei dietro un singolo server di database. Tuttavia, se ci sono più server e si sta eseguendo il bilanciamento del carico, potrebbe danneggiare la distribuzione del lavoro. In genere alcuni client eseguono query pesanti mentre altri eseguono quelli più leggeri. Quindi, se la stessa connessione viene utilizzata su n over, alcuni server verrebbero colpiti da un carico pesante mentre altri sarebbero inutilizzati. Considerare l'uso di ttls più piccoli e dimensioni del pool di connessione variabili.

Problemi correlati