Образац који се у локалној мрежи отвара за мање од једне секунде преко VPN-а траје пет секунди, док копија датотеке на истој вези иде пуном брзином. Разлика није пропусност. Образац чека низ одговора и на сваком кораку плаћа цело повратно путовање, док копија датотеке непрекидно држи бајтове у лету. Пребројте та чекања пре него што додирнете приступну линију.

Симптом је екран, а не упит

Сваки упит на том екрану може бити брз, а екран и даље може бити спор, јер је укупно збир чекања, а не збир времена извршавања. Наредба која се извршава за две милисекунде ипак кошта цело повратно путовање када клијент мора да прими резултат пре него што пошаље следећу. На путу са кашњењем од четрдесет милисекунди сто зависних позива скупи се на отприлике четири секунде пре него што почне било какав рад на исцртавању. Та аритметика је модел чекања, а не мерење ваше везе.

Зато тест брзине изгледа невино. Велики пренос мери пропусност, брбљиви образац мери кашњење, а VPN може бити изврстан у једном и остати обичан у другом. Дијагностиковати екран стога значи мерити екран, а не везу.

Забележите време од почетка до краја једне корисничке радње пре него што било шта промените. Тај број је једина основа која може рећи да ли је каснија поправка успела.

Пребројте узастопна чекања у једној корисничкој радњи

Инструментирајте клијента уместо да нагађате. У psql-у \timing on исписује протекло време сваке наредбе, а EXPLAIN (ANALYZE, BUFFERS) показује колико је од тог времена сервер стварно потрошио на посао.

Разлика између та два броја је ваш мрежни и клијентски трошак. Ако се наредба извршава за две милисекунде, а клијент забележи шездесет, преосталих педесет и осам су пут и локална обрада, и ниједан индекс их неће уклонити. Поновите то поређење за сваку наредбу коју екран издаје и сабирајте разлике, а не времена извршавања.

Запишите резултат као број узастопних чекања. Управо ту величину следећа два дела могу смањити, и то је број о коме се може расправљати с доказима.

Групишите независне позиве, задржите зависне

Две наредбе које не читају резултат једна друге могу путовати заједно и бити прикупљене једном, што претвара два чекања у једно. Две наредбе где другој треба вредност прве не могу, јер је зависност стварна и груписање би променило оно што програм ради. Разврстајте позиве у те две гомиле пре него што било шта препишете, а величина сваке гомиле говори шта је могуће.

Рад на скуповима уклања чекања темељније од груписања. Један упит који враћа редове које је петља добављала један по један уклања и петљу и повратна путовања. Прво тражите петљу, јер је обично већи добитак и лакша промена за преглед.

Група ипак мора да сачува обраду грешака и границе трансакција. Спајање неповезаних наредби у један низ није безбедна оптимизација, а група која скрива неуспелу наредбу иза успешне предаје гора је од чекања која је уштедела.

Поново употребите везе пре него што купите пропусност

Нова веза кошта разрешавање имена, TCP руковање, TLS преговарање и аутентификацију, а на путу с високим кашњењем свако је од тога још једно повратно путовање пре него што се покрене први упит. Пулови веза постоје да би се тај трошак платио једном по процесу, а не једном по позиву.

У ADO.NET-у затварање или dispose везе из пула враћа је за поновну употребу уместо да отвори нову физичку, па је образац који изгледа као цурење често исправна употреба. Проверите да ли је пул заиста у употреби уместо да то претпоставите: бележите стварање физичких веза или посматрајте број сесија на серверу док екран ради. Смернице за SQL перформансе говоре исто о смањењу повратних путовања и груписању честих ad hoc позива, са примерима специфичним за услугу које бисте требали пресликати на своје распоређивање.

Пуловање уклања трошак подешавања и оставља узастопна чекања упита нетакнутима. То је предуслов за чисто мерење, а не самостална поправка.

Одмерите премештање извршавања ближе подацима

Покретање апликације близу базе података замењује многе удаљене размене с базом једном удаљеном сесијом приказа. За брбљиво оптерећење то може бити велика промена, и то је оперативна промена колико и промена перформанси: управљање сесијама, контрола приступа, распоређивање софтвера и корисничко искуство сви се селе заједно с апликацијом.

Измерите стварно сучеље и податке које преноси пре него што претпоставите да је неки смер бржи. Сесија удаљеног радног стола преноси пикселе, а екран с густом графиком може радити лошије на истом путу од упита које је заменио, посебно када клијент непрестано поново исцртава.

Затим поновите изворну радњу и упоредите три броја: узастопна чекања, обим резултата и време довршетка од почетка до краја. Побољшање које мења мерени кориснички задатак уз очување тачности података и приступне политике оно је које вреди задржати.

Повезани чланци