Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kateri so skupni znaki problema poizvedbe N 1


Kateri so skupni znaki problema poizvedbe N 1


Skupni znaki problema poizvedbe N+1 vključujejo naslednje podrobne kazalnike:

- Prekomerno število poizvedb: Najbolj očiten znak je, da vaša aplikacija izvaja veliko več poizvedb baze podatkov, kot je bilo pričakovano. Običajno vidite eno začetno poizvedbo, da dobite seznam zapisov, ki ji sledi dodatna poizvedba za vsak zapis, da dobite povezane podatke. Na primer, pridobite 10 uporabnikov in nato zaženete 10 ločenih poizvedb, da dobite objave vsakega uporabnika, rezultat v 11 poizvedbah namesto samo ene optimizirane poizvedbe [1] [3].

- Počasni odzivni časi aplikacije: Ker vsaka poizvedba zahteva krog v bazo podatkov, kumulativni učinek številnih majhnih poizvedb znatno upočasni iskanje podatkov. To vodi do počasnejših nalaganj strani ali odzivov API -ja, zaradi česar je aplikacija manj odzivna na zahteve uporabnikov [1] [5].

- Visoka obremenitev baze podatkov: strežnik baze podatkov doživlja večjo obremenitev zaradi velikega števila poizvedb, kar lahko obremeni vire in zmanjša celoten pretok sistema. To lahko poslabša zmogljivost in omeji skalabilnost, saj število uporabnikov ali podatkov raste [3] [5] [6].

- Nevidno v dnevnikih počasnih poizvedb: Za razliko od ene same počasne poizvedbe je težava N+1 v dnevnikih počasnih poizvedb pogosto neopažena, ker se vsaka posamezna poizvedba hitro izvaja. Vendar skupni učinek številnih poizvedb povzroči degradacijo uspešnosti [2].

- Nepričakovane ali skrite poizvedbe, ki jih sproži ORM: Pri uporabi okvirov objektnega relacijskega preslikave (ORM) se težava N+1 pogosto pojavi zaradi lene obremenitve ali napačne konfiguracije. Dostop do povezanih subjektov v zanki lahko sproži dodatne poizvedbe brez izrecnih klicev v kodi, zaradi česar je težko zaznati samo s pogledom na izvorno kodo [2] [5] [6].

- Uspešnost ozkih grl v vzorcih pridobivanja podatkov: Če ima vaša aplikacija zapletene odnose z objektom in pridobi povezane podatke v več korakih in ne v eni optimizirani poizvedbi, je ta vzorec močan kazalnik problema N+1 [6].

Če povzamemo, so skupni znaki nepričakovano veliko število poizvedb baze podatkov za preprosto iskanje podatkov, počasni odzivni časi zaradi več okroglih izletov baze podatkov, povečana obremenitev na strežniku baz podatkov in težave pri odkrivanju težave, ker vsaka poizvedba posamezno, vendar skupaj izvede zamude. Ti simptomi so še posebej razširjeni v aplikacijah, ki uporabljajo ORMS s privzetim lenim nalaganjem obnašanja [1] [2] [3] [5] [6] [7].

Navedbe:
[1] https://planetscale.com/blog/what-is-n-1-query-problem-and-how-to-solve-it
[2] https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-Orm-Object-Relational
[3] https://www.pingcap.com/article/how-to-effiptly-solve-the-n1-query-problem/
[4] https://evnedev.com/blog/development/the-n1-query-problem-what-is-it-and-how-do-you-solve-it/
[5] https://digma.ai/n1-query-problem-and-how-to-detect-it/
[6] https://www.neurelo.com/post/what-is-the-n-1-query-problem
[7] https://dev.to/Lovestaco/the-n1-query-problem-the-silent-performance-kkiller-2b1c
[8] https://www.pullrequest.com/blog/avoiding-n-1-tabase-queries-in-asp-net-a-practical-guide/