Když je systém pomalý, nekupujte silnější server
„Nemáme koupit výkonnější server?“
Tuhle otázku dostávám pokaždé, když se v systému něco vleče a lidi u toho několikrát denně čekají. Zní logicky — když je to pomalé, asi na to ten stroj nestačí.
Odpověď je skoro pokaždé ne, a to právě proto, že silnější stroj nezrychlí všechno stejně. Něco zrychlí znatelně. Ale to, co čeká na disk, na síť nebo na jeden jediný krok, který se nedá rozdělit, nezrychlí skoro vůbec. Zaplatíte výrazně víc a ta obrazovka se otevírá skoro stejně dlouho — a u pronajatého serveru se to platí každý měsíc znovu.
Nejdřív se měří, teprve pak se opravuje
Než začnu cokoliv upravovat, chci vědět, kde se ten čas doopravdy tráví. Ne odhadem, ne podle toho, co „vypadá pomalu“ — změřím to. U té obrazovky šlo o kreditní limit odběratele a otevírala se 38 vteřin. Z měření vyšlo, že skoro celý ten čas padal na jedno jediné místo: dotaz, který se ptal databáze na data způsobem, který ji nutil projít mnohem víc, než bylo potřeba.
Přepsal jsem ten dotaz, aby se ptal chytřeji — jinak poskládaný, se stejným výsledkem. Z 38 vteřin bylo půl vteřiny. Server se přitom nezměnil a nekupovalo se nic.
Rychleji se dá udělat i špatně
A tady přichází druhá půlka příběhu. Přepsat dotaz je šikovná věc, dokud dělá přesně to samé co předtím, jenom rychleji. Jenže se dá přepsat i tak, že začne počítat něco jiného. Ne úplně jiného, toho by si někdo všiml hned první den. Ale trochu jiného. A „trochu jiné“ vypadá na první pohled stejně jako „stejné“ — dokud se za pár měsíců nesejdou dvě čísla, která spolu nesedí, a nikdo neví proč.
Proto u takové úpravy nestačí vyzkoušet pár příkladů, které mám po ruce. Ty příklady jsem si vybral já, takže si nutně vyberu ty, na kterých to sedí. Potřebuju vědět, že nová a stará verze dávají ze své podstaty stejnou odpověď na cokoliv. Je to rozdíl mezi „zkusili jsme to a vyšlo to“ a „jinak to dopadnout nemůže“.
Ve větším to popisuju v článku o tom, jak přepsat systém tak, aby si toho nikdo nevšiml.
Co z toho má zákazník
Žádnou fakturu za nový server, který by měsíc co měsíc platil za to, aby se ta obrazovka otevírala o pár procent rychleji. Místo toho jednu konkrétní věc, která se najde měřením a opraví přesně tam, kde je. A jistotu, že systém po opravě počítá pořád to samé jako předtím — jen o dost rychleji.