conexiones persistentes MySQL

Software en general, antivirus, suites ofimaticas, firewall...

Moderador: Moderadores

conexiones persistentes MySQL

Notapor Sor_Zitroën » Mar Abr 05, 2011 11:42 pm

Buenas,

estoy optimizando un Apache y MySQL para que funcione decente en un servidor. En el Apache ya he tocado algunas directivas para hacer un mejor uso (MaxSpareServers, MinSpareServers, KeepAliveTimeout, TimeOut, etc), pero el tema de las conexiones persistentes se me resiste en parte.

Para sentar base hay que entender que una conexión sin persistencia se cierra ante un mysql_close o cuando un script (PHP, por ejemplo) finaliza. Si es persistente no se cierra ante ninguno de los dos casos comentados, pero sí si el proceso muere o se produce un timeout en MySQL.

Se establecen conexiones persistentes por proceso de Apache (no para todos los procesos), y como ventaja tienen que mejora el tiempo de establecimiento de conexión; más que nada porque no se vuelve a realizar si coincide el servidor/usuario/contraseña. Inconvenientes: el consumo de recursos, ya que cada conexión al servidor MySQL crea un hilo para atenderlo. Si tenemos unas cuantas conexiones persistentes, entonces hay varios hilos consumiendo recursos que en base a su número puede llegar a ser un consumo considerable. Vamos, que al ser persistentes no se liberan los recursos hasta que muera el proceso Apache (y si en la configuración de Apache tenemos el valor MaxRequestsChild por defecto [0], no muere nunca). Otro inconveniente es que hay contenciones debido al control de concurrencia.

Bueno, después de sentar toda esta teoría base, entonces lo que quiero saber es cómo configurar un valor apropiado para la directiva max_connections de MySQL. Es obvio que si tenemos 100 procesos de Apache y 16 conexiones para MySQL, entonces hay un cuello de botella; habrá procesos de Apache que tendrán que esperar a que alguna conexión se libere. Por lo tanto, si sólo tenemos una BBDD a la que se puedan realizar conexiones persistentes y 100 procesos Apache, supongo que lo suyo es configurar max_connections con valor 100. En caso de tener más BBDD, pues ya habría que poner el valor adecuado.

¿Es así de fácil o me estoy perdiendo algo?


PD: he puesto toda la teoría al principio por si a alguien le sirve. La verdad es que si a mí me lo hubieran resumido así hace un par de días, me hubiera ido de lujo y no me hubiera dado tantas ostias para entederlo.
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: conexiones persistentes MySQL

Notapor Sor_Zitroën » Vie Abr 08, 2011 11:21 am

Me comenta Jordi Prats que el número de conexiones a BBDD (max_connections) y procesos Apache simultáneos (MaxClients) van de la mano, pero en caso de que todos los procesos de Apache sirvan contenido dinámico. En caso de que haya procesos que sirvan estático (imágenes, etc), ya haría falta ajustarlo al número de procesos que se encargan sólo del dinámico.

Por cierto, su blog es más que recomendable; así que os animo a seguirlo.
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am


Volver a Software

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados