Obrazac koji se u lokalnoj mreži prikaže za manje od sekunde preko VPN-a traje pet sekundi, dok kopiranje datoteke na istom spoju ide punom brzinom. Razlika nije u propusnosti. Obrazac čeka niz odgovora i plaća puni krug na svakom koraku, dok kopiranje datoteke drži bajtove neprekidno u pokretu. Prebrojite ta čekanja prije nego što dotaknete pristupni vod.

Simptom je zaslon, a ne upit

Svaki upit na tom zaslonu može biti brz, a zaslon i dalje može biti spor, jer je ukupno vrijeme zbroj čekanja, a ne zbroj vremena izvršavanja. Naredba koja se izvrši u dvije milisekunde i dalje stoji cijeli krug kada klijent mora primiti njezin rezultat prije nego što pošalje sljedeću. Na putu s četrdeset milisekundi kašnjenja stotinu zavisnih poziva skupi se na otprilike četiri sekunde prije nego što počne bilo kakav rad na crtanju. Ta aritmetika je model čekanja, a ne mjerenje vašeg spoja.

Zato test brzine izgleda bezazleno. Veliki prijenos mjeri propusnost, razgovorljiv obrazac mjeri kašnjenje, a VPN može biti izvrstan u jednome i prosječan u drugome. Stoga dijagnostika zaslona znači mjerenje zaslona, a ne spoja.

Zabilježite vrijeme od početka do kraja jedne korisničke radnje prije nego što bilo što promijenite. Taj je broj jedina osnovna crta koja vam može reći je li kasnija popravka uspjela.

Prebrojte uzastopna čekanja u jednoj korisničkoj radnji

Mjerite u klijentu umjesto da nagađate. U psql-u \timing on ispisuje proteklo vrijeme svake naredbe, a EXPLAIN (ANALYZE, BUFFERS) pokazuje koliko je od tog vremena poslužitelj doista potrošio na posao.

Razlika između tih dvaju brojeva vaš je mrežni i klijentski trošak. Ako se naredba izvrši u dvije milisekunde, a klijent zabilježi šezdeset, preostalih pedeset i osam putovanje je i lokalna obrada i nijedan ih indeks neće ukloniti. Ponovite tu usporedbu za svaku naredbu koju zaslon izdaje i zbrojite razlike, a ne vremena izvršavanja.

Zapišite rezultat kao broj uzastopnih čekanja. To je veličina koju sljedeća dva odjeljka mogu smanjiti, i to je broj o kojem možete raspravljati s dokazima.

Objedinite nezavisne pozive, zadržite zavisne

Dvije naredbe koje ne čitaju rezultate jedna druge mogu putovati zajedno i biti prikupljene jednom, što dva čekanja pretvara u jedno. Dvije naredbe u kojima drugoj treba vrijednost prve ne mogu, jer je zavisnost stvarna i objedinjavanje bi promijenilo ono što program radi. Razvrstajte pozive u te dvije hrpe prije nego što bilo što prepišete, a veličina svake hrpe govori vam što je moguće.

Rad zasnovan na skupovima uklanja čekanja temeljitije od objedinjavanja. Jedan upit koji vraća retke koje je petlja dohvaćala jedan po jedan uklanja i petlju i krugove. Prvo tražite petlju, jer je ona obično veća dobit i lakša promjena za pregled.

Paket i dalje mora sačuvati obradu pogrešaka i granice transakcija. Spajanje nepovezanih naredbi u jedan niz nije sigurna optimizacija, a paket koji skriva neuspjelu naredbu iza uspješnog slanja gori je od čekanja koja je uštedio.

Ponovno rabite veze prije nego što kupite propusnost

Nova veza stoji razrješavanje imena, TCP rukovanje, TLS pregovaranje i provjeru identiteta, a na putu s velikim kašnjenjem svako je od toga još jedan krug prije nego što se pokrene prvi upit. Skupovi veza postoje da se taj trošak plati jednom po procesu, a ne jednom po pozivu.

U ADO.NET-u zatvaranje ili odbacivanje veze iz skupa vraća je za ponovnu upotrebu umjesto otvaranja nove fizičke veze, pa je obrazac koji izgleda kao curenje često ispravna upotreba. Provjerite da se skup doista rabi umjesto da to pretpostavite: bilježite stvaranje fizičkih veza ili pratite broj sesija na poslužitelju dok zaslon radi. Smjernice za performanse SQL-a govore isto o smanjenju krugova i objedinjavanju čestih ad hoc poziva, s primjerima za pojedinu uslugu koje treba primijeniti na svoju implementaciju.

Objedinjavanje uklanja trošak postavljanja i ostavlja uzastopna čekanja upita netaknutima. To je preduvjet za čisto mjerenje, a ne popravak sam po sebi.

Odmjerite premještanje izvršavanja bliže podacima

Pokretanje aplikacije blizu baze podataka zamjenjuje mnoge udaljene razmjene s bazom jednom udaljenom sesijom prikaza. Za razgovorljivo radno opterećenje to može biti velika promjena, i to je operativna promjena koliko i promjena performansi: upravljanje sesijama, kontrola pristupa, uvođenje softvera i korisničko iskustvo svi se pomiču s aplikacijom.

Izmjerite stvarno sučelje i podatke koje prenosi prije nego što pretpostavite da je bilo koji smjer brži. Udaljena sesija radne površine prenosi piksele, a zaslon s gustom grafikom može na istom putu raditi lošije od upita koje je zamijenio, posebno kada klijent neprekidno iscrtava iznova.

Zatim ponovite izvornu radnju i usporedite tri broja: uzastopna čekanja, obujam rezultata i vrijeme dovršetka od početka do kraja. Poboljšanje koje mijenja mjereni korisnički zadatak uz očuvanje ispravnosti podataka i politike pristupa ono je koje vrijedi zadržati.

Povezani članci