Bežné príznaky problému s dotazom N+1 zahŕňajú nasledujúce podrobné ukazovatele:
- Nadmerné množstvo dopytov: Najzreteľnejším znakom je, že vaša aplikácia vykonáva oveľa viac databázových dopytov, ako sa očakávalo. Zvyčajne vidíte jeden počiatočný dotaz na načítanie zoznamu záznamov, po ktorom nasleduje ďalší dotaz pre každý záznam na načítanie údajov súvisiacich s týmito údajmi. Napríklad načítanie 10 používateľov a potom spustenie 10 samostatných dotazov, aby ste dosiahli príspevky každého používateľa v 11 dotazoch namiesto jedného optimalizovaného dotazu [1] [3].
- Časy odozvy s pomalou aplikáciou: Pretože každý dopyt vyžaduje spiatočnú cestu do databázy, kumulatívny účinok mnohých malých dotazov výrazne spomaľuje získavanie údajov. To vedie k pomalšiemu načítaniu stránky alebo odpovedí API, čím sa aplikácia znížila reagujúca na žiadosti používateľa [1] [5].
- Vysoké databázové zaťaženie: Databázový server prežíva zvýšené zaťaženie v dôsledku veľkého počtu dopytov, ktoré môžu namáhať zdroje a znížiť celkovú priepustnosť systému. To môže degradovať výkon a obmedziť škálovateľnosť s rastom počtu používateľov alebo údajov [3] [5] [6].
- Neviditeľné v protokoloch Slow Query: Na rozdiel od jediného pomalého dotazu sa problém N+1 často nevšimne v protokoloch s pomalými dotazmi, pretože každý jednotlivý dotaz beží rýchlo. Agregovaný účinok mnohých dotazov však spôsobuje degradáciu výkonu [2].
- Neočakávané alebo skryté dotazy vyvolané ORM: Pri použití rámcov mapovania (ORM) s relatívnou hodnotou objektu (ORM) sa problém N+1 často vyskytuje v dôsledku lenivého zaťaženia alebo nesprávnej konfigurácie. Prístup k súvisiacim entitám v slučke môže vyvolať ďalšie dotazy bez explicitných hovorov v kóde, čo sťažuje zistenie len pohľadom na zdrojový kód [2] [5] [6].
- Výkonné prekážky v vzorcoch načítania údajov: Ak má vaša aplikácia komplexné vzťahy s objektmi a načítava súvisiace údaje skôr vo viacerých krokoch ako v jednom optimalizovanom dopyte, tento model je silným indikátorom problému N+1 [6].
Stručne povedané, spoločné príznaky sú neočakávane vysoký počet databázových dopytov pre to, čo by malo byť jednoduché získavanie údajov, pomalé časy odozvy v dôsledku viacerých databázových spiatočných ciest, zvýšené zaťaženie databázového servera a ťažkosti s problémom, pretože každý dotaz sa rýchlo vykonáva individuálne, ale kolektívne spôsobuje oneskorenie. Tieto príznaky sú obzvlášť prevládajúce v aplikáciách využívajúcich ORM s predvoleným lenivým správaním zaťaženia [1] [2] [3] [6] [7].
Citácie:
[1] https://planetscale.com/blog/what-is-n-1-query-problem-and-----solve-it
[2] https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-orm-object-object-relational-mapping
[3] https://www.pingcap.com/article/how-to-efically-solve-the-n1-query-problem/
[4] https://evedev.com/blog/development/the-n1-query-problemlem-what-is-it-m-----tow---you-solve-it/
[5] https://digma.ai/n1-query-problem-and-how-to-detect-it/
[6] https://www.neurelo.com/
[7] https://dev.to/lovestaco/the-w1-query-problem-the-silent-performance-killer-2b1c
[8] https://www.pullRequest.com/blog/Adaiding-n-1-database-queraties-in-asp-net-a-practical-guide/