Usted podría utilizar esto como un "conjunto de reglas" en bruto:
SÍ, utilizar conexiones persistentes, si:
- sólo hay unas pocas aplicaciones/usuarios que acceden a la base de datos, es decir, que no lo hará resulta en 200 conexiones abiertas (pero probablemente inactivas), porque hay 200 usuarios diferentes compartidos en el mismo host.
- La base de datos se está ejecutando en otro servidor que está accediendo a través de la red
- Un (una) aplicación tiene acceso a la base de datos muy a menudo
NO, no use conexiones persistentes, si:
- Su aplicación solo necesita acceder a la base de datos 100 veces por hora.
- Tiene muchos servidores web accediendo a un servidor de base de datos
- Está utilizando Apache en modo prefork. Utiliza una conexión para cada proceso secundario, que puede aumentar rápidamente. (a través de @Powerlord en los comentarios)
El uso de conexiones persistentes es considerablemente más rápido, especialmente si está accediendo a la base de datos a través de una red. No hace mucha diferencia si la base de datos se ejecuta en la misma máquina, pero aún es un poco más rápida. Sin embargo, como su nombre lo indica, la conexión es persistente, es decir, permanece abierta, incluso si no se utiliza.
El problema es que, en "configuración predeterminada", MySQL solo permite 1000 "canales abiertos" paralelos. Después de eso, se rechazan las conexiones nuevas (puede ajustar esta configuración). Entonces, si tiene, por ejemplo, 20 servidores web con cada 100 clientes en cada uno de ellos, y cada uno de ellos tiene solo un acceso a la página por hora, las matemáticas simples le mostrarán que necesitará 2000 conexiones paralelas a la base de datos. Eso no funcionará
Ergo: Úselo únicamente para aplicaciones con muchas solicitudes.
Además, no use conexiones persistentes si está utilizando Apache en modo prefork.Utiliza una conexión para cada proceso secundario, que puede aumentar rápidamente. – Powerlord
@BlaM, no recibo tu último párrafo. ¿Las conexiones persistentes no le permiten reutilizarlas (ese es todo el punto?) Por lo que no necesita 2000 conexiones, ya que se reutilizarán. ¿O quiere decir que ** cada cliente ** tiene un nombre de usuario único? Aun así, ¿no se cerrarían automáticamente las antiguas conexiones persistentes cuando estén hechas para dar paso a nuevas conexiones? – Pacerier
@Pacerier: me refiero a clientes cada uno con su propio nombre de usuario. En ese caso, las conexiones anteriores ** NO ** se cerrarán para hacer posibles nuevas conexiones, porque el ** límite ** de las conexiones permitidas es gestionado por MySQL y la persistencia de las conexiones se gestiona desde el lado de PHP, por lo que desde PHP finaliza la base de datos simplemente no permite conectarse. No sabe que se alcanzó el límite y que cerrar las conexiones antiguas ayudará. – BlaM