Chiudere la connessione mysql è importante?


Risposte:


89

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.


Immagino che lo stesso valga per ftp_close?
doc_id

4
Ciò significa che se l'utente chiude la pagina (ad esempio) in anticipo (o si verifica un errore) la connessione potrebbe rimanere aperta?
Toni Michel Caubet

1
@Toni Michel Caubet "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.
Arrowman

9

È cruciale? Non così tanto

È considerata una buona pratica da seguire? Sì.

Non vedo perché non vorresti chiuderlo.


6
Bene, considerando che anche la pagina di manuale per 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.
nico

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

1
se usi ajax allora se la connessione viene chiusa, ogni volta che provi a usare ajax la connessione verrà aperta e chiusa di nuovo e questo varrà che lasciare la connessione aperta al server e il client non si preoccupa della connessione aperta o meno cura che il sito web sia veloce
Robert

anzi può essere cruciale !!! se il carico del server è elevato e hai molte connessioni non chiuse come detto da qualcun altro più in alto che questo può portare a un server che non risponde, quindi lo definirei praticamente cruciale!
oliiix

Meglio chiudere. Facile e senza problemi.
José Carlos PHP

4

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.


1
Sta parlando di PHP, che non è persistente, quindi non si applica.
Sasha Chedygov

2

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.


1

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.