Galite efektyviai naudoti „Laravel Debugbar“, kad nustatytumėte N+1 užklausų problemas savo „Laravel“ programoje, atlikdami šiuos veiksmus ir suprasdami jos teikiamas funkcijas:
Kokia yra N+1 užklausos problema?
N+1 užklausos problema iškyla, kai jūsų programa pateikia vieną užklausą, kad gautų įrašų rinkinį (n), ir tada pateikia papildomą kiekvieno įrašo užklausą, kad gautų susijusius duomenis, todėl iš viso pateikiama N+1 užklausa. Tai lemia našumo pablogėjimą dėl per didelių duomenų bazių užklausų [4] [5].„Laravel Debugbar“ naudojimas N+1 užklausoms aptikti
- Diegimas ir sąranka: Pirmiausia įdiekite „Laravel Debugbar“ per kompozitorių, jei dar neįdiegta. Jis sklandžiai integruoja su „Laravel“ ir suteikia vaizdinę sąsają, skirtą stebėti užklausas, įvykdytus užklausos metu [1] [5].
- Realaus laiko užklausų stebėjimas: „Laravel Debugbar“ rodo visas SQL užklausas, įvykdytas užklausoje, įskaitant užklausų skaičių ir jų vykdymo laiką. Tai leidžia pastebėti, kai pakartotinai vykdoma daug panašių užklausų, tai yra n+1 problemos požymis [1] [5].
- Išsami užklausos informacija: „DebugBar“ pateikia išsamią informaciją apie kiekvieną užklausą, įskaitant failą ir eilutės numerį jūsų kode, kur užklausa buvo suaktyvinta. Tai padeda tiksliai nustatyti tikslų kodą, sukeliantį N+1 užklausas, o tai yra neįkainojama didesniuose projektuose [8].
- Individualūs „N+1“ užklausų pranešimai: Kai derinami su „Laravel“ užklausų detektoriaus paketu (kuris integruotas su „DebugBar“), jis gali aiškiai pabrėžti N+1 užklausas, aiškiai pridedant įspėjimus ar pranešimus „Debugbar“ sąsajoje. Šis paketas nustato, kai santykio užklausa vykdoma daugiau nei slenksčio skaičius kartų ir praneša, kad pridėsite nekantrią pakrovimą [2] [3].
Kaip naudoti „DebugBar“, norint nustatyti N+1 užklausas
1. Įgalinkite „Debugbar“ plėtrą: įsitikinkite, kad jūsų vietinėje ar plėtros aplinkoje įjungta „Debugbar“, kad išvengtumėte gamybos informacijos apie užklausą.
2. Įkelkite puslapį ar maršrutą, kurį norite išbandyti: Eikite į puslapį, įtariamą „N+1“ klausimais.
3. Atidarykite „DebugBar“ skydą: „Debugbar“ sąsajoje (paprastai naršyklės apačioje) eikite į skirtuką „Užklausos“.
4. Stebėkite užklausų skaičių: ieškokite pakartotinių užklausų, kurios yra panašios, tačiau skiriasi pagal parametrų vertes, nurodydami, kad kelios užklausos po vieną po vieną pateikia susijusius duomenis.
5. Patikrinkite užklausos kilmę: spustelėkite atskiras užklausas, kad pamatytumėte krūvos pėdsaką arba failo/eilutės numerį, kur buvo įvykdyta užklausa. Tai padeda nustatyti tikslų kilpos arba kodo skyrių, sukeliantį N+1 problemą.
6. Įspėjimus naudokite „Laravel“ užklausų detektorių: pasirinktinai įdiekite „Laravel“ užklausų detektoriaus paketą, kuris gali pridėti įspėjimus „Debugbar“ viduje, kai aptinkamos N+1 užklausos, todėl lengviau pastebėti neįskaičiuojant užklausų [3].
geriausia praktika po identifikavimo
- Norėdami iš anksto įkelti susijusius modelius, naudokite nekantrią pakrovimą (su () `) savo iškalbingose užklausose ir sumažinkite užklausų skaičių.
-Naudokite integruotą „Laravel“ prevenciją, pridėdami „Model :: PreventLazyLoading (! App ()-> IsProduction ())„ Savo „AppServiceProvider“, kad būtų galima išimtis apie tingų krovimą vystymosi metu, padėdami sugauti N+1 užklausas anksčiau [4] [9].
- Nuolat stebėkite klausimus su „Debugbar“ kuriant, kad būtų išlaikytas optimalus užklausų atlikimas.
Pasinaudoję „Laravel Debugbar“ užklausų vizualizavimu ir integruojant tokius įrankius kaip „Laravel Query Detector“, galite efektyviai nustatyti ir išspręsti N+1 užklausų problemas, žymiai pagerindami jūsų programos duomenų bazės našumą [1] [2] [3] [5].
Citatos:
[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-preblem
[5] https://www.linkedin.com/pulse/handling-n1-query-prlemlem-laravel-developers-haseeb-mushtaq-udusf
[6] https://laraveldaily.com/lesson/laravel-lequent-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-1-query-prlemlem-and-how-to-solve-it