Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mitkä ovat yleisiä virheitä, jotka johtavat n 1 kyselyongelmaan


Mitkä ovat yleisiä virheitä, jotka johtavat n 1 kyselyongelmaan


Yleiset virheet, jotka johtavat N+1 -kyselyongelmaan, kiertävät yleensä tietokannasta haettavan tietokannasta, varsinkin kun käytetään objektio-suhteellista kartoitusta (ORM) -kehyksiä tai tietokantakyselyjen kirjoittamista manuaalisesti. Tässä on yksityiskohtaisia ​​selityksiä näistä virheistä:

** 1. Haettaisiin tietoihin erillisissä kyselyissä
Ensisijainen syy N+1 -kyselyongelmaan on koodin strukturointi, jotta saadaan ensin luettelo tietueista yhdellä kyselyllä, sitten suoritetaan lisäkysely jokaiselle tietueelle liittyvien tietojen hakemiseksi. Esimerkiksi käyttäjaluettelon kysely ja sitten erikseen kysely viesteille jokaiselle käyttäjälle johtaa yhteen kyselyyn käyttäjille sekä N -kyselyille viesteille, joissa N on käyttäjien lukumäärä. Tämä johtaa moniin pieniin kyselyihin yhden optimoidun kyselyn sijasta [1] [2] [3] [7].

** 2. Luottaen laiskaan kuormitukseen oletuksena
Useimmat ORMS käyttää laiskaa kuormitusta oletushaku -strategiana, mikä tarkoittaa, että liittyvät kokonaisuudet haetaan vain, kun sitä käytetään nimenomaisesti. Vaikka tämä voi säästää resursseja, jos niihin liittyvää tietoa ei tarvita, se aiheuttaa useita kyselyjä laukaisemaan kokoelmien iterointia, aiheuttaen tietämättömästi N+1 -ongelman. Esimerkiksi kunkin blogiviestin kirjoittajan käyttäminen laukaisee erikseen erillisen kyselyn viestiä kohden [5].

** 3. Kyselyjen uudelleenkäyttö ilman kontekstuaalisia säätöjä
Saman kyselyn uudelleenkäyttö sovelluksen eri osiin räätälöimättä sitä voi aiheuttaa tarpeetonta tiedonhakua ja pahentaa N+1 -ongelmaa. Kyselyt, joita ei ole optimoitu tietyille käyttötapauksille, voivat hakea epätäydellisiä tietoja, mikä kehottaa lisäkyselyjä niihin liittyvien tietojen noutamiseen myöhemmin [8].

** 4. Ei käytä innokkaita lastaus- tai kyselyoptimointitekniikoita
Innokkaan kuormituksen laiminlyönti (liittyvien tietojen noutaminen alkuperäisessä kyselyssä) tai optimoidut liittymät tulokset useisiin kierroksiin tietokantaan. Näin tapahtuu, kun kehittäjät eivät nimenomaisesti ohjaa ORM- tai kyselyrakentajaa lataamaan liittyviä kokonaisuuksia yhteen, mikä johtaa moniin pieniin kyselyihin yhden, tehokkaan [5] [6] [7] sijasta.

** 5. Useiden kierroksien vaikutukset tietokantaan sivuuttaminen
Kehittäjät olettavat joskus, että monet pienet kyselyt ovat nopeampia kuin yksi monimutkainen kysely, mutta jokainen kysely sisältää verkon latenssin ja yleiskustannusten käsittelyn. N+1 -kyselyjen kumulatiivinen vaikutus hidastaa merkittävästi sovellusvasteaikoja ja lisää tietokannan kuormitusta, etenkin datan määrän kasvaessa [1] [3] [5].

** 6. Tietoisuuden puute tai ongelman havaitseminen
Koska jokainen N+1 -kuvion kysely toimii nopeasti, se ei useinkaan näy hitaissa kyselylokkeissa tai seurantatyökaluissa, mikä tekee siitä hiljaisen suorituskyvyn tappajan. Kehittäjät eivät ehkä huomaa ongelmaa, ennen kuin sovelluksen reagointikyky heikentää merkittävästi [2] [5] [7].

Yhteenvetona voidaan todeta, että N+1 -kyselyongelma syntyy pääasiassa tehottomien tietojen noutamismallien takia, erityisesti kyselyihin liittyvien tietojen kyselyjen kyselyjen kyselyjen sijaan kyselyihin. Tämä johtuu usein ORMS: n oletusluettelosta, innokkaiden lastaamisen tai erän käytöstä ja yleisten kyselyjen uudelleenkäytöstä ilman optimointia. Tuloksena on liiallinen tietokannan edestakaiset, jotka heikentävät suorituskykyä ja skaalautuvuutta [1] [2] [3] [5] [6] [7].

Viittaukset:
.
.
.
.
[5] https://digma.ai/n1-query-problem-and-how-to-detect-it/
.
[7] https://dev.to/lovestaco/the-n1-query-problem-the-silent-performance-killer-2b1c
.