Blog do Alan
voltar

Laboratório Rack Mini Profiler · #01

Identificando o problema de query N+1

O rack-mini-profiler é uma gem Rails que mostra, na própria página, onde cada requisição gasta o tempo: controller, view e cada consulta ao banco. Ele consegue isso escutando os eventos de instrumentação que o próprio Rails emite (a action rodando, o template renderizando, cada SQL).

Neste primeiro vídeo o foco é o problema de query N+1, que acontece quando uma consulta busca a lista e cada item dispara uma consulta extra para o dado relacionado.

Todo o código está no repositório rmp-lab, um app Rails lento de propósito: dá para clonar, rodar e ver o mesmo painel do vídeo.

O que o vídeo cobre

Como ler o painel (badge, árvore de tempos e contador de consultas) e identificar o problema de query N+1: a mesma página de 50 posts que dispara 51 consultas ao banco numa versão e apenas 2 na outra.

Referências dos eventos

O painel mostra dois tipos de evento, cada um de uma fonte documentada.

Eventos do servidor (o GET, a action e a view) vêm da instrumentação do Rails: process_action.action_controller (a action), render_template.action_view (a view) e sql.active_record (cada consulta).

Eventos do navegador (a tabela client event: Navigation, Response, DOM Content Loaded, Load...) vêm da Navigation Timing API do W3C, com a definição de cada atributo também no MDN.