Qué vas a lograr
Un WooCommerce que procesa pedidos rápidamente incluso con catálogo de 10,000+ productos y 100,000+ pedidos históricos. Las páginas de producto, checkout y admin de pedidos cargan en menos de 2 segundos. Los cron jobs no saturan el servidor durante picos de tráfico.
Requisitos previos
- WooCommerce 7.0+
- Acceso SSH al servidor o cPanel con phpMyAdmin
- Plugin WP-Optimize o Advanced Database Cleaner para limpieza
- Redis o Memcached disponible en el servidor (la mayoría de hosting managed lo incluye)
- Acceso al archivo my.cnf o my.ini para configuración de MySQL
Paso 1 — Diagnosticar y limpiar tablas infladas
- Instala plugin Query Monitor para identificar queries lentas en tiempo real en el frontend y admin
- En phpMyAdmin, verifica el tamaño de tablas clave: wp_posts (pedidos), wp_postmeta, wp_options, wp_woocommerce_sessions
- Limpiar wp_options (transients): ejecutar en MySQL: DELETE FROM wp_options WHERE option_name LIKE '%_transient_%'
- Limpiar wp_woocommerce_sessions: DELETE FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP()
- Limpiar pedidos con estado basura via WP-Optimize: Dashboard → WP-Optimize → Database → Clean up WooCommerce (pending orders > 30 días, failed orders, etc.)
- Usa WP-CLI para limpiar automáticamente: wp transient delete --all
Paso 2 — Agregar índices a tablas críticas
- Las tablas sin índices adecuados hacen full table scans en cada query. En phpMyAdmin ejecuta:
-- Índice para pedidos por cliente (muy común en admin de WooCommerce)
ALTER TABLE wp_postmeta ADD INDEX (meta_key, meta_value(20));
-- Índice para sessions
ALTER TABLE wp_woocommerce_sessions ADD INDEX (session_expiry);
-- Índice para orders
ALTER TABLE wp_posts ADD INDEX (post_type, post_status, post_date);- Verifica en Query Monitor que las queries más lentas mejoran su tiempo de ejecución
Paso 3 — Implementar Redis Object Cache
- Instala plugin Redis Object Cache
- En wp-config.php agrega: define WP_CACHE como true, WP_REDIS_HOST como 127.0.0.1, WP_REDIS_PORT como 6379
- En el plugin: Settings → Enable Object Cache
- Redis cachea los resultados de queries MySQL frecuentes. Las queries subsecuentes se sirven desde memoria RAM en lugar de MySQL
- Verifica: wp redis status via WP-CLI debe mostrar Status: Connected, Hit Ratio: 80%+ (objetivo después de 1 hora de tráfico)
Paso 4 — Configurar MySQL para WooCommerce
En my.cnf (Linux) o my.ini (Windows), ajusta estas configuraciones para un servidor de 4 GB RAM:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
query_cache_size = 0
max_connections = 150
tmp_table_size = 64M
max_heap_table_size = 64MVerificación y troubleshooting
- Queries lentas persistentes: en MySQL activa slow query log (slow_query_log = 1, long_query_time = 1) para identificar las queries que superan 1 segundo
- Redis no reduce queries MySQL: verifica que el Object Cache está activo en todas las páginas, no solo en frontend. Query Monitor muestra si el caché tiene hit o miss
- Disk I/O alto después de limpieza: ejecuta OPTIMIZE TABLE wp_posts y OPTIMIZE TABLE wp_postmeta en MySQL para desfragmentar las tablas después de eliminar datos masivos
Próximos pasos y optimización
- WooCommerce HPOS: activa High Performance Order Storage en WooCommerce → Settings → Advanced → Features. Migra pedidos a tablas optimizadas en lugar de wp_posts
- Archivado de pedidos: mueve pedidos completados de más de 1 año a tabla de archivo. Reduce el tamaño de wp_posts significativamente
- Database monitoring: configura New Relic o Query Monitor en staging para detectar nuevas queries lentas antes de que lleguen a producción
En Weblindrome ofrecemos Comercio electrónico para ayudarte con esta y otras implementaciones. Solicita una cotización personalizada.