Como corrigir a lentidão do Tutor LMS com muitos alunos
O que é a lentidão de performance do Tutor LMS?
O Tutor LMS registra a atividade de cada aluno em várias tabelas do banco: o progresso de aula e a conclusão de curso ficam na tabela wp_comments, as tentativas de quiz ficam na tabela própria wp_tutor_quiz_attempts e dados de matrícula e progresso ficam espalhados em wp_usermeta e wp_postmeta. Com poucos alunos isso é leve, mas conforme a base de matrículas cresce essas tabelas incham e as telas que agregam dados de todos os alunos, como o gradebook do instrutor, o relatório de curso e o painel frontend, passam a varrer milhares de linhas a cada carregamento. Sem um cache de objeto persistente, o WordPress repete essas leituras a cada requisição. O resultado é um wp-admin e um dashboard do aluno cada vez mais lentos à medida que o número de alunos sobe.
Como identificar
- O painel do instrutor e o relatório de cursos demoram vários segundos para abrir, e a lentidão piora de forma visível conforme o número de alunos matriculados aumenta.
- O Query Monitor mostra centenas de queries SELECT na tabela wp_comments e em wp_tutor_quiz_attempts a cada carregamento das telas de progresso e gradebook.
- Salvar uma tentativa de quiz ou finalizar uma aula retorna a mensagem ‘Maximum execution time exceeded’ nos picos de acesso, quando muitos alunos enviam respostas ao mesmo tempo.
- O TTFB das páginas de curso no PageSpeed Insights sobe junto com o total de matrículas, e o uso de CPU do servidor PHP dispara nos horários de aula ao vivo.
Como prevenir
- Mantenha o cache de objeto persistente ligado desde o início e monitore o tempo das telas de gradebook com o Query Monitor após cada nova leva de matrículas.
- Dimensione o servidor acima do requisito mínimo do Tutor LMS quando a base passar de algumas centenas de alunos, dando folga de memory_limit e CPU para os picos de aula ao vivo.
- Agende uma rotina mensal de limpeza de linhas órfãs e de otimização de wp_comments e wp_usermeta, sempre com backup, para as tabelas não incharem sem controle.
Causa
- A página da loja do WooCommerce consultando os cursos do Tutor junto com os demais produtos, com a opção Hide Course Products on Shop Page desligada, somando queries de curso à listagem em cada visita.
- Ausência de cache de objeto persistente como Redis ou Memcached, o que faz o WordPress repetir a cada requisição as leituras de progresso e gradebook em vez de servir de memória.
- A tabela wp_comments inchada, porque o Tutor grava ali a conclusão de aula e de curso de cada aluno, deixando lentos os SELECT que agregam o progresso de toda a turma.
- A tabela wp_tutor_quiz_attempts com milhares de tentativas acumuladas e sem índice adequado para os filtros de aluno e de quiz usados pelos relatórios de resultado.
- Servidor abaixo do requisito oficial do Tutor LMS, que pede PHP 7.4 ou superior e MySQL 5.7 ou MariaDB 10.1 ou superior, com memory_limit e max_execution_time apertados para o volume de alunos.
- Linhas órfãs de matrícula e progresso de alunos já removidos acumuladas em wp_usermeta, inflando o autoload e o tamanho das tabelas que as telas do Tutor percorrem.
Como resolver
- Meça onde está o gargalo com o Query Monitor: instale o Query Monitor e abra a tela lenta com a sua conta de instrutor, como o gradebook ou o relatório de curso. Filtre as queries por tempo e por tabela e confirme se o peso está em leituras de wp_comments e da tabela de tentativas de quiz, para atacar a causa certa antes de mudar qualquer configuração.
wp plugin install query-monitor --activate - Confira se o servidor atende ao requisito do Tutor LMS: valide a versão de PHP e do banco contra o requisito oficial do plugin e suba os limites de execução do PHP. Servidor abaixo do mínimo trava as telas que agregam dados de muitos alunos.
wp eval 'echo PHP_VERSION;' memory_limit = 512M max_execution_time = 120 - Tire os cursos da consulta da página da loja: ative a opção Hide Course Products on Shop Page nas configurações avançadas do Tutor LMS. Assim a listagem do WooCommerce deixa de consultar os produtos de curso a cada visita à loja, conforme a documentação do plugin.
Tutor LMS -> Settings -> Advanced -> Hide Course Products on Shop Page - Ative um cache de objeto persistente: habilite Redis ou Memcached no servidor e ligue o drop-in de object cache do WordPress. Com ele, as leituras repetidas de progresso e gradebook passam a vir da memória em vez de bater no banco a cada requisição.
wp plugin install redis-cache --activate wp redis enable wp cache flush - Limpe e otimize as tabelas que o Tutor faz crescer: remova as linhas órfãs de progresso de alunos já apagados e rode a otimização das tabelas que mais incham. Faça isso em horário de baixo acesso e sempre com backup recente, porque a remoção mexe direto no banco.
DELETE um FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL; OPTIMIZE TABLE wp_comments, wp_commentmeta, wp_usermeta;
-- Diagnostico: tamanho das tabelas que o Tutor LMS faz crescer com a base de alunos
-- Rode no phpMyAdmin ou via wp db query. Troque wp_ pelo prefixo real do seu site.
SELECT table_name AS tabela,
table_rows AS linhas,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS tamanho_mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name IN ('wp_comments', 'wp_commentmeta', 'wp_usermeta', 'wp_tutor_quiz_attempts')
ORDER BY (data_length + index_length) DESC;














