Miks jutukas SQL-rakendus VPN-i taga roomab ja mida partiina saata
Ekraan, mis saadab sada sõltuvat päringut, maksab täisringi sada korda. Loendage ootamised, koondage sõltumatud ja seejärel viige täitmine mujale.
Vorm, mis kohtvõrgus ilmub alla sekundiga, võtab VPN-i kaudu viis sekundit, samal ajal kui failikope samal ühendusel jookseb täiskiirusel. Erinevus ei ole ribalaiuses. Vorm ootab vastuste jada ja maksab igal sammul kogu edasi-tagasi käigu, samal ajal kui failikope hoiab baite pidevalt liikvel. Loendage need ootamised enne, kui puudutate juurdepääsuliini.
Sümptom on ekraan, mitte päring
Iga päring sellel ekraanil võib olla kiire ja ekraan võib ikkagi olla aeglane, sest kogusumma on ootamiste summa, mitte täitmisaegade summa. Lause, mis jookseb kahe millisekundi jooksul, maksab ikkagi terve ringi, kui klient peab saama selle tulemuse enne järgmise saatmist. Neljakümne millisekundi latentsusega teel kogunevad sada sõltuvat kutset enne mis tahes joonistustöö algust umbes neljaks sekundiks. See aritmeetika on ootamise mudel, mitte teie ühenduse mõõtmine.
Seetõttu tundub kiirustest süütu. Hulgisiire mõõdab läbilaskevõimet, jutukas vorm mõõdab latentsust ja VPN võib olla ühes suurepärane ning teises tavaline. Ekraani diagnoosimine tähendab seega ekraani mõõtmist, mitte ühenduse mõõtmist.
Enne millegi muutmist kirjutage üles ühe kasutajatoimingu aeg algusest lõpuni. See arv on ainus baasjoon, mis suudab öelda, kas hilisem parandus töötas.
Loendage järjestikused ootamised ühes kasutajatoimingus
Mõõtke kliendis, mitte oletage. Psql-is prindib \timing on iga lause kulunud aja ja EXPLAIN (ANALYZE, BUFFERS) näitab, kui palju sellest ajast server tegelikult tööle kulutas.
Nende kahe arvu vahe on teie võrgu- ja kliendikulu. Kui lause täitub kahe millisekundiga ja klient registreerib kuuskümmend, on ülejäänud viiskümmend kaheksa teekond ja kohalik töötlemine ning ükski indeks ei kõrvalda neid. Korrake seda võrdlust iga lause puhul, mille ekraan väljastab, ja liitke vahed, mitte täitmisajad.
Kirjutage tulemus üles järjestikuste ootamiste arvuna. See on suurus, mida kaks järgmist jaotist saavad vähendada, ja see on arv, mille üle saab tõenditega vaielda.
Koondage sõltumatud kutsed, jätke sõltuvad alles
Kaks lauset, mis ei loe teineteise tulemusi, saavad reisida koos ja koguda ühe korra, mis muudab kaks ootamist üheks. Kaks lauset, kus teine vajab esimese väärtust, ei saa, sest sõltuvus on tegelik ja koondamine muudaks seda, mida programm teeb. Enne ümberkirjutamist sorteerige kutsed nendesse kahte hunnikusse ja iga hunniku suurus ütleb teile, mis on võimalik.
Hulkadel põhinev töö kõrvaldab ootamisi põhjalikumalt kui koondamine. Üks päring, mis tagastab read, mida tsükkel tõi ükshaaval, kõrvaldab nii tsükli kui ka ringid. Otsige esmalt tsükkel, sest see on tavaliselt suurem võit ja ülevaatamiseks lihtsam muudatus.
Partii peab ikkagi säilitama vigade käsitlemise ja tehingute piirid. Sõltumatute lausete liitmine üheks stringiks ei ole turvaline optimeerimine ja partii, mis peidab ebaõnnestunud lause õnnestunud esitamise taha, on halvem kui säästetud ootamised.
Kasutage ühendusi uuesti enne, kui ostate ribalaiust
Uus ühendus maksab nimeotsingu, TCP käepigistuse, TLS-i läbirääkimise ja autentimise ning suure latentsusega teel on igaüks neist veel üks ring enne esimese päringu käivitumist. Ühenduste hoidlad on olemas selleks, et maksta see kulu üks kord protsessi kohta, mitte üks kord kutse kohta.
ADO.NET-is tagastab koondatud ühenduse sulgemine või vabastamine selle uuesti kasutamiseks, selle asemel et avada uus füüsiline ühendus, seega on lekkimisena näiv muster sageli õige kasutus. Kontrollige, et hoidla on tõesti kasutusel, selle asemel et seda eeldada: logige füüsiliste ühenduste loomist või jälgige serveris sessioonide arvu, kui ekraan töötab. SQL-i jõudlussuunised ütlevad sama ringide vähendamise ja sagedaste ad hoc kutsete koondamise kohta, teenusepõhiste näidetega, mille peaksite oma juurutusele üle kandma.
Koondamine kõrvaldab seadistuskulu ja jätab järjestikused päringuootamised puutumata. See on puhta mõõtmise eeltingimus, mitte parandus omaette.
Kaaluge täitmise viimist andmetele lähemale
Rakenduse käitamine andmebaasi lähedal asendab paljud kauged andmebaasivahetused ühe kaugkuva sessiooniga. Jutuka koormuse jaoks võib see olla suur muudatus ja see on töökorralduslik muudatus sama palju kui jõudlusmuudatus: sessioonihaldus, juurdepääsukontroll, tarkvara juurutamine ja kasutajakogemus liiguvad kõik koos rakendusega.
Mõõtke tegelikku liidest ja andmeid, mida see edastab, enne kui eeldate, et mõni suund on kiirem. Kaugtöölaua sessioon liigutab piksleid ja tiheda graafikaga ekraan võib samal teel toimida halvemini kui päringud, mille see asendas, eriti kui klient joonistab pidevalt uuesti.
Seejärel korrake algset toimingut ja võrrelge kolme arvu: järjestikused ootamised, tulemuse maht ja lõpuni jõudmise aeg. Parendus, mis muudab mõõdetud kasutajaülesannet, säilitades andmete õigsuse ja juurdepääsupoliitika, on see, mida tasub hoida.