Obrati se podršci

Odgovaramo e-poštom, obično u roku od dva dana.

Google reCAPTCHA provjerava ovu prijavu radi zaštite od zlouporabe; podaci se šalju tvrtki Google. Skripta se učitava tek kada se otvori ovaj obrazac.

← Sve objave

Kada dodavanje indeksa usporava stvari

O sadržaju i njegovoj provjeri

U ovom članku

Tablica dnevnih vrijednosti ima jedan ključ: brojač i datum zajedno. Pet mjesta u kodu postavlja joj drukčije pitanje — ne „ovaj brojač kroz vrijeme“, nego „svi brojači na ove datume“. Galerija početne stranice, ljestvica, karta web-mjesta, grafikon za 90 dana i brojke statusa. Bez indeksa na stupcu datuma svaki od njih čita svih 114.113 redaka.

Dodavanje tog indeksa ubrzava galeriju deset puta. Nije dodan. Evo mjerenja koje je presudilo.

galerija, jedan dan — 61,5 na 6,1 ms ljestvica, 30 dana — 88,6 na 89,2 ms karta web-mjesta, 14 dana — 79,6 na 94,8 ms grafikon za 90 dana — 120,0 na 109,2 ms brojke statusa, 365 dana — 204,9 na 225,1 ms gornji stupac bez indeksa, donji s njim zajedno: 555 ms postaje 524 ms

Jedan upit postao je mnogo brži

Galerija traži brojače koji su danas bili aktivni. Bez indeksa na datumu pregledava cijelu tablicu; s njim pronalazi jedan datum i čita 443 retka. 61,5 milisekundi postalo je 6,1. To nije suptilan rezultat i da je to bilo jedino mjerenje, indeks bi sada bio u bazi podataka.

Dva upita postala su sporija

Karta web-mjesta traži četrnaest dana i postala je 19 % sporija. Brojke statusa traže godinu i postale su 10 % sporije. U oba je slučaja planer upita prešao s primarnog ključa na novi indeks i odabrao lošije.

Ovaj dio vrijedi razumjeti jer nije pogreška planera. Čitanje raspona putem sekundarnog indeksa znači pronaći odgovarajuće retke u indeksu, a zatim dohvatiti svaki iz tablice. Za uzak odsječak to je povoljno. Za četrnaest dana od trinaest mjeseci to je još mnogo redaka dohvaćenih jedan po jedan, a izravni pregled tablice — čitanje fizičkim redoslijedom, što diskovima i predmemorijama odgovara — brži je. Planer to ne zna. Vidi raspon i indeks te ga koristi.

Ne može se reći „koristi ovaj indeks samo za galeriju“. Indeks je dostupan svakom upitu koji pristupa stupcu i planer će ga koristiti gdje god mu procjene kažu da treba. Dodavanje indeksa promjena je za svaki upit nad tom tablicom, a ne samo onaj kojem je namijenjen.

Zajedno – ništa

Za svih pet, 555 milisekundi postalo je 524. Poboljšanje od 1,1×, koje na malom poslužitelju koji te stranice ionako poslužuje iz predmemorije ne vrijedi promjene sheme.

Grafikon za 90 dana izgleda kao da se poboljšao za 9 %. Ne ubraja se i vrijedi reći zašto. Svaki je upit izmjeren tri puta: bez indeksa, s njim, a zatim ponovno bez njega. Ako drugo pokretanje bez indeksa nije blizu prvom, razlika je bila u stroju, a ne promjeni. Za grafikon za 90 dana dva pokretanja bez indeksa razlikovala su se za 13,8 % — više od navodnog učinka. Zato taj redak ne mjeri ništa i tako se i navodi.

Kako je mjereno i zašto je to važno

Ne na aktivnoj tablici. Skripta je kopira, radi na kopiji i na kraju kopiju briše. Dodavanje indeksa na produkcijsku tablicu kako bi se vidjelo što se događa funkcionira samo jednom po iznenađenju.

Upiti su stvarni, preuzeti iz koda, uključujući spajanje s tablicom brojača. Ranija verzija ovog testa koristila je pojednostavljenu zamjenu i proizvela mnogo uzbudljiviji odgovor: dvadeset puta brže. Pojednostavljeni upit nije bio upit koji se igdje stvarno izvršava.

Kakva bi brojka bila

Da je to izmjereno uobičajeno — uzeti upit koji se čini sporim i izmjeriti ga prije i poslije — odgovor bi bio „deset puta brže, pustite u rad“. Indeks bi bio dodan, galerija bi postala brža, karta web-mjesta i stranica statusa sporije, a nitko ne bi povezao to dvoje jer ih nitko nije promatrao.

To je opći oblik. Promjena zajedničke infrastrukture ne može se ocijeniti samo na slučaju koji ju je potaknuo. Pitanje nije „pomaže li ovo onome što gledam“, nego „što još ovome pristupa i što se s tim događa“.

Postoji verzija koja bi mogla raditi: indeks koji sadržava oba stupca, s datumom na prvom mjestu, tako da galerija može dobiti odgovor samo iz indeksa bez povratka u tablicu. Možda bi i izbjegao privlačenje planera na šire raspone. To nije izmjereno, pa nije preporuka — nego sljedeće što treba postaviti na kopiju.

Oglas