Didelis SQL rezultatas per VPN: kur laukia eilutės
Didelis SQL rezultatas laukia trijose vietose: serverio buferiuose, VPN kelyje ir kliente. Išmatuokite kiekvieną etapą prieš keisdami pralaidumą ar įjungdami glaudinimą.
Užklausos gali baigtis per milisekundes ir vis tiek užtrukti minutes, kol per VPN pasieks nešiojamąjį kompiuterį. Serveris rašo eilutes į buferius, ryšys jas perduoda, o klientas jas vartoja, ir šie etapai persidengia, o ne vyksta nuosekliai. Bet kuris iš jų gali tapti riba. Raskite etapą, kuris tikrai laukia, prieš keisdami pralaidumą ar įjungdami glaudinimą.
Trys etapai, vienas chronometras
Padalinkite laikmatį į du skirtingos reikšmės skaičius: momentą, kai pirmoji eilutė yra prieinama, ir momentą, kai paskutinė eilutė suvartota. Tinklelis, kuris nupiešia pirmąjį puslapį, įrodo tik tai, kad užklausa prasidėjo. Viso rezultato laikas yra tai, ką naudotojas patiria eksportuodamas arba slinkdamas iki pabaigos.
Užrašykite abu skaičius kartu su užklausos tekstu, parametrais ir ryšio nustatymais. Be šio konteksto palyginimas yra tarp dviejų skirtingų darbų, o ne dviejų vietų.
Perskaitykite laukimą prieš tinklą
SQL Server rašo rezultato eilutes į išvesties buferius, kad klientas jas paimtų, ir lėtai vartojantis klientas gali priversti serverį laukti šio siuntimo. Laukimo tipas yra ASYNC_NETWORK_IO, o Microsoft trikčių šalinimo pastaboje tarp priežasčių nurodo didelius rezultatus ir apdorojimą kliento pusėje. Laukimas sako, kad siuntimo kelias užblokuotas, o ne kodėl.
Lėtas VPN gali prisidėti, bet taip pat klientas, kuris formatuoja kiekvieną eilutę, rašo į failą arba daro pauzes tarp paketų. Laukimo pavadinimas yra rodyklė į kitą matavimą, o ne nuosprendis apie ryšį.
SELECT wait_type, wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_type = 'ASYNC_NETWORK_IO';
Skaitiklis skaitomas, kol vyksta ribota apkrova, o ne po tuščios valandos, nes kaupiamieji skaitikliai sumaišo kiekvieną sesiją nuo egzemplioriaus paleidimo. Palyginkite skirtumą per paleidimą, o ne viso gyvenimo sumą. Perdavimo metu augantis skirtumas susiaurina klausimą iki vartojimo ar pristatymo.
Pastatykite abu klientus ant to paties laikrodžio
Paleiskite ribotą apkrovą iš kliento, esančio arti duomenų bazės, ir iš nuotolinio kliento. Laikykite užklausą, parametrus, rezultato dydį ir ryšio nustatymus identiškus. Naudokite tą patį matavimą abiejose pusėse, nes serverio vykdymo laikas, tinklelio rodymo laikas ir eksportavimo laikas yra trys skirtingi laikrodžiai. Serverio pusės skaičiaus palyginimas su kliento pusės eksportavimo laikmačiu duoda išvadą, kurios negalima patikrinti.
Kai kelias atrodo atsakingas, paprašykite tinklo savininko stebėti nuostolius, pakartotinius perdavimus ir pasiektą pralaidumą būtent tam srautui, kol vyksta perdavimas. Bendras greičio testas gali naudoti kitą maršrutą, galinį tašką ar lygiagretumo modelį. Maža sėkminga užklausa mažai pasako apie ilgalaikį rezultato perdavimą.
Sumažinkite baitus prieš kaltindami kelią
Filtravimas, agregavimas ir tik reikiamų stulpelių pasirinkimas sumažina ir perdavimo apimtį, ir darbą, kurį klientas atlieka su kiekviena eilute. Išsaugokite numatytą rezultatą, nes ataskaitai gali prireikti detalės, kurios ekrane esančioje santraukoje nėra.
Kartotiniams eksportams patvirtinta vykdymo vieta netoli duomenų bazės gali įrašyti apibrėžtą išvestį, kuri vėliau pristatoma vieną kartą. Tai keičia darbo eigą ir jos prieigos kontrolę, ir tai nėra leidimas palikti neribotą išrašą bendrame hoste.
Glaudinimas nėra numatytasis taisymas. Palaikymas ir saugumas priklauso nuo tikrojo protokolo ir diegimo, o suspaustas srautas, kurį klientas lėtai išskleidžia, gali pabloginti patirtį. Pirmiausia išmatuokite etapą, tada pasirinkite palaikomą pakeitimą tam etapui.