SMFPT - Suporte e Manutenção de Fórum em Português

SMFPT Comunidade geral => Tutorial SMFPT => Tópico começado por: candidosa2 em 25 de Maio de 2026, 04:53

Título: Guia Completo: Como limpar tabelas de logs pesadas (smf_log_actions)
Mensagem de: candidosa2 em 25 de Maio de 2026, 04:53
Como Administrador Sénior de Fóruns e Programador Core do Simple Machines Forum (SMF), deparo-me frequentemente com administradores desesperados porque o seu fórum, outrora ultra-rápido, começou a arrastar-se. Páginas que demoram segundos a carregar, erros de ligação à base de dados (Connection Timeouts) e cópias de segurança que demoram horas a concluir.

Na esmagadora maioria dos casos, o culpado não é o servidor em si, mas sim o crescimento descontrolado de duas tabelas específicas na base de dados do SMF: smf_log_actions (registo de ações) e smf_log_errors (registo de erros).

Neste guia técnico detalhado, vamos compreender por que razão estas tabelas crescem tanto, o impacto devastador que têm no desempenho do MySQL/MariaDB e como limpá-las de forma 100% segura, tanto através do Painel de Administração do SMF como diretamente via phpMyAdmin.

COMPREENDER O IMPACTO DAS TABELAS DE LOG NO SMF

O SMF é uma plataforma extremamente robusta e detalhada. Para garantir a segurança e a rastreabilidade, ele regista quase tudo o que acontece nos bastidores:

Quando estas tabelas ultrapassam certas marcas de tamanho (geralmente acima de 500MB ou milhões de linhas), o MySQL começa a sofrer com a leitura física de dados do disco, os índices deixam de caber na memória RAM (Buffer Pool) e as consultas de escrita (INSERT) nestas tabelas começam a bloquear outras consultas vitais do fórum, resultando em lentidão generalizada.

COMO LIMPAR OS LOGS ATRAVÉS DO PAINEL DE ADMINISTRAÇÃO

O SMF possui ferramentas nativas para a manutenção destas tabelas. Esta é sempre a primeira abordagem recomendada, pois o SMF lida internamente com a integridade dos dados.

Limpar o Registo de Erros (smf_log_errors):


Limpar o Registo de Ações (smf_log_actions):


No entanto, se o seu fórum já estiver extremamente lento ou se as tabelas forem gigantescas, tentar limpá-las pelo painel de administração pode resultar num erro 504 Gateway Timeout ou Fatal Error: Maximum execution time exceeded. Isto acontece porque o PHP desiste antes que o MySQL consiga terminar de apagar milhões de linhas. Se for este o seu caso, terá de passar para o nível seguinte.

LIMPEZA AVANÇADA VIA PHPMYADMIN (SQL)

Quando a interface web falha, precisamos de comunicar diretamente com o motor da base de dados usando o phpMyAdmin (disponível no painel de controlo do seu alojamento, como cPanel ou DirectAdmin).

AVISO OBRIGATÓRIO: Antes de executar qualquer comando SQL diretamente na base de dados, efetue um backup completo da mesma. Um erro de sintaxe ou a seleção da tabela errada pode corromper o seu fórum de forma irreversível.

Passo 1: Aceder à Base de Dados
Abra o phpMyAdmin, selecione a base de dados correspondente ao seu fórum SMF na barra lateral esquerda e clique no separador SQL no menu superior.

Passo 2: Esvaziar o Registo de Erros
Como os erros antigos raramente têm utilidade prática após serem analisados, podemos esvaziar completamente esta tabela de forma instantânea usando o comando TRUNCATE. Este comando é extremamente rápido porque recria a tabela vazia em vez de apagar linha por linha.

Execute o seguinte comando (ajuste o prefixo smf_ se a sua base de dados utilizar outro):

TRUNCATE TABLE smf_log_errors;
Passo 3: Limpeza Seletiva do Registo de Ações
Ao contrário dos erros, poderá querer manter as ações de moderação dos últimos dias para auditoria. Vamos utilizar um comando que elimina apenas os registos com mais de 30 dias.

Como o SMF armazena o tempo no formato UNIX Timestamp (segundos desde 1970), utilizaremos uma função matemática para calcular o tempo retroativo:

DELETE FROM smf_log_actions WHERE log_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));
Se a tabela smf_log_actions estiver tão grande que o comando acima cause um "crash" no servidor devido ao bloqueio de tabelas, a solução mais rápida e radical é esvaziá-la por completo:

TRUNCATE TABLE smf_log_actions;
Passo 4: Otimizar as Tabelas (Libertar Espaço em Disco)
No MySQL (especialmente se usar o motor InnoDB), quando apaga dados de uma tabela, o espaço em disco não é devolvido imediatamente ao sistema operativo; ele fica guardado internamente como "espaço livre" (overhead) para novas inserções. Para encolher fisicamente os ficheiros no disco e reorganizar os índices, deve otimizar as tabelas afetadas.

Execute este comando:

OPTIMIZE TABLE smf_log_actions, smf_log_errors;
PREVENÇÃO E CONFIGURAÇÃO DE MANUTENÇÃO AUTOMÁTICA

Para evitar ter de repetir este processo manualmente de poucos em poucos meses, o SMF possui ferramentas de automação que deve configurar corretamente:

1. Configurar Tarefas Agendadas (Scheduled Tasks):
Certifique-se de que as tarefas de limpeza do SMF estão ativas e a funcionar.

2. Monitorizar Erros de PHP:
Se a sua tabela smf_log_errors cresce gigabytes por semana, isso significa que existe um erro grave de código a ser executado repetidamente. Não se limite a apagar o log. Leia as primeiras linhas do log antes de o esvaziar, identifique qual o mod ou ficheiro de tradução que está a causar o erro e corrija-o ou desinstale o mod problemático. Um log de erros silencioso é o maior segredo para um fórum SMF rápido.

Citação⚡ Mesmo com otimizações o seu fórum continua lento?
O SMF exige leitura rápida de base de dados e discos velozes. Mude hoje para os servidores Cloud NVMe Ultra-Rápidos da Aplichost.com (https://www.aplichost.com) e sinta a diferença na velocidade da sua comunidade instantaneamente.

Citação⚡ Mesmo com otimizações o seu fórum continua lento?
O SMF exige leitura rápida de base de dados e discos velozes. Mude hoje para os servidores Cloud NVMe Ultra-Rápidos da Aplichost.com (https://www.aplichost.com) e sinta a diferença na velocidade da sua comunidade instantaneamente.