El uso intensivo de la CPU es la apertura y cierre de una conexión DB (para una aplicación web) en MySQL
- ... cuando el software DB está en localhost?
- ... cuando el software DB está en otra máquina?
fuente
El uso intensivo de la CPU es la apertura y cierre de una conexión DB (para una aplicación web) en MySQL
Piense en la cantidad de memoria que se asigna por conexión DB. ¿Qué cosas deben asignarse? De acuerdo con la Guía de estudio de certificación MySQL 5.0, página 357 :
El servidor mantiene varios buffers para cada conexión de cliente. Uno se usa como un búfer de comunicaciones para intercambiar información con el cliente. Se mantienen otros almacenamientos intermedios por cliente para leer tablas y realizar operaciones de unión y clasificación.
¿Qué ajustes rigen los búferes por conexión?
Se necesita tiempo para asignar y desasignar estos búferes cuando surge una conexión. No olvides multiplicar la suma de esos valores por max_ connections . Como nota al margen, no use mysql_pconnect ya que las conexiones persistentes de PHP y MySQL no se llevan bien. Aquí hay dos enlaces informativos sobre este tema:
En entornos de lectura y escritura intensas, como OLTP, esto sería costoso en términos de uso de RAM y posible inhibición debido al intercambio en el sistema operativo. En un sitio web de baja escritura y baja lectura, no me preocuparía tanto.
No estoy seguro de que importe "cuánto más costoso" es. Ciertamente es más costoso que reutilizar la misma conexión. Lo que observará dependerá de si está utilizando correctamente la agrupación de conexiones, qué tan saturada está su agrupación, los recursos disponibles en la caja, etc.
En general, si está realizando un ciclo para interactuar con la base de datos, será mucho mejor reutilizar la misma conexión activa que abrir y cerrar dentro del ciclo (un antipatrón que veo con bastante frecuencia) .
El dilema entre reutilizar un objeto y derribarlo y volver a construirlo (ambos tienen ventajas y desventajas) a menudo se puede abordar con un compromiso: almacenar el objeto en caché, pero por un tiempo limitado (es decir, con vencimiento). Si se accede con frecuencia al objeto, se sigue reutilizando. Pero si no se usa durante algún tiempo, entonces un mecanismo de caducidad lo elimina, lo que obliga a volver a crearlo cuando sea necesario una vez más.
Un sistema puede tener un enlace global para este tipo de cachés que se invoca cuando la memoria es baja, lo que hace que todos caigan objetos no utilizados recientemente.
Mysql almacena en caché las conexiones (o subprocesos) utilizando el Thread Cache (thread_cache_size). El valor máximo es 100. Cuando el cliente cierra la conexión, se devuelve a la memoria caché. Cuando se abre una nueva conexión, comprueba el caché de subprocesos. EN un sistema muy ocupado, abrir la conexión de cierre puede ser costoso, especialmente si tiene consultas de larga duración.
https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Si puede pagar Mysql Enterprise, puede usar el complemento Thread Pool implementado en Mysql 5.6.