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

Persistenza della connessione PHP MySQL

La persistenza viene eseguita dalla copia del PHP incorporata nel server web. Di solito avresti ragione:se PHP fosse in esecuzione in modalità CGI, sarebbe impossibile avere una connessione persistente, perché non ci sarebbe più nulla da persistere quando la richiesta viene eseguita e PHP si spegne.

Tuttavia, poiché c'è una copia di PHP incorporata nel server web e il server web stesso continua a funzionare tra le richieste, è possibile mantenere un pool di connessioni persistenti all'interno di quel PHP "permanente".

Tuttavia, si noti che sui modelli di server di tipo multi-worker Apache, i pool di connessioni vengono mantenuti PER-CHILD. Se imposti il ​​limite del pool su 10, avrai 10 connessioni per figlio di Apache. 20 bambini =200 connessioni.

Le connessioni persistenti porteranno anche a problemi a lungo termine con deadlock e altri problemi difficili da eseguire il debug. Ricorda:non vi è alcuna garanzia che le richieste HTTP di un utente saranno gestite dalla STESSA connessione apache child/mysql. Se uno script muore durante una transazione di database, tale transazione NON essere ripristinato, perché MySQL non vede il lato HTTP delle cose:tutto ciò che vede è che la connessione mysql<->apache è ancora aperta e presuppone che tutto vada bene.

Il prossimo utente a colpire quella particolare combinazione apache/mysql figlio/connessione ora finirà magicamente nel mezzo di quella transazione, senza alcun indizio che la transazione sia aperta. Fondamentalmente, è l'equivalente Web di una toilette non scaricata:tutta la "spazzatura" dell'utente precedente è ancora lì.

Con connessioni non persistenti, hai la garanzia di avere un ambiente "pulito" ogni volta che ti connetti.