Optimización de mysql

Apache HTTPEste es un post difícil, y no pretende ni mucho menos, ser una guía definitiva de la optimización de MySQL, si no un mero resumen de lo que podrían ser algunas acciones encaminadas a mejorar el rendimiento de MySQL, basado sobre todo, en las directrices de la documentación oficial. Si tienes pensado aplicar alguna de estas medidas, te recomendaría probarla antes en un entorno de test. 😉

Identificar el cuello de botella

El cuello de botella suele venir por:

  • Búsquedas en el disco duro: actualmente los discos suelen tener una velocidad de búsqueda de menos de 10ms, pudiendo tener un máximo teórico de 100 búquedas por segundo. Distribuyendo los datos en diferentes discos se aumentará el rendimiento.
  • i/o: una vez el disco esté en posición (haya encontrado el segmento con los datos que buscamos) necesitaremos leer los datos. Actualmente un disco entrega información a razón de 10-20MB/s. Se puede montar un entorno en RAID para la lectura en paralelo de múltiples discos, o usar discos con mayor número de IOPS, como los discos SSD.
  • Ciclos de CPU: Se recomienda trabajar con tablas pequeñas para mejorar el rendimiento.

Continuar leyendo «Optimización de mysql»

Límite de conexiones en MySQL

MySQL tiene un límite de conexiones simultáneas que acepta, que por defecto en las versiones actuales está en 150. En realidad, 151, puesto que esta 1 está reservada para el administrador poder conectar en local y ver qué está pasando.

Podemos consultar el límite actual, tal y como se muestra en el siguiente ejemplo:

mysql> show variables like «max_connections»;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 151 |
+—————–+——-+
1 row in set (0.00 sec)

Si quisiéramos incrementar el límite por ejemplo a 300 conexiones simultáneas, únicamente deberíamos añadir la siguiente línea al archivo de configuración de MySQL, típicamente en /etc/my.cnf:

max_connections = 300

Una vez hecho esto, y después del posterior reinicio del servicio, deberíamos poder confirmar el incremento del límite:

mysql> show variables like «max_connections»;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 300 |
+—————–+——-+
1 row in set (0.00 sec)

Actualización: También podemos cambiar este parámetro «al vuelo» con el comando siguiente:

mysql> SET GLOBAL max_connections = 300;

Decir, que tenemos un par de opciones para ver el número de conexiones actuales:

mysql> SHOW STATUS WHERE `variable_name` = ‘Threads_connected’

O directamente,

mysql> SHOW PROCESSLIST;

Fuentes:
http://www.electrictoolbox.com/update-max-connections-mysql/
http://forums.mysql.com/read.php?24,15350,28036