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
Was this answer helpful? 0 Users Found This Useful (0 Votes)