Oracle
 sql >> Base de données >  >> RDS >> Oracle

Compréhension complète du PDO ATTR_PERSISTENT

Point de vue Apache

Apache a un processus parent. Ce processus crée des processus enfants qui géreront toutes les requêtes arrivant au serveur Web. Le nombre initial de processus enfants démarrés au démarrage du serveur Web est configuré par StartServers directive dans la configuration apache. Le nombre augmente au besoin avec un nombre croissant de requêtes atteignant le serveur Web jusqu'à ServerLimit est atteint.

PHP et connexions persistantes

Si PHP (exécuté en tant que mod_php, comme CGI toutes les ressources sont libérées à la fin de l'exécution du script) est maintenant invité à établir une connexion persistante avec une base de données pour une requête, cette connexion est maintenue même après la fin du script. La connexion étant maintenant hold est une connexion entre le processus enfant apache par lequel la demande a été traitée et le serveur de base de données et peut être réutilisé par toute demande traitée par ce processus enfant exact.

Si, pour une raison quelconque (ne me demandez pas exactement pourquoi), le processus enfant est occupé plus longtemps que la demande réelle et qu'une autre demande arrive, le processus apache parent redirige cette demande vers un (nouveau) processus enfant qui n'a peut-être pas établi une connexion à la base de données jusqu'à présent. S'il le faut pendant l'exécution du script, il lève le SID comme vous l'avez observé. Maintenant, il y a deux connexions détenues par deux processus enfants différents d'Apache.

Gardez à l'esprit que...

Il est important de savoir que cela peut également causer beaucoup de problèmes. S'il y a une boucle sans fin ou une transaction abandonnée ou une autre erreur peut même être imprévisible lors de l'exécution du script, la connexion est bloquée et ne peut pas être réutilisée .Il peut également arriver que toutes les connexions disponibles de la base de données soient utilisées, mais qu'un autre processus enfant du serveur apache tente d'accéder à la base de données.Ce processus est bloqué pour le moment jusqu'à ce qu'une connexion soit libérée par la base de données ou apache (timeout ou volontairement par résiliation).Toute information complémentaire à ce sujet sur cette page :http://www.php.net/manual/en/features.persistent-connections.php

J'espère que j'ai résumé correctement tout ce dont nous avons discuté dans notre conversation de commentaires et que je n'ai rien oublié. Si c'est le cas, s'il vous plaît, laissez-moi un indice et je l'ajouterai. :)

Modifier :

Je viens de terminer la lecture de l'article @MonkeyZeus mentionné dans ce commentaire.Il décrit le processus que j'ai résumé ci-dessus et fournit des informations utiles sur la façon d'optimiser votre serveur apache pour mieux fonctionner avec des connexions persistantes.Il peut être utilisé avec ou sans backends de base de données oracle, cependant.Vous devriez jeter un coup d'œil :http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html