Querying: detecção N+1
O curso trata de como detectar consultas N+1 num app Rails. Começa pela assinatura de uma rajada de N+1 no log de desenvolvimento. Depois conta consultas a partir do Ruby com o evento sql.active_record do ActiveSupport::Notifications. Apresenta o assert_queries_count e os helpers parecidos, incluindo o que é preciso para usá-los numa suíte RSpec com transactional fixtures. Configura a gem Bullet, seus canais de alerta, seus três detectores e a safelist. Por fim, situa cada ferramenta em desenvolvimento, teste ou produção.
O que você vai aprender
- ✓Reconhecer o padrão de N+1 no log do Rails com verbose_query_logs
- ✓Contar consultas com uma assinatura de ActiveSupport::Notifications
- ✓Escrever testes com assert_queries_count e ligá-los ao RSpec
- ✓Configurar o Bullet, seus canais de alerta e o Bullet.raise nos testes
- ✓Distinguir os três detectores do Bullet e pôr um falso positivo conhecido na safelist
- ✓Escolher ferramentas de detecção para desenvolvimento, teste e produção
Reconhecendo N+1 no log do Rails
Querying: includes e joins passou sete aulas corrigindo N+1. .includes, .preload, .eager_load e .strict_loading transformam um acesso preguiçoso a uma associação numa consulta extra, ou num erro barulhento, em vez de uma consulta por linha. As sete aulas supunham que você já sabia que a página…
Ler a aula completa grátis →Currículo
7 aulasReconhecendo N+1 no log do Rails
Como ler o log para achar uma rajada de N+1: rótulo repetido, um id que muda, contagem por coleção.
Contando queries com ActiveSupport::Notifications
Assinar eventos sql.active_record para contar consultas pelo Ruby, pulando entradas em cache e de SCHEMA.
assert_queries_count: pegando N+1 num teste
Usar assert_queries_count e helpers parecidos, ligá-los ao RSpec e contar os savepoints das transactional fixtures.
A gem Bullet: configuração e alertas
Acrescentar a gem Bullet ao grupo de desenvolvimento, escolher canais de alerta e fazer testes falharem com Bullet.raise.
Os três detectores do Bullet, e quando ele erra
Os três detectores do Bullet, um falso positivo de carregamento antecipado sem uso e como calá-lo com add_safelist.
Detecção em cada etapa: desenvolvimento, teste, produção
Quais ferramentas de detecção cobrem desenvolvimento, teste e produção, incluindo strict_loading e serviços de APM como o Scout APM.
Juntando tudo: da linha de log à correção
Acompanhar um N+1 da linha de log à correção, comparar dois formatos de correção e montar um detector em Ruby puro.