← Back to plugins Local

Slow queries

An admin-only plugin that turns your mdl_log_queries table into a practical UI to find, triage, and analyze slow SQL statements executed by Moodle.

Frankenstyle local_slow_queries
Category Local
Reported sites 9 sites
Screenshot of Slow queries

About Slow queries

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 único
  • qtype - tipo da consulta (armazenado pelo seu logger)
  • sqltext - texto da instrução SQL
  • sqlparams - parâmetros (representação em string)
  • error - diferente de zero marca erro
  • info - dados extras opcionais
  • backtrace - backtrace em string
  • exectime - segundos decimais
  • timelogged - 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:

  1. Encontra o primeiro frame contendo /lib/dml/
  2. Mostra o próximo frame (geralmente o componente Moodle que chamou a camada de banco)
  3. 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:config em context_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
Related

Other Moodle plugins

Screenshot of Kopere Dashboard

Kopere Dashboard

local_kopere_dashboard

Kopere Dashboard is a tool panel with reports, online users, backup, notifications and more.

2546 sites Details →
Screenshot of GeniAI

GeniAI

local_geniai

The GeniAI plugin for Moodle revolutionizes student-course interaction by providing an intelligent virtual assistant to instantly clarify doubts. The assistant offers contextual support, responds to questions in various languages, and adapts to the specific needs of each discipline.

412 sites Details →
Screenshot of Helpdesk and Knowledge base

This plugin that provides a ticketing system for managing helpdesk requests. It allows users to create and track tickets while enabling administrators and support teams to manage and respond efficiently.

365 sites Details →