A base de dados do PrestaShop: tabelas que crescem, índices e limpeza segura
Ao fim de alguns anos, uma loja pode ter milhões de linhas que não servem para nada. Dizemos-lhe quais se podem limpar e em quais não se mexe.
A base de dados do PrestaShop cresce com cada visita, não apenas com cada encomenda. Ao fim de alguns anos, é habitual encontrar tabelas com milhões de linhas de estatísticas que ninguém consulta e que tornam mais lentas as cópias de segurança e alguns ecrãs.
As tabelas que mais crescem
| Tabela | O que guarda | Pode limpar-se? |
|---|---|---|
connections, connections_page, connections_source | Visitas para as estatísticas | Sim, o antigo |
guest | Um registo por visitante | Com cuidado (os carrinhos referenciam-no) |
page_viewed, statssearch | Estatísticas | Sim, o antigo |
log | Registo do back office | Sim, o antigo |
cart, cart_product | Carrinhos, incluindo os abandonados | Só carrinhos antigos sem encomenda |
mail | Registo de emails enviados | Sim |
Limpeza segura
- Cópia de segurança completa antes de mais nada.
- Apague por data e por lotes, não tudo de uma vez, para não bloquear a loja:
DELETE FROM ps_connections
WHERE date_add < NOW() - INTERVAL 12 MONTH
LIMIT 50000;
- Nos carrinhos, apague só os que não têm encomenda:
DELETE c FROM ps_cart c
LEFT JOIN ps_orders o ON o.id_cart = c.id_cart
WHERE o.id_order IS NULL
AND c.date_upd < NOW() - INTERVAL 6 MONTH;
Consultas lentas
Ative o registo de consultas lentas do servidor MySQL ou MariaDB (slow_query_log) durante um dia de tráfego normal. As consultas que aparecem repetidas costumam vir de um módulo concreto e quase sempre se resolvem com um índice.
Afinação do servidor
Se gere o servidor, o parâmetro que mais influencia é innodb_buffer_pool_size: idealmente, grande o suficiente para que as tabelas de uso diário caibam em memória. Mas em servidores partilhados ou com pouca RAM, aumentá-lo sem medida pode deixar o sistema sem memória: ajuste-o ao tamanho real dos seus dados.
Menos dados, menos problemas
Desative as estatísticas que não usa (módulos stats*) e programe a limpeza uma vez por mês. A sua base de dados, as suas cópias e as suas migrações vão ficar mais rápidas.