sql >> Base de Datos >  >> RDS >> Oracle

Comprensión completa de PDO ATTR_PERSISTENT

Punto de vista de Apache

Apache tiene un proceso principal. Este proceso crea procesos secundarios que manejarán cualquier solicitud que llegue al servidor web. La cantidad inicial de procesos secundarios que se inician cuando se inicia el servidor web está configurada por StartServers directiva en la configuración de apache. El número aumenta según sea necesario con una cantidad creciente de solicitudes que llegan al servidor web hasta ServerLimit se alcanza.

PHP y conexiones persistentes

Si ahora se le indica a PHP (ejecutado como mod_php, ya que CGI todos los recursos se liberan al final de la ejecución del script) que establezca una conexión persistente con una base de datos para una solicitud, esta conexión se mantendrá incluso después de que finalice el script. hold es una conexión entre el proceso secundario de apache que manejó la solicitud y el servidor de la base de datos y puede ser reutilizada por cualquier solicitud que esté siendo manejada por este proceso secundario exacto.

Si, por alguna razón (no me preguntes exactamente por qué), el proceso secundario está ocupado por más tiempo que la solicitud real y llega otra solicitud, el proceso principal de apache redirige esta solicitud a un (nuevo) proceso secundario que puede no haberse establecido una conexión a la base de datos hasta este momento. Si tiene que hacerlo durante la ejecución del script, sube el SID como has observado. Ahora hay dos conexiones mantenidas por dos procesos secundarios diferentes de apache.

Ten en cuenta que...

Es importante saber que esto también puede causar muchos problemas. Si hay un bucle sin fin o una transacción abortada o algún otro error impredecible durante la ejecución del script, la conexión se bloquea y no se puede volver a utilizar. .También podría suceder que se utilicen todas las conexiones disponibles de la base de datos, pero hay otro proceso secundario del servidor apache que intenta acceder a la base de datos. Este proceso está bloqueado por el momento hasta que la base de datos libere una conexión o apache (tiempo de espera o voluntariamente por terminación). Cualquier información adicional sobre este tema en esta página:http://www.php.net/manual/en/features.persistent-connections.php

Espero haber resumido correctamente todo lo que hemos discutido en nuestra conversación de comentarios y no haber olvidado nada. Si es así, déjame una pista y la agregaré. :)

Editar:

Acabo de terminar de leer el artículo @MonkeyZeus mencionado en este comentario. Describe el proceso que resumí anteriormente y brinda información útil sobre cómo optimizar su servidor apache para que funcione mejor junto con conexiones persistentes. Se puede usar con o sin bases de datos Oracle. aunque. Debería echar un vistazo:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html