Programerių kliurkos…
Posted by Audrius Karabanovas on Feb 26, 2007
Prieš pora savaičių buvau nuvykęs pasižiūrėti/pakonsultuoti autoplius.lt
Neblogai ten jie prigrybave, patikėkite manimi. Paprašius įjungti debugeri (mano darytas rodyt/trackinti SQL querius ir laikus sugaištus renderint puslapius), paaiškėjo, jog ten yra net tokių queriu, kurie net nesikompilina
Ta prasme MySQL’as spaudosi nes queris lievas ![]()
Bet čia tai paprasta, surandi kur ir išgydai. Yra kitų nesamonių, aš nesupratu kai kurių programuotojų… nejaugi Jūs rašote kodą tik tam kad jis veiktų? Ir galėtumėte uždėti varnelę prie “darbas atliktas”?
Paprastas situacija, autoplius.lt partnerių puslapiai… realiai yra 2 lentos, viena tai autoplius puslapių medis… kur saugomi visi path’ai į puslapius ir tų puslapių informacija. Kita, path’as partnerio puslapiui, su keliai papildomais parametrais, tokiais kaip - ar turi savo “special” dizaina ir t.t.
Problema buvo tame, jog puslapio generavimo laikas buvo beprasmiškai gaištamas gal kokiom 0.02s (kas tokio aprovimo puslapiui daug). Kažkas iš lempos prikišo rankas prie kernel’io (TVS sistemos) ir padarė pakeitimus kaip ieškoma partnerių puslapių.
Įdėja maždaug tokia: pradžiai žiūrima ar yra toks partnerio puslapis ir tik tuomet ar pačiau autoplius.lt medyje nėra tokio puslapio. Kas per nonsence? Realiai autoplius.lt partnerių puslapių yra vos keli, taigi gaunais, kad 99,9% užklausų daromų į MySQL klausiant ar yra toks partnerio puslapis yra laiko gaišimas. Mano autoplius.lt paliktas variantas ieškodavo parnerio puslapio tik kai budavo eventas “404″, arba kitaip tariant, kernelis autoplius.lt medyje nerasdavo tokio psl, tuomet žiūrėdavo ar yra toks partnerių puslapis, jei taip - pakišdavo jį kaip atsakyma.
Logikos klaida, kuri labai brangiai kainuoja performance ir serverio sveikatos požiūriu. Vietoj to, jog apklausinėti pradžiai lentele kurioje yra ~10 įrašų vien tik tam, kad gauti atsakyma su 0 eilučių reiktų pagalvoti ką darai. Ir kiek partnerių puslapių yra? Nejaugi taip sunku suprasti, jog tai yra beprasmis laiko švaistymas?
Taigi… pirštu parodžiau kur problema, tikiuosi sekanti karta nuėjes rasiu tai jau sutvarkyta. Ne tai, kad man labai rūpėtu keik efektyviai autoplius.lt išnaudoja savo serverius, kiek gaila, kad dėl elementarios logikos trūkumo sistema kuri pasižymėjo didelia sparta, tampa lėta.
Žmonės, galvokite ką rašote. Tai ne tik turi veikti, tai turi veikti taip, jog net norėdamas kažka padaryti jog veiktų dar geriau - nežinotumėt ką daryt ![]()
Pats dirbdamas niekada nevertinau - greitai padaryti yra gėris. Ne greitai reikia daryti, reikia daryti - gerai, taip, kad daugiau prie to grįžti nereiktu, bent jau numatomoje ateityje.
Tai pirmas mano blog’as apie performance… manau ateityje papostinsiu tokių daugiau.