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

Симптомот е екран, а не прашање

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

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

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

Избројте ги последователните чекања во една корисничка акција

Наместо да претпоставувате, инструментирајте го клиентот. Во psql \timing on го печати изминатото време на секој израз, а EXPLAIN (ANALYZE, BUFFERS) покажува колку од тоа време серверот навистина го потрошил на работата.

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

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

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

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

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

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

Користете ги врските повторно пред да купите пропусен опсег

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

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

Базенирањето го отстранува трошокот за поставување и ги остава последователните чекања на прашања недопрени. Тоа е предуслов за чисто мерење, а не поправка сама по себе.

Изважете го преместувањето на извршувањето поблиску до податоците

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

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

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

Поврзани статии