Oracle
 sql >> Database >  >> RDS >> Oracle

Comprensione completa PDO ATTR_PERSISTENT

Punto di vista di Apache

Apache ha un processo padre. Questo processo crea processi secondari che gestiranno tutte le richieste in arrivo al server web. La quantità iniziale di processi secondari avviati all'avvio del server web è configurata da StartServers direttiva nella configurazione di apache. Il numero aumenta secondo necessità con un numero crescente di richieste che raggiungono il server web fino a ServerLimit viene raggiunto.

PHP e connessioni persistenti

Se a PHP (eseguito come mod_php, come CGI tutte le risorse vengono liberate alla fine dell'esecuzione dello script) viene ora detto di stabilire una connessione persistente con un database per una richiesta, questa connessione viene mantenuta anche al termine dello script. La connessione è ora hold è una connessione tra il processo figlio di Apache da cui è stata gestita la richiesta e il server del database e può essere riutilizzato da qualsiasi richiesta gestita da questo processo figlio esatto.

Se, per qualche motivo (non chiedermi esattamente perché), il processo figlio viene occupato più a lungo della richiesta effettiva e arriva un'altra richiesta, il processo apache genitore reindirizza questa richiesta a un (nuovo) processo figlio che potrebbe non essere stato stabilito una connessione al database fino a questo momento. Se necessario durante l'esecuzione dello script, solleva il SID come hai osservato. Ora ci sono due connessioni che devono essere mantenute da due diversi processi figlio di apache.

Tieni presente che...

È importante sapere che questo può anche causare molti problemi. Se c'è un ciclo infinito o una transazione interrotta o qualche altro può essere anche un errore imprevedibile durante l'esecuzione dello script, la connessione è bloccata e non può essere riutilizzata .Inoltre potrebbe accadere che tutte le connessioni disponibili del database vengano utilizzate, ma c'è un altro processo figlio del server Apache che tenta di accedere al database. Questo processo è bloccato per il momento fino a quando una connessione non viene liberata dal database o apache (timeout o volontariamente per terminazione). Ulteriori informazioni su questo argomento a questa pagina:http://www.php.net/manual/en/features.persistent-connections.php

Spero di aver riassunto correttamente tutto ciò di cui abbiamo discusso nella nostra conversazione di commento e di non aver dimenticato nulla. Se è così, per favore, lasciami un suggerimento e lo aggiungerò. :)

Modifica:

Ho appena finito di leggere l'articolo @MonkeyZeus menzionato in questo commento. Descrive il processo che ho riassunto sopra e fornisce informazioni utili su come ottimizzare il tuo server apache per lavorare meglio insieme a connessioni persistenti. Può essere utilizzato con o senza backend di database Oracle, però. Dovresti dare un'occhiata:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html