sql >> Base de Datos >  >> RDS >> Mysql

Persistencia de conexión PHP MySQL

La persistencia se realiza mediante la copia del PHP que está incrustado en el servidor web. Por lo general, tendría razón:si PHP se estuviera ejecutando en modo CGI, sería imposible tener una conexión persistente, porque no quedaría nada para persistir cuando se complete la solicitud y PHP se apague.

Sin embargo, dado que hay una copia de PHP incrustada en el servidor web, y el propio servidor web continúa ejecutándose entre solicitudes, es posible mantener un conjunto de conexiones persistentes dentro de ese PHP "permanente".

Sin embargo, tenga en cuenta que en los modelos de servidor Apache de tipo multitrabajador, los grupos de conexiones se mantienen POR NIÑO. Si establece el límite de su grupo en 10, tendrá 10 conexiones por hijo de Apache. 20 niños =200 conexiones.

Las conexiones persistentes también darán lugar a problemas a largo plazo con interbloqueos y otros problemas difíciles de depurar. Recuerde:no hay garantía de que las solicitudes HTTP de un usuario sean atendidas por la MISMA conexión apache child/mysql. Si un script muere a la mitad de una transacción de la base de datos, esa transacción NO retroceder, porque MySQL no ve el lado HTTP de las cosas; todo lo que ve es que la conexión mysql<->apache todavía está abierta y asume que todo está bien.

El próximo usuario que acceda a esa combinación particular de apache/mysql hijo/conexión ahora mágicamente terminará en medio de esa transacción, sin ninguna pista de que la transacción está abierta. Básicamente, es el equivalente web de un inodoro sin tirar:toda la "basura" del usuario anterior sigue ahí.

Con conexiones no persistentes, tiene la garantía de tener un entorno "limpio" cada vez que se conecte.