19 min de leitura · Guia técnico
WooCommerce lento é um problema causado pela combinação de consultas intensas ao banco de dados, ausência de cache de objetos e infraestrutura subdimensionada para o volume de produtos e tráfego da loja. Para diagnosticar e corrigir a lentidão, siga estes passos:
- Identifique o gargalo real com Query Monitor e logs de slow queries do MySQL
- Configure cache de objetos com Redis e exclua páginas dinâmicas do cache de página inteira
- Otimize as tabelas do banco de dados e remova transients expirados
- Ajuste as configurações de PHP-FPM e aumente o limite de memória do PHP
- Ative CDN e compressão de assets estáticos
- Avalie se a hospedagem atual suporta o volume de tráfego da loja
Pré-requisitos para otimizar o WooCommerce lento
- Acesso ao painel de administração do WordPress com permissão de administrador
- Acesso SSH ao servidor (recomendado para ajustes em MySQL e PHP)
- WooCommerce 8.x ou superior instalado com WordPress 6.4+
- PHP 8.1 ou superior (recomendado PHP 8.3 para melhor desempenho)
- MySQL 8.0 ou MariaDB 10.6+ configurado no servidor
- Plugin Query Monitor instalado para diagnóstico inicial
- Acesso ao arquivo
wp-config.phpe aomy.cnfdo MySQL - Backup completo do banco de dados antes de qualquer alteração
Por que o WooCommerce fica lento: causas mais comuns
A lentidão em lojas WooCommerce raramente tem uma única origem. O problema costuma ser a soma de fatores que, individualmente, seriam toleráveis, mas juntos degradam o tempo de resposta do servidor de forma significativa. Entender cada causa permite agir com precisão, sem desperdiçar tempo em otimizações que não vão resolver o problema real.
As causas mais frequentes de WooCommerce lento são:
- Excesso de consultas ao banco de dados: cada página de produto pode gerar dezenas de queries ao MySQL para buscar preços, estoque, variações, avaliações e metadados. Em lojas com centenas de produtos, isso se multiplica rapidamente.
- Tabelas de banco de dados inchadas: as tabelas
wp_optionsewp_postmetaacumulam transients expirados, logs de plugins e dados obsoletos que aumentam o tempo de cada consulta. - Ausência de cache de objetos: sem Redis ou Memcached, o WordPress repete as mesmas queries ao MySQL a cada requisição, mesmo que o resultado seja idêntico.
- Plugins mal otimizados: plugins de reviews, comparação de produtos, wishlist e construtores de página frequentemente adicionam queries desnecessárias em todas as páginas da loja.
- Hospedagem subdimensionada: planos compartilhados com CPU e RAM limitados não conseguem processar o volume de requisições de uma loja com tráfego moderado.
- PHP desatualizado ou mal configurado: versões antigas do PHP (7.4 ou anteriores) processam o código do WooCommerce significativamente mais devagar que o PHP 8.3.
- Imagens não otimizadas: imagens de produto em alta resolução sem compressão aumentam o tempo de carregamento percebido pelo usuário, mesmo que o servidor responda rápido.
Para confirmar qual dessas causas está afetando sua loja, o primeiro passo é instalar o plugin Query Monitor e analisar o painel de queries em uma página de produto e na página de listagem de categoria.
Como identificar o gargalo com Query Monitor e slow query log
Diagnosticar performance de banco de dados é o ponto de partida para qualquer otimização eficaz. O Query Monitor exibe em tempo real todas as consultas SQL executadas em cada carregamento de página, incluindo tempo de execução, origem (qual plugin ou função gerou a query) e se há queries duplicadas.
Após instalar o Query Monitor, acesse uma página de produto e clique no menu flutuante que aparece na barra de administração. Procure por:
- Queries com tempo acima de 100ms — candidatas imediatas a otimização
- Queries duplicadas — indicam ausência de cache de objetos
- Total de queries acima de 100 por página — sinal de plugins problemáticos
Para análise mais profunda, ative o log de slow queries diretamente no MySQL. Acesse o arquivo de configuração do MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Adicione ou edite as seguintes linhas na seção [mysqld]:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = ON
Reinicie o MySQL para aplicar:
sudo systemctl restart mysql
Após alguns minutos de uso da loja, analise o log:
sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
Output esperado:
Reading mysql slow query log from /var/log/mysql/slow.log
Count: 47 Time=2.35s (110s) Lock=0.00s (0s) Rows=1234.0 (57998)
SELECT * FROM wp_postmeta WHERE meta_key = '_stock_status' AND post_id IN (...)
...
Esse output mostra as queries mais lentas ordenadas por tempo total. Queries na tabela wp_postmeta sem índice adequado são extremamente comuns em lojas WooCommerce com muitos produtos.
Para verificar se os índices do WooCommerce estão presentes, conecte ao MySQL e execute:
SHOW INDEX FROM wp_postmeta;
Se o índice meta_value estiver ausente, o WooCommerce oferece uma ferramenta nativa em WooCommerce > Status > Ferramentas > Criar índices de dados que resolve isso sem necessidade de SQL manual.
Configurando Redis como cache de objetos para acelerar o WooCommerce
O cache de objetos em memória é uma das otimizações com maior impacto em lojas WooCommerce, pois elimina a repetição de queries idênticas ao MySQL. O Redis armazena os resultados em RAM e os serve diretamente nas requisições seguintes, sem tocar no banco de dados.
Em servidores com Ubuntu 24.04 ou Debian 12, instale o Redis com:
sudo apt update && sudo apt install redis-server -y
Verifique se o Redis está ativo:
sudo systemctl status redis-server
Output esperado:
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled)
Active: active (running) since ...
Instale o plugin Redis Object Cache no WordPress. Após ativar, adicione as seguintes linhas ao wp-config.php antes da linha /* That's all, stop editing! */:
define('WP_CACHE_KEY_SALT', 'minha_loja_woo_');
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
No painel do plugin em Configurações > Redis, clique em Ativar Cache de Objetos. O status deve mudar para Conectado.
Para confirmar que o Redis está sendo usado, execute no terminal:
redis-cli monitor
Ao navegar pela loja, você verá comandos GET e SET sendo registrados em tempo real, confirmando que o cache está funcionando. Nas requisições seguintes à mesma página, apenas comandos GET aparecerão — sem novas queries ao MySQL.
Para lojas em hospedagem compartilhada sem acesso SSH, verifique se o plano oferece Redis gerenciado. Caso contrário, considerar a migração para um VPS é o caminho mais eficiente — veja o artigo Comparativo: Hospedagem de sites vs. VPS: qual é a melhor opção? para entender quando essa migração faz sentido.
Otimizando o banco de dados MySQL para lojas WooCommerce
A manutenção regular do banco de dados é frequentemente negligenciada em lojas WooCommerce, mas tem impacto direto na velocidade de resposta. Com o tempo, as tabelas acumulam dados desnecessários que aumentam o tempo de cada consulta.
Os principais pontos de otimização são:
- Remoção de transients expirados: o WooCommerce e plugins de terceiros criam transients temporários que nem sempre são removidos automaticamente
- Limpeza de revisões de posts: cada atualização de produto cria uma revisão no banco de dados
- Otimização de tabelas fragmentadas: após exclusões em massa, as tabelas ficam fragmentadas
- Limpeza de sessões de carrinho abandonadas: a tabela
wp_woocommerce_sessionsacumula sessões antigas
Para limpar transients expirados via SQL, conecte ao banco de dados e execute:
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%'
AND option_name IN (
SELECT option_name FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP()
);
Atenção: sempre faça backup completo do banco de dados antes de executar comandos DELETE. Use o comando mysqldump -u root -p nome_do_banco > backup.sql para garantir um ponto de restauração.
Para limpar sessões antigas do WooCommerce (mais de 48 horas):
DELETE FROM wp_woocommerce_sessions
WHERE session_expiry < UNIX_TIMESTAMP(NOW() - INTERVAL 48 HOUR);
Para otimizar todas as tabelas do banco de dados de uma vez:
mysqlcheck -u root -p --optimize --all-databases
Automatize essa limpeza com o plugin WP-Optimize ou configure um cron job semanal no servidor. Para lojas com alto volume de pedidos, execute a limpeza de sessões diariamente.
Ajuste também as configurações do MySQL para melhor performance com WooCommerce. No arquivo my.cnf:
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
query_cache_type = 0
max_connections = 150
innodb_flush_log_at_trx_commit = 2
O valor de innodb_buffer_pool_size deve ser aproximadamente 70% da RAM disponível em servidores dedicados ao banco de dados. Para referência adicional sobre conexões remotas ao MySQL, consulte o artigo Conectando remotamente ao MySQL - cPanel.
Configurando PHP-FPM e ajustes de memória para WooCommerce
O desempenho do PHP tem impacto direto na velocidade de processamento de cada requisição do WooCommerce. Configurações padrão de hospedagem compartilhada frequentemente limitam a memória disponível para o PHP, causando lentidão ou erros em páginas complexas da loja.
No wp-config.php, defina o limite de memória do WordPress:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
No arquivo de configuração do PHP (geralmente em /etc/php/8.3/fpm/php.ini no Ubuntu 24.04), ajuste:
memory_limit = 256M
max_execution_time = 300
max_input_vars = 5000
upload_max_filesize = 64M
post_max_size = 64M
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
O OPcache é especialmente importante: ele compila e armazena em memória o bytecode PHP do WooCommerce, eliminando a necessidade de recompilar os arquivos a cada requisição. Em lojas com tráfego moderado, o OPcache sozinho pode reduzir o tempo de processamento PHP em até 40%.
Para PHP-FPM, ajuste o pool de workers no arquivo /etc/php/8.3/fpm/pool.d/www.conf:
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
Reinicie o PHP-FPM após as alterações:
sudo systemctl restart php8.3-fpm
Para verificar se o OPcache está ativo, crie um arquivo temporário de diagnóstico:
php -r "var_dump(opcache_get_status()['opcache_enabled']);"
Output esperado:
bool(true)
Cache de página inteira: configuração correta para WooCommerce
O cache de página inteira acelera drasticamente o carregamento para visitantes não autenticados, mas exige configuração específica para lojas WooCommerce. Páginas dinâmicas como carrinho, checkout e minha conta nunca devem ser cacheadas, pois contêm dados exclusivos de cada usuário.
Independentemente do plugin de cache escolhido (WP Rocket, LiteSpeed Cache ou W3 Total Cache), as seguintes URLs devem ser excluídas do cache de página inteira:
/carrinho/ou/cart//finalizar-compra/ou/checkout//minha-conta/ou/my-account/- Qualquer URL com parâmetros de sessão ou query strings de filtro
No WP Rocket, acesse Configurações > Cache > Nunca Cachear estas URLs e adicione as páginas acima. O WP Rocket detecta automaticamente as páginas do WooCommerce na maioria dos casos, mas confirme manualmente.
Para o LiteSpeed Cache em servidores com LiteSpeed Web Server, a integração é nativa e o cache de objetos via Redis pode ser ativado diretamente no painel do plugin sem configuração adicional no servidor.
Verifique se o cache está funcionando corretamente inspecionando os headers HTTP de uma página de produto:
curl -I https://sualoja.com.br/produto/exemplo/
Output esperado (com cache ativo):
HTTP/2 200
x-cache: HIT
cache-control: max-age=3600
Se o header x-cache mostrar MISS na primeira requisição e HIT nas seguintes, o cache está funcionando corretamente.
Problemas comuns e como resolver
Sintoma: página de checkout extremamente lenta ou com timeout
Causa: a página de checkout executa múltiplas verificações simultâneas — validação de estoque, cálculo de frete, aplicação de cupons e criação de sessão — gerando dezenas de queries ao MySQL em sequência. Em servidores com max_execution_time baixo ou conexões MySQL limitadas, isso resulta em timeout.
Solução: aumente o max_execution_time para 300 segundos no php.ini, verifique se a tabela wp_woocommerce_sessions está sendo limpa regularmente e confirme que a página de checkout está excluída do cache de página inteira. Desative plugins de checkout desnecessários e teste com o tema padrão do WordPress para isolar conflitos.
Sintoma: páginas de listagem de produtos lentas com muitos filtros
Causa: plugins de filtro de produtos (como FacetWP ou WooCommerce Product Filter) geram queries complexas com múltiplos JOINs nas tabelas wp_postmeta e wp_terms. Sem índices adequados, essas queries podem levar vários segundos.
Solução: execute a ferramenta de criação de índices do WooCommerce em WooCommerce > Status > Ferramentas. Considere usar o recurso de lookup tables do WooCommerce (ativado em WooCommerce > Status > Ferramentas > Criar tabelas de dados de produtos), que move metadados críticos de produtos para tabelas dedicadas com índices otimizados.
Sintoma: loja lenta apenas para usuários logados
Causa: usuários autenticados não recebem cache de página inteira, então cada requisição processa o PHP e consulta o banco de dados do zero. Sem cache de objetos (Redis), as queries se repetem a cada clique.
Solução: configure o Redis Object Cache conforme descrito neste artigo. Para lojas com área de membros ou clientes frequentes, considere também o cache de fragmentos — técnica que cacheia partes específicas da página (como o menu de navegação) mesmo para usuários logados.
Sintoma: lentidão após instalar novo plugin ou tema
Causa: plugins mal desenvolvidos podem adicionar queries desnecessárias em todas as páginas, carregar scripts em páginas onde não são necessários ou criar conflitos com o cache existente.
Solução: use o Query Monitor para comparar o número de queries antes e depois da instalação do plugin. Se o número aumentar significativamente, verifique se o plugin tem opções para limitar o carregamento de scripts por página. Plugins de construtores de página (Elementor, Divi) são especialmente conhecidos por adicionar overhead em páginas de produto.
Perguntas frequentes sobre WooCommerce lento
Por que o WooCommerce fica mais lento que um site WordPress comum?
O WooCommerce adiciona consultas de banco de dados intensas para carrinho, estoque, preços e sessões de usuário. Cada página de produto pode gerar dezenas de queries adicionais ao MySQL, além de carregar scripts e estilos extras que um site simples não precisa. Isso exige configuração de cache e banco de dados mais cuidadosa do que em instalações WordPress padrão.
Qual plugin de cache funciona melhor com WooCommerce?
Plugins como WP Rocket, LiteSpeed Cache e W3 Total Cache funcionam com WooCommerce, mas exigem configuração específica: páginas de carrinho, checkout e minha conta devem ser excluídas do cache de página inteira, pois contêm conteúdo dinâmico por usuário. O LiteSpeed Cache tem integração nativa com servidores LiteSpeed e oferece cache de objetos via Redis sem configuração adicional.
Como identificar quais consultas MySQL estão deixando o WooCommerce lento?
Ative o log de slow queries no MySQL com slow_query_log = ON e long_query_time = 1 no arquivo my.cnf. Ferramentas como Query Monitor (plugin WordPress) exibem em tempo real todas as queries executadas em cada página, incluindo tempo de execução e origem. Isso permite identificar exatamente qual função ou plugin está gerando consultas lentas.
O WooCommerce lento pode ser causado pela hospedagem?
Sim. Hospedagem compartilhada com recursos limitados de CPU, RAM e I/O de disco é uma das causas mais comuns de lentidão em lojas WooCommerce com tráfego moderado. Lojas com mais de 500 produtos ou tráfego acima de 200 visitas simultâneas geralmente precisam de um VPS ou servidor dedicado com PHP-FPM, Redis e MySQL otimizado para operar com boa performance.
Como o Redis ajuda a acelerar o WooCommerce?
O Redis funciona como cache de objetos em memória, armazenando resultados de consultas ao banco de dados e transients do WordPress. Com o plugin Redis Object Cache configurado, o WooCommerce evita repetir as mesmas queries ao MySQL a cada requisição, reduzindo significativamente o tempo de resposta do servidor, especialmente em páginas de listagem de produtos e no processo de checkout.
Conclusão
- Diagnostique antes de otimizar: use Query Monitor e o slow query log do MySQL para identificar exatamente onde está o gargalo — cache, banco de dados, PHP ou infraestrutura — antes de instalar plugins ou fazer alterações.
- Redis é prioridade: configurar o cache de objetos com Redis é a otimização com melhor custo-benefício para lojas WooCommerce, eliminando queries repetidas e reduzindo a carga no MySQL de forma imediata.
- Avalie a infraestrutura: lojas em crescimento frequentemente superam os limites de hospedagem compartilhada; migrar para um ambiente com PHP-FPM, Redis e MySQL dedicado é muitas vezes mais eficaz do que acumular plugins de otimização.
Leia também
- Guia para resolver erro de memória no WordPress: diagnóstico e ampliação
- Solucionar erro 500 no WordPress: diagnóstico rápido e correção definitiva
- Solucionar plugin causando lentidão no WordPress (e desativar cirurgicamente)
Precisa de ajuda com performance do WooCommerce?
Uma loja lenta perde vendas — cada segundo a mais no carregamento impacta diretamente a taxa de conversão. A AviraHost oferece planos de hospedagem otimizados para WordPress e WooCommerce, com suporte técnico especializado para configuração de cache, banco de dados e PHP.
Conheça os planos de hospedagem para WooCommerce da AviraHost