È fondamentale chiudere le connessioni mysql in termini di efficienza, o si chiude automaticamente dopo che il file php è stato eseguito?
È fondamentale chiudere le connessioni mysql in termini di efficienza, o si chiude automaticamente dopo che il file php è stato eseguito?
Risposte:
Dalla documentazione :
Nota: il collegamento al server verrà chiuso non appena termina l'esecuzione dello script, a meno che non venga chiuso prima chiamando esplicitamente mysql_close ().
Se il tuo script ha una discreta quantità di elaborazione da eseguire dopo aver recuperato il risultato e ha recuperato l'intero set di risultati, dovresti assolutamente chiudere la connessione. In caso contrario, è possibile che il server MySQL raggiunga il limite di connessione quando il server Web è sottoposto a un utilizzo intenso. Se non è possibile chiudere la connessione MySQL fino alla fine dello script, è più pulito anche se non è necessario farlo esplicitamente.
Non sono sicuro di quanto fastcgi influenzi le cose. Una pagina afferma che una build di PHP che supporta fastcgi creerà connessioni persistenti, anche per mysql_connect. Ciò contraddice la documentazione in quanto la connessione viene chiusa quando termina il processo, anziché lo script. Piuttosto che testarlo, consiglierò di usare mysql_close (). In realtà, consiglio di utilizzare PDO , se disponibile.
"The link to the server will be closed as soon as the execution of the script ends."Quando l'utente chiude una pagina in anticipo, non importa per il server PHP. Esegue lo script come sempre e termina lo script come sempre. Solo l'utente non vedrà il risultato.
È cruciale? Non così tanto
È considerata una buona pratica da seguire? Sì.
Non vedo perché non vorresti chiuderlo.
mysql_closedice "L'uso di mysql_close () di solito non è necessario, poiché i collegamenti aperti non persistenti vengono chiusi automaticamente alla fine dell'esecuzione dello script." Non considererei davvero una cattiva pratica non chiudere la connessione.
Quando si utilizza qualcosa come cgi, non è assolutamente necessario chiudere le connessioni mysql poiché si chiudono automaticamente alla fine dell'esecuzione dello script. Quando si utilizzano tecnologie persistenti come mod_perl e altre, che mantengono le connessioni tra le richieste, è importante tenere traccia delle connessioni, delle variabili globali, ecc.
Fondamentalmente, per dati persistenti, ripulisci dopo te stesso. Per dati banali e non persistenti, andrà tutto via comunque quando la richiesta finisce. In ogni caso, la migliore pratica è chiudere sempre le connessioni.
Viene chiuso 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 hai finito con essa. A meno che non ci siano buone probabilità che ne avrai bisogno di nuovo molto presto durante l'esecuzione.
Il pool di connessioni o l'utilizzo di connessioni persistenti (se questo è ciò che intendevi) è una buona idea se ti trovi dietro un singolo server di database. Tuttavia, se ci sono più server e stai bilanciando il carico, potrebbe danneggiare la distribuzione del lavoro. In genere, alcuni client eseguono query pesanti mentre altri eseguono query più leggere. Quindi, se la stessa connessione viene utilizzata su n su, alcuni server subirebbero un carico pesante mentre altri sarebbero sottoutilizzati. Considerare l'utilizzo di ttls più piccoli e dimensioni variabili del pool di connessioni.
La maggior parte dei CMS chiude la connessione MySQL alla fine della richiesta, il che è davvero insignificante, perché PHP lo farà comunque.
Tuttavia, se si dispone di uno script in cui la connessione non è più necessaria, dire verso la metà dello script e poi si svolgono altre attività pesanti, allora è una buona idea chiudere esplicitamente la connessione. Ciò libererà alcune risorse.
Ora, molto è stato detto sui vantaggi della chiusura di una connessione, ma quasi nulla è stato detto sui vantaggi della mancata chiusura. In sostanza, se non chiudi la connessione alla fine di uno script, stai davvero risparmiando alcune risorse. Immagina che un'applicazione web (o qualsiasi applicazione) riceva 100 visualizzazioni di pagina / secondo. Quindi, ogni secondo, dovrai invocare mysqli_close100 volte, il che significa che in ogni secondo hai 100 roundtrip non necessari al server del database per chiudere le connessioni aperte. Dal punto di vista delle prestazioni, questo è puro sovraccarico, poiché PHP controllerà le connessioni aperte quando lo script sarà finito comunque e chiuderà quelle connessioni, e potrebbe essere che, poiché tutto accade così rapidamente, PHP non vede che hai ha chiuso quelle connessioni e proverà a chiuderle di nuovo.
Nota: la risposta precedente presuppone che non si stiano utilizzando connessioni persistenti (le connessioni persistenti non vengono utilizzate in nessuno dei principali CMS).