Cómo optimizar el rendimiento de MySQL en WordPress y PrestaShop
¿Tu tienda online o web hecha con WordPress o PrestaShop va lenta? Si ya has optimizado las imágenes, usado un plugin de caché y aun así notas que las páginas tardan en cargar, el problema casi seguro está en la base de datos.
La base de datos es el cerebro de tu sitio. Cada vez que un visitante entra, tu web hace cientos de consultas a MySQL para mostrar productos, comentarios o pedidos. Si ese cerebro va lento, todo el cuerpo (tu web) va lento. Por eso, hoy vamos a aprender a optimizar el rendimiento de MySQL de una forma sencilla y práctica, sin necesidad de ser un experto en servidores.
Vamos a ello.
¿Por qué MySQL se vuelve lento en WordPress y PrestaShop?
Antes de tocar nada, es importante entender por qué ocurre. No es magia, es lógica.
- Datos basura acumulados: Transients (datos temporales de caché), revisiones de entradas, comentarios spam y sesiones caducadas llenan las tablas de información inútil.
- Tablas fragmentadas: Al borrar y añadir datos constantemente (como pedidos o comentarios), los archivos de la base de datos se desordenan. Es como un disco duro lleno de archivos rotos.
- Consultas ineficientes: A veces, los plugins o temas hacen preguntas (queries) muy complejas a la base de datos. Si no están bien escritas, tardan muchísimo.
- Configuración genérica del servidor: El archivo de configuración de MySQL viene con valores "seguros" para cualquier equipo, pero no están optimizados para tu hardware (RAM y CPU).
El resultado es el mismo: aumento del tiempo de carga (TTFB), bloqueos de tablas y, en el peor de los casos, errores de "Error establishing a database connection".
1. Limpieza profunda: La base para optimizar MySQL
No puedes correr una maratón con una mochila llena de piedras. Lo primero es limpiar.
### Limpia las revisiones de entradas (WordPress)
Cada vez que guardas un borrador o actualizas un artículo, WordPress guarda una "revisión". Con el tiempo, puedes tener cientos de versiones de un mismo post. Esto infla la tabla wp_posts enormemente.
Puedes hacerlo con un plugin como WP-Optimize o Advanced Database Cleaner, pero si quieres hacerlo de forma manual y rápida, puedes ejecutar esta consulta en phpMyAdmin (te recomiendo hacer una copia de seguridad antes):
DELETE FROM wp_posts WHERE post_type = "revision";
### Limpia los transients caducados
Los transients son datos temporales que los plugins guardan para acelerar procesos. Pero muchos no se borran solos y se acumulan. Puedes eliminarlos con el plugin Transient Cleaner o con esta consulta SQL:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%';
### Limpieza específica para PrestaShop
En PrestaShop, la tabla que más se llena es ps_connections y ps_guest. Estas guardan las sesiones de navegación de los visitantes. Si tu tienda tiene mucho tráfico, esta tabla puede crecer de forma desmesurada.
Desde el panel de administración puedes ir a Parámetros Avanzados > Rendimiento y activar la limpieza automática de sesiones. También puedes vaciar la tabla manualmente con:
TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_guest;
TRUNCATE TABLE ps_connections_page;
[WARNING] Ojo: Antes de truncar cualquier tabla, asegúrate de que no estás borrando datos de pedidos o clientes. Estas tablas son solo de sesiones temporales, pero verifícalo siempre en tu estructura.
2. Optimizar las tablas: Desfragmentar
Después de limpiar, hay que "ordenar" los archivos. Esto se llama optimizar tablas.
### Cómo optimizar tablas en phpMyAdmin
- Entra en phpMyAdmin (normalmente en
tudominio.com/phpmyadmino desde el panel de tu hosting). - Selecciona tu base de datos.
- Marca todas las tablas (clic en "Seleccionar todo").
- En el menú desplegable de abajo, elige Optimizar tabla.
Esto ejecutará el comando OPTIMIZE TABLE. Es seguro y no borra datos, solo reorganiza el espacio físico en el disco.
[TIP] Si tu base de datos es muy grande (más de 500 MB), haz esta operación en horas de bajo tráfico, ya que puede consumir recursos momentáneamente.
3. MySQL Tuning: Ajustar la configuración del servidor
Aquí es donde realmente se nota la diferencia. La configuración por defecto de MySQL (o MariaDB) está pensada para ordenadores modestos. Si tu servidor tiene RAM de sobra, la estamos desperdiciando.
### Encuentra el archivo de configuración
El archivo se llama my.cnf (en Linux) o my.ini (en Windows). Normalmente está en /etc/mysql/my.cnf o /etc/my.cnf. Si usas un panel como Syspanel (accesible por el puerto 2106), puedes encontrarlo en la sección de archivos o usando el gestor de archivos del propio panel.
### Parámetros clave para WordPress y PrestaShop
Te doy los valores base que funcionan bien para sitios con 1-2 GB de RAM dedicada. Ajusta los números según tu hardware.
[mysqld]
# Almacenamiento en memoria para datos temporales
tmp_table_size = 64M
max_heap_table_size = 64M
# Tamaño del buffer de consultas
key_buffer_size = 64M
# Tamaño máximo de paquetes para consultas largas
max_allowed_packet = 64M
# Límite de conexiones simultáneas
max_connections = 150
# Buffer de InnoDB (el motor de almacenamiento por defecto)
innodb_buffer_pool_size = 512M
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
Explicación rápida:
innodb_buffer_pool_size: Es el más importante. Debe ser el 70-80% de tu RAM disponible. Si tienes 2 GB de RAM, pon1Go1.5G. Aquí se guardan los datos más consultados.tmp_table_sizeymax_heap_table_size: Evitan que las consultas temporales se escriban en disco (que es lentísimo).innodb_flush_log_at_trx_commit = 2: Acelera las escrituras. Si tu hosting es compartido y no tienes control, déjalo como está.
[INFO] Si usas Syspanel, puedes editar este archivo desde el administrador de archivos. Recuerda que el puerto de acceso es el 2106 (ejemplo:
tudominio.com:2106). Después de guardar, reinicia el servicio MySQL desde el panel.
### Prueba si tu configuración es buena
Después de aplicar los cambios, reinicia MySQL y consulta el estado con esta línea de comandos (si tienes acceso SSH):
mysql -u usuario -p -e "SHOW STATUS LIKE 'Threads_connected';"
Lo ideal es que el número de conexiones no llegue al máximo (max_connections) en horas punta. Si lo alcanza, sube ese número.
4. Optimizar consultas y plugins (WordPress)
A veces el problema no es el servidor, sino los plugins que hacen consultas enormes.
- Desactiva plugins de estadísticas pesadas: Plugins como Jetpack o Google Analytics Dashboard pueden ralentizar MySQL si no están bien configurados. Usa versiones ligeras o cachea sus resultados.
- Usa un plugin de caché de base de datos: Redis o Memcached son excelentes. Si no puedes instalarlos, al menos usa la caché de objetos de WP Rocket o W3 Total Cache.
### Índices: Los aliados invisibles
Si tienes una tienda PrestaShop con 50.000 productos, las consultas de búsqueda pueden ser lentísimas si no hay índices.
Puedes añadir un índice a la tabla de productos para el campo reference (referencia), que es el que se usa en las búsquedas rápidas:
ALTER TABLE ps_product ADD INDEX (reference);
[WARNING] No añadas índices a lo loco. Cada índice extra ralentiza las inserciones (crear pedidos, registrar usuarios). Solo añade índices a columnas que se usen en consultas
WHEREoJOINfrecuentemente.
5. Herramientas automáticas de análisis
No tienes que hacerlo todo a mano. Hay herramientas que te dicen exactamente qué consultas son lentas.
### Activa el log de consultas lentas
En tu my.cnf, añade:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
Esto registrará cualquier consulta que tarde más de 2 segundos. Después, revisa ese archivo y verás qué plugins o módulos están haciendo peticiones enormes.
### Usa plugins de monitorización
Para WordPress, Query Monitor es imprescindible. Te muestra cuántas consultas se ejecutan en cada página y cuál tarda más. Con esa info, puedes desactivar el plugin culpable o pedirle al desarrollador que optimice su código.
6. Preguntas frecuentes (FAQ)
### ¿Es seguro optimizar MySQL en un hosting compartido?
En un hosting compartido, normalmente no tienes acceso al archivo my.cnf. Sin embargo, sí puedes hacer la limpieza y optimización de tablas desde phpMyAdmin. Si tu plan es de pago y usas cPanel, busca la opción "MySQL Tuning" o "MultiPHP INI Editor". Si no, contacta con soporte y pídeles que apliquen estos valores.
### ¿Cuánto tiempo se tarda en ver resultados?
Inmediato. Si limpias tablas y desfragmentas, notarás una mejora del 20-30% en el tiempo de respuesta. Si además ajustas el innodb_buffer_pool_size, la mejora puede ser del 50-80%, especialmente en PrestaShop con catálogos grandes.
### ¿PrestaShop o WordPress necesitan configuraciones diferentes?
Sí y no. La base es la misma, pero PrestaShop hace más consultas de escritura (pedidos, carritos), así que es crucial que innodb_log_file_size sea generoso (64M o más). WordPress es más de lecturas, así que el key_buffer_size y la caché de objetos son más importantes.
### ¿Puedo romper mi web si toco algo?
Sí, si borras tablas incorrectas. Por eso, siempre haz una copia de seguridad de la base de datos antes de ejecutar cualquier consulta SQL. En Syspanel (puerto 2106) tienes la opción de backup automático. Úsala.
Conclusión: Tu plan de acción para acelerar la base de datos
Vamos a resumir los pasos para que no te pierdas:
- Haz una copia de seguridad de tu base de datos.
- Limpia revisiones, transients y sesiones caducadas.
- Optimiza tablas desde phpMyAdmin.
- Ajusta
my.cnf(si tienes acceso). Priorizainnodb_buffer_pool_size. - Activa el log de consultas lentas y revisa qué plugin o módulo es el culpable.
- Desactiva o reemplaza los plugins que hagan consultas pesadas.
- Monitoriza con Query Monitor o herramientas similares.
Con estos pasos, tu rendimiento WordPress y rendimiento PrestaShop mejorará drásticamente. No necesitas ser un gurú de servidores, solo seguir un orden lógico y tener paciencia.
[TIP] Si después de hacer todo esto tu web sigue lenta, considera cambiar de hosting. Un buen plan con NVMe y RAM dedicada vale la pena. A veces, el cuello de botella no es el software, sino el hardware del servidor.
Espero que esta guía te haya sido útil. Si tienes dudas, déjalas en los comentarios y estaré encantado de ayudarte a optimizar MySQL para que tu tienda vuele. ¡Buena suerte!
