Laravel Debugbar můžete efektivně použít k identifikaci problémů dotazů N+1 ve své aplikaci Laravel pomocí těchto kroků a pochopením funkcí, které poskytuje:
Jaký je problém n+1 dotaz?
Problém dotazu N+1 nastává, když vaše aplikace spustí jeden dotaz k načtení sady záznamů (n), a poté spustí další dotaz pro každý záznam, aby načíst související data, což má za následek celkový počet dotazů N+1. To vede k degradaci výkonu v důsledku nadměrných dotazů na databáze [4] [5].Používání Laravel Debugbar k detekci dotazů N+1
- Instalace a nastavení: Nejprve nainstalujte Laravel Debugbar prostřednictvím skladatele, pokud již není nainstalován. Bezproblémově se integruje s Laravelem a poskytuje vizuální rozhraní pro sledování dotazů provedených během požadavku [1] [5].
- Monitorování dotazů v reálném čase: Laravel Debugbar ukazuje všechny dotazy SQL provedené v žádosti, včetně počtu dotazů a jejich doby provádění. To vám umožní zjistit, když je mnoho podobných dotazů opakovaně provozováno, charakteristickým znakem problémů N+1 [1] [5].
- Podrobné informace o dotazu: Debugbar poskytuje podrobné informace o každém dotazu, včetně čísla souboru a řádku řádku v kódu, kde byl dotaz spuštěn. To pomáhá určit přesný kód způsobující dotazy N+1, což je neocenitelné u větších projektů [8].
- Vlastní zprávy pro dotazy N+1: Je -li kombinován s balíčkem detektoru dotazů Laravel (který se integruje s debugbar), může výslovně zvýraznit dotazy N+1 přidáním varování nebo zpráv do rozhraní DebugBar's. Tento balíček detekuje, když je dotaz vztahu proveden více než jen prahový počet a upozorní vás na přidání dychtivého načítání [2] [3].
Jak používat debugbar k identifikaci dotazů N+1
1. Povolte Debugbar ve vývoji: Ujistěte se, že Debugbar je povolen ve vašem místním nebo vývojovém prostředí, aby se zabránilo odhalení podrobností o dotazu ve výrobě.
2. Načtěte stránku nebo trasu, kterou chcete vyzkoušet: Přejděte na stránku podezřelou z problémů N+1.
3. Otevřete panel Debugbar: V rozhraní DebugBar (obvykle ve spodní části prohlížeče) přejděte na kartu „Dotazy“.
4. Sledujte počet dotazů: Vyhledejte opakované dotazy, které jsou podobné, ale liší se podle hodnot parametrů, což označuje více dotazů načítání souvisejících dat jeden po druhém.
5. Zkontrolujte původ dotazu: Kliknutím na jednotlivé dotazy zobrazíte stopy stock nebo číslo souboru/řádku, kde byl dotaz proveden. To pomáhá identifikovat přesnou sekci smyčky nebo kódu způsobující problém N+1.
6. Použijte detektor dotazů Laravel pro upozornění: Volitelně nainstalujte balíček detektoru dotazů Laravel, který může přidat upozornění do debugbar, když jsou detekovány dotazy N+1, což usnadňuje napojení bez ručního počítání dotazů [3].
osvědčené postupy po identifikaci
- Použijte dychtivé načítání (`s ()`) ve vašich výmluvných dotazech k předběžným načtením modelů a snižujte počet dotazů.
-Použijte vestavěnou prevenci Laravel přidáním `model :: preventlazyloading (! App ()-> isProduction ())` ve vašem „AppServiceProvider“, abyste během vývoje vyvolali výjimky na líné zatížení, a pomohli zachytit dotazy N+1 brzy [4] [9].
- Neustále sledujte dotazy s debugbarem během vývoje za účelem udržení optimálního výkonu dotazů.
Tím, že využíváte vizualizaci dotazu Laravel Debugbar a integrace nástrojů, jako je detektor Laravel Query Detector, můžete efektivně identifikovat a opravit problémy dotazů N+1, což výrazně zlepšilo výkon databáze vaší aplikace [1] [2] [3] [5].
Citace:
[1] https://www.luckymedia.dev/blog/laravel-for-beginners-query-performance-issues
[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--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-eager-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-n-query-problem-and-tosolte-it