Veliki SQL rezultat preko VPN-a: gdje redovi čekaju
Veliki SQL rezultat čeka na tri mjesta: u međuspremnicima servera, na VPN putu i u klijentu. Izmjerite svaku fazu prije nego promijenite propusnost ili uključite kompresiju.
Upiti mogu završiti u milisekundama, a ipak im trebaju minute da stignu do prijenosnog računala preko VPN-a. Server upisuje redove u međuspremnike, veza ih prenosi, a klijent ih troši, i te se faze preklapaju umjesto da idu redom. Bilo koja od njih može postati ograničenje. Pronađite fazu koja zaista čeka prije nego promijenite propusnost ili uključite kompresiju.
Tri faze, jedna štoperica
Podijelite mjerač vremena na dva broja različitog značenja: trenutak kada je prvi red dostupan i trenutak kada je posljednji red potrošen. Mreža koja iscrtava prvu stranicu dokazuje samo da je upit počeo. Vrijeme cjelovitog rezultata je ono što korisnik doživljava kad izvozi ili se pomiče do kraja.
Zapišite oba broja uz tekst upita, parametre i postavke veze. Bez tog konteksta usporedba je između dva različita posla, a ne dvije lokacije.
Pročitajte čekanje prije mreže
SQL Server upisuje retke rezultata u izlazne međuspremnike da ih klijent dohvati, a klijent koji troši sporo može natjerati server da čeka na to slanje. Tip čekanja je ASYNC_NETWORK_IO, a Microsoftova bilješka za rješavanje problema navodi velike rezultate i obradu na strani klijenta među uzrocima. Čekanje kaže da je put slanja blokiran, a ne zašto.
Spor VPN može pridonijeti, ali tako i klijent koji oblikuje svaki red, zapisuje u datoteku ili pravi stanke između serija. Naziv čekanja pokazuje na sljedeće mjerenje, a nije presuda o vezi.
SELECT wait_type, wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_type = 'ASYNC_NETWORK_IO';
Čitajte brojač dok ograničeno opterećenje radi, a ne nakon praznog sata, jer kumulativni brojači miješaju svaku sesiju od pokretanja instance. Usporedite razliku tijekom izvođenja, a ne ukupan zbroj za cijeli vijek. Rastuća razlika tijekom prijenosa sužava pitanje na potrošnju ili isporuku.
Stavite oba klijenta na isti sat
Pokrenite ograničeno opterećenje s klijenta blizu baze podataka i s udaljenog klijenta. Držite upit, parametre, veličinu rezultata i postavke veze identičnima. Koristite isto mjerenje na objema stranama, jer vrijeme izvršavanja servera, vrijeme prikaza mreže i vrijeme izvoza tri su različita sata. Uspoređivanje broja sa serverske strane s mjeračem izvoza na strani klijenta daje zaključak koji se ne može provjeriti.
Kad put izgleda odgovoran, neka mrežni vlasnik promatra gubitke, ponovna slanja i postignutu propusnost za taj određeni tok dok prijenos traje. Opći test brzine može koristiti drugu rutu, odredište ili obrazac paralelnosti. Mali uspješan zahtjev malo govori o trajnom prijenosu rezultata.
Smanjite bajtove prije nego okrivite put
Filtriranje, agregacija i odabir samo potrebnih stupaca smanjuju i obujam prijenosa i rad klijenta sa svakim redom. Sačuvajte namjeravani rezultat, jer izvještaju može trebati detalj koji sažetak na zaslonu ne daje.
Za ponovljive izvoze odobreno mjesto izvršavanja blizu baze podataka može zapisati definirani izlaz koji se zatim dostavlja jednom. To mijenja tijek rada i njegove kontrole pristupa, i nije dopuštenje da se neograničeni ispis ostavi na dijeljenom hostu.
Kompresija nije zadani popravak. Podrška i sigurnost ovise o stvarnom protokolu i postavljanju, a komprimirani tok koji klijent sporo raspakirava može pogoršati iskustvo. Prvo izmjerite fazu, zatim odaberite podržanu promjenu za tu fazu.