Írjon a támogatásnak

E-mailben válaszolunk, általában két napon belül.

A Google reCAPTCHA visszaélés elleni védelemként ellenőrzi ezt a beküldést; ennek során adatok jutnak el a Google-hoz. A szkript csak az űrlap megnyitásakor töltődik be.

← Összes bejegyzés

Amikor egy index hozzáadása lassít

A napi adatok táblájának egyetlen kulcsa van: a számláló és a dátum együtt. A kódban öt hely mást kérdez tőle — nem azt, hogy „ez a számláló az idő függvényében”, hanem azt, hogy „az összes számláló ezeken a napokon”. A kezdőlapi galéria, a toplista, az oldaltérkép, egy 90 napos diagram és az állapotadatok. A dátumoszlopon lévő index nélkül mindegyik végigolvassa mind a 114 113 sort.

Ezzel az indexszel a galéria tízszer gyorsabb lesz. Mégsem került be. Íme a mérés, amely eldöntötte.

galéria, egy nap — 61,5 → 6,1 ms toplista, 30 nap — 88,6 → 89,2 ms oldaltérkép, 14 nap — 79,6 → 94,8 ms 90 napos diagram — 120,0 → 109,2 ms állapotadatok, 365 nap — 204,9 → 225,1 ms felső sáv index nélkül, alsó sáv indexszel összesen: 555 ms helyett 524 ms

Egy lekérdezés sokkal gyorsabb lett

A galéria azokat a számlálókat kéri le, amelyek ma aktívak voltak. Dátumindex nélkül végigpásztázza az egész táblát; indexszel egyetlen dátumot keres ki, és 443 sort olvas be. 61,5 ezredmásodpercből 6,1 lett. Ez nem árnyalt eredmény, és ha csak ezt mértük volna, az index most benne lenne az adatbázisban.

Két lekérdezés lassabb lett

Az oldaltérkép tizennégy napot kér le, és 19%-kal lassabb lett. Az állapotadatok egy évet kérnek le, és 10%-kal lettek lassabbak. A lekérdezéstervező mindkét esetben átváltott az elsődleges kulcsról az új indexre, és rosszabbul döntött.

Ezt a részt érdemes megérteni, mert nem a tervező hibája. Ha egy tartományt másodlagos indexen keresztül olvasunk, először meg kell keresni az indexben az egyező sorokat, majd egyenként le kell kérni őket a táblából. Egy keskeny szeletnél ez kifejezetten megéri. Tizenhárom hónapból tizennégy nap azonban még mindig sok, egyenként lekért sor, és a tábla egyszerű végigolvasása — fizikai sorrendben, ahogy a lemezek és a gyorsítótárak szeretik — jobb nála. A tervező ezt nem tudja. Lát egy tartományt és egy indexet, és azt választja.

Nem lehet előírni, hogy „ezt az indexet csak a galéria használja”. Az index minden olyan lekérdezés számára elérhető, amely az oszlopot érinti, és a tervező mindenhol használni fogja, ahol a becslései szerint érdemes. Egy index hozzáadása tehát az adott tábla minden lekérdezését megváltoztatja, nem csak azt, amelyiknek szánták.

Összesen: semmi

Mind az öt lekérdezést együtt nézve 555 ezredmásodpercből 524 lett. A javulás 1,1×, ami egy kis szerveren, amely ezeket az oldalakat amúgy is gyorsítótárból szolgálja ki, nem ér meg egy sémamódosítást.

A 90 napos diagram első ránézésre 9%-kal javult. Ez nem számít bele, és érdemes megmondani, miért. Minden lekérdezést háromszor mértünk: index nélkül, indexszel, majd újra index nélkül. Ha a második, index nélküli futás nem esik közel az elsőhöz, akkor a különbséget a gép okozta, nem a változtatás. A 90 napos diagramnál a két index nélküli futás 13,8%-kal tért el egymástól — többel, mint az állított hatás. Ez a sor tehát semmit sem mér, és semmiként is szerepel.

Hogyan mértük, és miért számít ez

Nem az élő táblán. A szkript lemásolja, a másolaton dolgozik, a végén pedig eldobja a másolatot. Ha egy éles táblához próbaképp hozzáadunk egy indexet, hogy lássuk, mi történik, az meglepetésenként csak egyszer működik.

A lekérdezések a valódiak, a kódból átemelve, a számlálótáblához való kapcsolással (join) együtt. A teszt egy korábbi változata egyszerűsített helyettesítőt használt, és sokkal izgalmasabb választ adott: hússzor gyorsabb. Az egyszerűsített lekérdezést azonban valójában semmi sem futtatta.

Mi lett volna az eredmény

Ha a szokásos módon mértük volna — fogjuk a lassúnak érzett lekérdezést, és lemérjük előtte és utána —, a válasz ez lett volna: „tízszer gyorsabb, mehet élesbe”. Az index bekerült volna, a galéria gyorsabb lett volna, az oldaltérkép és az állapotoldal lassabb, és senki sem kapcsolta volna össze a kettőt, mert azokat senki sem figyelte.

Ez az általános minta. Egy közös infrastruktúrát érintő változtatást nem lehet azon az eseten értékelni, amely kiváltotta. A kérdés nem az, hogy „segít-e ez annak, amit éppen nézek”, hanem az, hogy „mi más érinti még ezt, és mi történik azzal”.

Van egy változat, amely működhet: egy mindkét oszlopot tartalmazó index, elöl a dátummal, így a galéria kérdésére pusztán az indexből lehet válaszolni, a táblához való visszanyúlás nélkül. Talán a tervezőt sem csábítja el a szélesebb tartományoknál. Ezt még nem mértük, ezért nem ajánlás — ez a következő, amit a másolaton ki kell próbálni.

Hirdetés