Mysql
 sql >> Database >  >> RDS >> Mysql

mysql_connect VS mysql_pconnect

Le connessioni persistenti non dovrebbero essere necessarie per MySQL. In altri database (come Oracle), effettuare una connessione è costoso e richiede tempo, quindi se puoi riutilizzare una connessione è una grande vittoria. Ma quei marchi di database offrono pool di connessioni, che risolve il problema in un modo migliore.

La connessione a un database MySQL è rapida rispetto ad altre marche, quindi l'utilizzo di connessioni persistenti offre vantaggi proporzionalmente inferiori a MySQL rispetto a un'altra marca di database.

Anche le connessioni persistenti hanno uno svantaggio. Il server di database alloca risorse a ciascuna connessione, indipendentemente dal fatto che le connessioni siano necessarie o meno. Quindi vedi molte risorse sprecate senza scopo se le connessioni sono inattive. Non so se raggiungerai le 10.000 connessioni inattive, ma anche solo un paio di centinaia sono costose.

Le connessioni hanno uno stato e non sarebbe appropriato per una richiesta PHP "ereditare" informazioni da una sessione precedentemente utilizzata da un'altra richiesta PHP. Ad esempio, le tabelle temporanee e le variabili utente vengono normalmente ripulite alla chiusura di una connessione, ma non se si utilizzano connessioni persistenti. Allo stesso modo le impostazioni basate sulla sessione come il set di caratteri e le regole di confronto. Inoltre, LAST_INSERT_ID() riporterebbe l'ultimo ID generato durante la sessione, anche se era durante una precedente richiesta PHP.

Almeno per MySQL, lo svantaggio delle connessioni persistenti probabilmente supera i loro vantaggi. E ci sono altre tecniche migliori per ottenere un'elevata scalabilità.

Aggiornamento marzo 2014:

La velocità di connessione di MySQL è sempre stata bassa rispetto ad altre marche di RDBMS, ma sta migliorando ancora.

Vedi http://mysqlserverteam.com/improving-connectdisconnect-performance/

Leggi il blog per maggiori dettagli e confronti di velocità.