Você pode usar o Laravel Debugbar de maneira eficaz para identificar problemas de consulta N+1 em seu aplicativo Laravel, seguindo estas etapas e compreendendo os recursos que ele fornece:
Qual é o problema de consulta n+1?
O problema de consulta N+1 ocorre quando seu aplicativo executa uma consulta para recuperar um conjunto de registros (n) e, em seguida, executa uma consulta adicional para cada registro para buscar dados relacionados, resultando no total de consultas n+1. Isso leva à degradação do desempenho devido a consultas excessivas de banco de dados [4] [5].Usando o Laravel Debugbar para detectar n+1 consultas
- Instalação e configuração: Primeiro, instale o Laravel Debugbar via compositor, se ainda não estiver instalado. Ele se integra perfeitamente ao Laravel e fornece uma interface visual para monitorar as consultas executadas durante uma solicitação [1] [5].
- Monitoramento de consultas em tempo real: o Laravel Debugbar mostra todas as consultas SQL executadas em uma solicitação, incluindo o número de consultas e seu tempo de execução. Isso permite identificar quando muitas consultas semelhantes são executadas repetidamente, uma marca registrada de N+1 problemas [1] [5].
- Informações detalhadas da consulta: o DebugBar fornece informações detalhadas sobre cada consulta, incluindo o arquivo e o número da linha no seu código em que a consulta foi acionada. Isso ajuda a identificar o código exato que causa as consultas N+1, que é inestimável em projetos maiores [8].
- Mensagens personalizadas para N+1 consultas: Quando combinadas com o pacote de detector de consulta do Laravel (que se integra ao Debugbar), ele pode destacar as consultas N+1 explicitamente adicionando avisos ou mensagens na interface do Debugbar. Este pacote detecta quando uma consulta de relação é executada mais do que um número limite de vezes e notifica você para adicionar carregamento ansioso [2] [3].
Como usar o Debugbar para identificar N+1 consultas
1. Ativar Debugbar em Desenvolvimento: Verifique se o DebugBar está ativado em seu ambiente local ou de desenvolvimento para evitar expor os detalhes da consulta na produção.
2. Carregue a página ou a rota que deseja testar: Navegue até a página suspeita de ter n+1 problemas.
3. Open DebugBar Painel: Na interface Debugbar (geralmente na parte inferior do navegador), vá para a guia "Consultas".
4. Observe o número de consultas: procure consultas repetidas que sejam semelhantes, mas diferem por valores de parâmetros, indicando várias consultas buscando dados relacionados um por um.
5. Verifique as origens da consulta: clique em consultas individuais para ver o rastreamento da pilha ou o número do arquivo/linha em que a consulta foi executada. Isso ajuda a identificar o loop exato ou a seção de código, causando o problema n+1.
6. Use detector de consulta de Laravel para alertas: Opcionalmente, instale o pacote de detector de consulta Laravel, que pode adicionar alertas dentro do Debugbar quando as consultas n+1 forem detectadas, facilitando a localização sem as consultas manualmente [3].
práticas recomendadas após identificação
- Use carregamento ansioso (`com ()`) em suas consultas eloquentes para pré -carregar modelos relacionados e reduzir o número de consultas.
-Use a prevenção integrada da Laravel, adicionando `Model :: PreventLazyLoading (! App ()-> isProduction ())` em seu `AppServiceProvider` para lançar exceções sobre o carregamento preguiçoso durante o desenvolvimento, ajudando a capturar N+1 consultas cedo [4] [9].
- Monitore continuamente as consultas com o Debugbar durante o desenvolvimento para manter o desempenho ideal da consulta.
Ao alavancar a visualização da consulta do Laravel Debugbar e integrar ferramentas como o Laravel Query Detector, você pode identificar e corrigir eficientemente os problemas de consulta N+1, melhorando significativamente o desempenho do banco de dados do seu aplicativo [1] [2] [3] [5].
Citações:
[1] https://www.luckymedia.dev/blog/laravel-for-beginners-query-permance-estues
[2] https://github.com/beyondcode/laravel-query-detector
[3] https://beyondco.de/docs/laravel-query-detector/usage
[4] https://laravel-news.com/laravel-n1-query-problems
[5] https://www.linkedin.com/pulse/handling-n1-query-problem-laravel-developers-haseeb-mushtaq-udusf
[6] https://laraveldaily.com/lesson/laravel-eloquent-expert/n1-query-packages-examples
[7] https://laraveldaily.com/lesson/eloquent-performance/n1-query-debugbar-ager-loading
[8] https://www.reddit.com/r/laravel/comments/5f7y9f/debugging_the_amount_of_database_queries_per/
[9] https://planetscale.com/blog/what-is-n-1-query-problem-and-ow-to-solve-it