local_slow_queries é um plugin apenas para administradores que transforma sua
tabela mdl_log_queries em uma interface prática para encontrar,
triar e analisar instruções SQL lentas executadas pelo Moodle.
Ele foca em três fluxos diários:
- Listar e filtrar consultas lentas rapidamente (padrão
exectime > 3s). - Abrir detalhes com SQL + parâmetros e um prompt do ChatGPT pronto para uso incluindo schemas das tabelas.
- Usar dashboards para ver padrões: mais lentas, recorrência, distribuição, CRON vs WEB, por qtype e erros.
O acesso é restrito a:
require_capability("moodle/site:config", context_system::instance())
Fonte de dados
O plugin lê de:
Tabela: mdl_log_queries
Campos usados pela interface:
id- identificador únicoqtype- tipo da consulta (armazenado pelo seu logger)sqltext- texto da instrução SQLsqlparams- parâmetros (representação em string)error- diferente de zero marca erroinfo- dados extras opcionaisbacktrace- backtrace em stringexectime- segundos decimaistimelogged- timestamp Unix
As sugestões de índice no install.xml são focadas no desempenho do
visualizador:
-
timelogged,exectime,qtype,error
Lógica do “chamador” no backtrace
A listagem mostra um “chamador” simplificado derivado do backtrace:
- Encontra o primeiro frame contendo
/lib/dml/ - Mostra o próximo frame (geralmente o componente Moodle que chamou a camada de banco)
- Encurta caminhos absolutos longos para manter a tabela legível
Isso é intencionalmente pragmático: ajuda a identificar rapidamente se a consulta vem de conclusão, indexação de busca, relatórios de fórum etc.
Detecção de CRON
Uma consulta é considerada “CRON” quando seu backtrace contém:
/admin/cli/cron.php
Então a interface:
- marca a coluna CRON ✅
- adiciona um badge CRON
Tratamento de parâmetros
sqlparams em produção pode variar conforme a implementação do logger. Este plugin tenta
interpretar formatos comuns:
- Arrays/objetos JSON
- PHP
serialize()formato - saída semelhante a “var_export” (exemplo:
array ( 0 => 4, 1 => 50, ))
Depois aplica os parâmetros ao SQL substituindo os marcadores posicionais ? sequencialmente.
Observações:
- Esta é uma representação de melhor esforço para análise e reprodução.
- Ela não pretende ser uma reconstituição perfeita de SQL para todos os casos extremos.
Escolhas de UX e UI
Este plugin mantém intencionalmente um visual leve e legível:
- Cards com cantos arredondados
- Sombras suaves
- Badges para categorização rápida (CRON / WEB / ERRO)
- Barras de progresso para relatórios de distribuição/participação
Ele usa os estilos Bootstrap já carregados pelo Moodle e adiciona SCSS mínimo.
Modelo de segurança
- As páginas são acessíveis apenas a usuários com:
-
moodle/site:configemcontext_system
-
Isso é crítico porque o plugin pode revelar:
- SQL bruto
- parâmetros (potencialmente com valores sensíveis)
- caminhos de arquivos nos backtraces
Padrões típicos de uso
Triagem operacional
- Abrir
index.php - Filtrar
exectime >= 10 - Identificar picos pesados de CRON ou timeouts web
- Abrir detalhes e extrair índices candidatos
Monitoramento de regressão
- Verificar volume dos últimos 7 dias
- Comparar tendências máximas/médias semanalmente
- Identificar novos chamadores (componentes) a partir de mudanças no backtrace