Domanda

Ho questo dubbio, ho cercato sul web e le risposte sembrano essere diversificate. È meglio usare mysql_pconnect su mysql_connect quando ci si collega a un database tramite PHP? Ho letto che PConnect si ridimensiona molto meglio, ma d'altra parte, essendo una connessione persistente ... avere 10.000 connessioni contemporaneamente, tutte persistenti, non mi sembra scalabile.

Grazie in anticipo.

È stato utile?

Soluzione

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

Effettuare una connessione a un database MySQL è rapido rispetto agli altri marchi, quindi l'utilizzo di connessioni persistenti offre un vantaggio proporzionalmente inferiore per MySQL rispetto a un altro marchio di database.

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

Le connessioni hanno lo stato e sarebbe inappropriato che una richiesta PHP "erediti" " informazioni da una sessione precedentemente utilizzate 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 permanenti. Allo stesso modo le impostazioni basate sulla sessione come set di caratteri e regole di confronto. Inoltre, LAST_INSERT_ID () riporterebbe l'ultimo ID generato durante la sessione, anche se fosse durante una precedente richiesta PHP.

Almeno per MySQL, il rovescio della medaglia delle connessioni persistenti probabilmente supera i loro benefici. E ci sono altre tecniche migliori per raggiungere un'alta scalabilità.


Aggiornamento marzo 2014:

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

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

  

In MySQL 5.6 abbiamo iniziato a lavorare sull'ottimizzazione della gestione e della disconnessione del codice. E questo lavoro è accelerato in MySQL 5.7. In questo post del blog mostrerò prima i risultati che abbiamo raggiunto e quindi descriverò ciò che abbiamo fatto per ottenerli.

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

Altri suggerimenti

Fondamentalmente devi bilanciare il costo di creazione delle connessioni rispetto al mantenimento delle connessioni. Anche se MySQL è molto veloce nell'impostare una nuova connessione, costa comunque - nel tempo di configurazione del thread e nel tempo di configurazione TCP / IP dal tuo server web. Ciò è evidente in un sito di traffico sufficientemente elevato. Sfortunatamente, PHP non ha alcun controllo sulla persistenza delle connessioni. Quindi la risposta è ridurre il timeout di inattività in MySQL a lungo (come fino a 20 secondi) e aumentare la dimensione della cache del thread. Insieme, questo generalmente funziona molto bene.

D'altro canto, l'applicazione deve rispettare lo stato della connessione. È meglio se non fa ipotesi sullo stato in cui si trova la sessione. Se si utilizzano tabelle temporanee, l'utilizzo di CREATE IF NOT EXISTS e TRUNCATE TABLE aiuta molto, così come nominarli in modo univoco (come includere userid). Le transazioni sono un po 'più problematiche; ma il tuo codice può sempre eseguire ROLLBACK in alto, per ogni evenienza.

È molto improbabile che raggiungerai 10000 connessioni. Vai comunque alla fonte ufficiale . (Enfasi mia).

  

Se non sono presenti connessioni permanenti   qualsiasi funzionalità aggiunta, quali sono   vanno bene per?

     

La risposta qui è estremamente semplice -   efficienza. Le connessioni persistenti lo sono   buono se l'overhead per creare un collegamento   al tuo server SQL è elevato. Se o   non questo sovraccarico è davvero alto   dipende da molti fattori. Tipo cosa   tipo di database, indipendentemente dal fatto che   non si trova sullo stesso computer acceso   quale è il tuo server web, come   caricato la macchina su cui si trova il server SQL   su è e così via. La linea di fondo   è che se l'overhead della connessione è   connessioni elevate e persistenti ti aiutano   considerevolmente . Causano il bambino   processo per connettersi semplicemente una sola volta   per tutta la sua durata, invece di   ogni volta che elabora una pagina che   richiede la connessione al server SQL.   Ciò significa che per ogni bambino che   aperto una connessione persistente sarà   ha il suo aperto persistente   connessione al server. Per esempio,   se hai avuto 20 figli diversi   processi che eseguivano uno script creato   una connessione persistente al tuo SQL   server, ne avresti 20 diversi   connessioni al server SQL, una   da ogni bambino.

     

Si noti, tuttavia, che questo può avere alcuni   svantaggi se si utilizza un database   con limiti di connessione che sono   superato dal bambino persistente   connessioni. Se il tuo database ha un   limite di 16 connessioni simultanee,   e nel corso di un server occupato   sessione, tentano 17 thread secondari   connettersi, non sarà possibile. Se   ci sono dei bug nei tuoi script quali   non consentire la chiusura delle connessioni   giù (come loop infiniti), il   database con solo 16 connessioni può   essere rapidamente sommerso. Controlla il tuo   documentazione del database per informazioni   sulla gestione abbandonata o inattiva   connessioni.

mysql_connect () e mysql_pconnect () funzionano entrambi per la connessione al database ma con poca differenza. In mysql_pconnect () , p sta per connessione di persistenza.

Quando utilizziamo la funzione mysql_connect () , ogni volta che apre e chiude la connessione al database, a seconda della richiesta.

Ma nel caso della funzione mysql_pconnect () :

  • Innanzitutto, durante la connessione, la funzione tenta di trovare una connessione (persistente) già aperta con lo stesso host, nome utente e password. Se ne viene trovato uno, verrà restituito un identificatore anziché aprire una nuova connessione.

  • In secondo luogo, la connessione al server SQL non verrà chiusa al termine dell'esecuzione dello script. Invece, la connessione rimarrà aperta per uso futuro ( mysql_close () non chiuderà la connessione stabilita da mysql_pconnect()).

mysql_pconncet () è utile quando hai molti traffici sul tuo sito. In quel momento per ogni richiesta non aprirà una connessione ma la prenderà dal pool. Ciò aumenterà l'efficienza del tuo sito. Ma per uso generale mysql_connect () è la cosa migliore.

mysql_connect ()

1.mysql_connect può essere utilizzato per chiudere la connessione. Ogni volta che apre e chiude la connessione al database, a seconda della richiesta.

2.Qui il database viene aperto ogni volta che la pagina viene caricata in MYSQL connect

3.Quando viene caricata la pagina, il database viene caricato ogni volta

4. Viene utilizzato per chiudere la connessione

Esempio:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

Descrizione:

host: specifica un nome host o un indirizzo IP come localhost.

mysql_user: specifica il nome utente MySQL

mysql_password: specifica la password MySQL

mysql_pconnect ()

1.Utilizziamo mysql_pconncet (), inizialmente tenta di trovare una connessione persistente aperta.

2.Il mysql_pconncet () apre una connessione persistente

3.The mysql_pconnect () non supporta la stretta connessione

4.mysql_pconnect () non può chiudere la connessione. Qui apri una connessione persistente al database

5.Qui il database non deve essere collegato ogni volta.

6.Il database non deve essere collegato ogni volta in mysql_pconncet ().

maggiori dettagli: http://prittytimes.com/difference-between-mysql_connect- e-mysql_pconnect /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top