· 1 perc olvasás
Miért lassulnak be a gyors SQL lekérdezések?
Egy lekérdezés teljesítménye ritkán romlik egyik napról a másikra. Sokkal gyakrabban a mögötte lévő adatok nőnek ki az eredeti feltételezéseket.
Egy adatbázis-lekérdezés szinte soha nem egyik napról a másikra lesz lassú.
Általában egy teljesen ésszerű lekérdezésként indul, amely egy viszonylag kis adathalmazon kiválóan teljesít. Éles környezetbe kerül, hónapokig problémamentesen működik, túlél több funkcióbővítést, majd egyszer csak valaki észreveszi, hogy a korábban néhány ezredmásodperces végpont már több száz milliszekundum alatt válaszol.
Pedig maga a lekérdezés nem változott.
Az adatok viszont igen.
Ahogy az adatbázis növekszik, a korábban helyes feltételezések fokozatosan érvényüket vesztik. Egy index, amely régen kiválóan szűrt, egyre kevésbé lesz szelektív. Egy JOIN, amely korábban néhány ezer rekordot dolgozott fel, ma már milliókat érint. Az optimalizáló más végrehajtási tervet választ, mert az adatbázis statisztikái már egészen mást mutatnak, mint fél évvel korábban.
Ilyenkor az első reakció általában az, hogy újra kell írni a lekérdezést.
Erre néha valóban szükség van, de sokkal fontosabb megérteni, miért döntött az adatbázis az adott végrehajtási terv mellett. Az előre becsült és a tényleges rekordszámok összehasonlítása, a költséges műveletek azonosítása és a valódi szűk keresztmetszet megtalálása sokkal többet ér, mint vakon “okosabb” SQL-t írni.
A teljesítményoptimalizálás ritkán arról szól, hogy ki tud ügyesebb lekérdezést írni.
Sokkal inkább arról, hogy az adataink folyamatosan változnak, és az adatbázisnak ehhez ugyanúgy alkalmazkodnia kell.