Por que optimizar MySQL y Apache en servidores dedicados
En servidores dedicados con multiples sitios web o aplicaciones de alto trafico, la configuracion predeterminada de MySQL y Apache raramente es la optima para el hardware disponible. MySQL puede tener su cache de buffer demasiado pequeño para la cantidad de datos que maneja, o demasiado grande y desperdiciar RAM que Apache necesita. Apache puede tener configurado un numero excesivo de procesos hijos que saturan la memoria del servidor.
La optimizacion de estos componentes requiere entender el perfil de uso del servidor: tipo de aplicacion (lectura intensiva vs escritura intensiva), numero de conexiones simultaneas esperadas, y distribucion de recursos de RAM y CPU disponibles.
Optimizacion de MySQL: configuracion de my.cnf
Las siguientes configuraciones en /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu) o /etc/my.cnf (AlmaLinux) mejoran el rendimiento de MySQL para servidores web:
[mysqld] # Tamano del buffer pool de InnoDB (60-70% de la RAM del servidor) innodb_buffer_pool_size = 2G # Numero de instancias del buffer pool innodb_buffer_pool_instances = 2 # Log de consultas lentas (mas de 1 segundo) slow_query_log = 1 long_query_time = 1 slow_query_log_file = /var/log/mysql/slow.log # Maximo de conexiones simultaneas max_connections = 200 # Cache de consultas (para MySQL 5.7, obsoleto en 8.0) query_cache_type = 1 query_cache_size = 64M # Tamaño del buffer de join y sort join_buffer_size = 2M sort_buffer_size = 4M
Optimizacion de Apache: MPM y configuracion
# MPM Event (recomendado con PHP-FPM)
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
# Keepalive
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
Identificar consultas MySQL lentas
# Ver consultas en ejecucion en este momento SHOW FULL PROCESSLIST; # Ver el estado de InnoDB SHOW ENGINE INNODB STATUS\G # Analizar una consulta especifica EXPLAIN SELECT * FROM tabla WHERE condicion;
Tabla de configuraciones de MySQL segun la RAM del servidor
| RAM del servidor | innodb_buffer_pool_size | max_connections |
|---|---|---|
| 4 GB | 2 GB | 150 |
| 8 GB | 4-5 GB | 300 |
| 16 GB | 10 GB | 500 |
| 32 GB | 20 GB | 1000 |
