In formulier dat op in lokaal netwurk yn minder as in sekonde ferskynt, duorret oer in VPN fiif sekonden, wylst in bestânskopy op deselde ferbining folsleine faasje rint. It ferskil is net bânbreedte. It formulier wachtet op in searje antwurden en betellet by elke stap de folsleine rûnreis, wylst de bestânskopy bytes trochgeand yn beweging hâldt. Tel dy wachttiden foardatst de tagongsline oanreitsje.

It symptoom is in skerm, net in query

Elke query op dat skerm kin fluch wêze en it skerm kin dochs stadich wêze, om't it totaal de som fan wachttiden is en net de som fan útfiertiden. In statement dat yn twa millisekonden rint, kostet noch altyd in folsleine rûnreis as de klant it resultaat krije moat foardat er it folgjende stjoert. Op in paad mei fjirtich millisekonden fertraging komme hûndert ôfhinklike oproppen út op sawat fjouwer sekonden foardat hokker tekenwurk dan ek begjint. Dy rekkenjen is in model fan it wachtsjen, net in mjitting fan dyn ferbining.

Dêrom liket in faasjetest ûnskuldich. Massatransport mjit trochstream, in pratich formulier mjit fertraging, en in VPN kin yn it iene treflik wêze en yn it oare gewoan. It skerm diagnostisearje betsjut dus it skerm mjitte en net de ferbining.

Skriuw de tiid fan begjin oant ein fan ien brûkersaksje op foardatst wat feroarst. Dat getal is de iennige basisline dy't dy fertelle kin oft in lettere ferbettering wurke hat.

Tel opienfolgjende wachttiden yn ien brûkersaksje

Mjit yn de klant ynstee fan te rieden. Yn psql printsjelet \timing on de ferstrutsen tiid fan elk statement, en EXPLAIN (ANALYZE, BUFFERS) lit sjen hoefolle fan dy tiid de tsjinner echt oan it wurk bestege hat.

It gat tusken dy twa getallen is dyn netwurk- en klantkosten. As in statement yn twa millisekonden útfierd wurdt en de klant registrearret sechstich, dan binne de oerbliuwende achtensechtich reis en pleatslike ferwurking, en gjin inkelde yndeks sil se fuorthelje. Werhelje dy ferliking foar elk statement dat it skerm útstjoert en tel de gatten op ynstee fan de útfiertiden.

Skriuw it resultaat del as in oantal opienfolgjende wachttiden. Dat is de kwantiteit dy't de folgjende twa paragrafen ferminderje kinne, en it is in getal wêr'tst mei bewiis oer diskusjearje kinst.

Bondelje de ûnôfhinklike oproppen, hâld de ôfhinklike

Twa statements dy't net elkoars resultaten lêze, kinne tegearre reizgje en ien kear sammle wurde, wat twa wachttiden yn ien feroaret. Twa statements wêrby't de twadde de wearde fan de earste nedich hat, kinne dat net, om't de ôfhinklikens echt is en bondeljen feroarje soe wat it programma docht. Sortearje de oproppen yn dy twa heapen foardatst wat oerskriuwst, en de grutte fan elke heap fertelt dy wat mooglik is.

Set-basearre wurk hellet wachttiden grûniger fuort as bondeljen. Ien query dy't de rigen weromjout dy't in lus ien foar ien helle, eliminearret de lus likegoed as de rûnreizen. Sykje earst de lus, om't dy meastentiids de gruttere winst en de makliker feroaring is om te besjen.

In bondel moat noch altyd flatersôfhanneling en transaksjegrinzen behâlde. It oanelkoar plakken fan net-relatearre statements yn ien string is gjin feilige optimalisaasje, en in bondel dy't in mislearre statement efter in slagge yntsjinning ferstoppet, is slimmer as de bewarre wachttiden.

Brûk ferbiningen opnij foardatst bânbreedte keapst

In nije ferbining kostet namme-oplossing, in TCP-hânskodding, TLS-ûnderhanneling en autentikaasje, en op in paad mei hege fertraging is elk dêrfan noch in rûnreis foardat de earste query rint. Ferbiningspools besteane om dy kosten ien kear per proses te beteljen ynstee fan ien kear per oprop.

Yn ADO.NET jout it sluten of ferwiderjen fan in poold ferbining it werom foar wergebrûk ynstee fan in nije fysike te iepenjen, dus it patroan dat op in lek liket is faak it krekte gebrûk. Ferifiearje dat de pool echt brûkt wurdt ynstee fan it oan te nimmen: log de oanmaak fan fysike ferbiningen, of hâld it sesje-oantal op de tsjinner yn 'e gaten wylst it skerm rint. De SQL-prestaasjerjochtlinen sizze itselde oer it ferminderjen fan rûnreizen en it bondeljen fan faak foarkommende ad hoc-oproppen, mei tsjinstspesifike foarbylden dy'tst op dyn eigen ynset tapasse moatst.

Pooling hellet de opsetkosten fuort en lit opienfolgjende query-wachttiden ûnoantaast. It is in betingst foar in skjinne mjitting, net in ferbettering op himsels.

Oerweeg de útfiering tichter by de data te ferpleatsen

It programma ticht by de database ranne ferfangt in soad fiere database-útwikselings troch ien fiere werjefte-sesje. Foar in pratige load kin dat in grutte feroaring wêze, en it is likefolle in operasjonele feroaring as in prestaasjeferoaring: sesjebehear, tagongskontrôle, software-útrol en brûkersbelibbing ferpleatse allegear mei it programma.

Mjit de werklike ynterface en de data dy't er oerdraacht foardatst oannimst dat ien rjochting flugger is. In fiere buroblêdsesje ferpleatst pixels, en in skerm mei tichte grafyk kin op itselde paad slimmer prestearje as de query's dy't it ferfong, benammen as de klant trochgeand opnij tekenet.

Werhelje dan de oarspronklike aksje en ferlykje trije getallen: opienfolgjende wachttiden, resultaatfolume en foltôgingstiid fan begjin oant ein. In ferbettering dy't de metten brûkerstaak feroaret en tagelyk de krektens fan 'e data en it tagongsbelied behâldt, is dejinge dy't it wurdich is om te hâlden.

Relatearre artikelen