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.