Zergatik dabil SQL aplikazio berritsua VPN baten bidez eta zer batu
Ehun kontsulta dependente jaurtitzen dituen pantaila batek joan-etorri osoa ehun aldiz ordaintzen du. Zenbatu itxaronaldiak, batu independenteak, eta gero mugitu exekuzioa.
Sare lokalean segundo bat baino gutxiagoan agertzen den formulario batek bost segundo behar ditu VPN baten bidez, bitartean esteka berean fitxategi-kopia abiadura betean doa. Aldea ez da banda-zabalera. Formularioak erantzun segida baten zain egoten da eta joan-etorri osoa ordaintzen du urrats bakoitzean, fitxategi-kopiak byteak etengabe bidean mantentzen dituen bitartean. Zenbatu itxaronaldi horiek sarbide-lerroa ukitu aurretik.
Sintoma pantaila bat da, ez kontsulta bat
Pantaila horretako kontsulta bakoitza azkarra izan daiteke eta pantaila motela izan daiteke oraindik, guztizkoa itxaronaldien batura delako, ez exekuzio-denboraren batura. Bi milisegundotan exekutatzen den sententzia batek joan-etorri oso bat ordaintzen du oraindik, bezeroak hurrengoa bidali aurretik emaitza jaso behar duenean. Berrogei milisegundoko latentzia duen bide batean, ehun deialdi dependente lau segundo inguru biltzen dira edozein marrazte-lan hasi aurretik. Aritmetika hori itxaronaldiaren eredua da, ez zure estekaren neurketa.
Horregatik abiadura-proba errugabea dirudi. Transferentzia masiboak emaria neurtzen du, formulario berritsuak latentzia neurtzen du, eta VPN bat bikaina izan daiteke batean eta arrunta bestean. Beraz, pantaila diagnostikatzeak pantaila neurtzea esan nahi du, ez esteka.
Erregistratu erabiltzaile-ekintza baten hasieratik amaierako denbora ezer aldatu aurretik. Zenbaki hori da geroko konponketa batek funtzionatu duen esan diezazukeen oinarri-lerro bakarra.
Zenbatu itxaronaldi sekuentzialak erabiltzaile-ekintza batean
Neurtu bezeroan, asmatu beharrean. Psql-en \timing on(e)k sententzia bakoitzaren igarotako denbora inprimatzen du, eta EXPLAIN (ANALYZE, BUFFERS)(e)k erakusten du denbora horretatik zenbat eman zuen zerbitzariak lanean benetan.
Bi zenbaki horien arteko aldea zure sare- eta bezero-kostua da. Sententzia bat bi milisegundotan exekutatzen bada eta bezeroak hirurogei erregistratzen baditu, gainerako berrogeita hemezortziak bidaia eta tokiko prozesamendua dira, eta inolako indizek ez ditu kenduko. Errepikatu konparazio hori pantailak jaulkitzen duen sententzia bakoitzerako eta batu aldeak, ez exekuzio-denborak.
Idatzi emaitza itxaronaldi sekuentzialen zenbaketa gisa. Hori da hurrengo bi atalek murriztu dezaketen kantitatea, eta frogak emanaz eztabaida dezakezun zenbakia da.
Batu deialdi independenteak, gorde dependenteak
Elkarren emaitzak irakurtzen ez dituzten bi sententziak elkarrekin bidaiatu eta behin bildu daitezke, eta horrek bi itxaronaldi bat bihurtzen ditu. Bigarrenak lehenaren balioa behar duen bi sententziek ezin dute, mendekotasuna erreala delako eta batzeak programak egiten duena aldatuko lukeelako. Sailkatu deialdiak bi pila horietan ezer berridatzi aurretik, eta pila bakoitzaren tamainak zer den posible esaten dizu.
Multzoetan oinarritutako lanak itxaronaldiak sakonago kentzen ditu batzeak baino. Begizta batek banan-banan ekartzen zituen errenkadak itzultzen dituen kontsulta batek begizta ezabatzen du, joan-etorriekin batera. Bilatu begizta lehenengo, normalean irabazi handiena eta berrikusteko aldaketa errazena baita.
Bati batek errore-kudeaketa eta transakzio-mugak mantendu behar ditu oraindik. Erlaziorik gabeko sententziak kate bakarrean elkartzea ez da optimizazio segurua, eta bidalketa arrakastatsu baten atzean huts egindako sententzia bat ezkutatzen duen bati bat aurrezten zituen itxaronaldiek baino okerragoa da.
Erabili konexioak berriro banda-zabalera erosi aurretik
Konexio berri batek izen-bereizmena, TCP eskuko agurra, TLS negoziazioa eta autentikazioa kostatzen ditu, eta latentzia handiko bide batean horietako bakoitza beste joan-etorri bat da lehen kontsulta exekutatu aurretik. Konexio-poolak existitzen dira kostu hori prozesuko behin ordaintzeko, ez deialdiko behin.
ADO.NET-en, pool-era konexio bat ixteak edo suntsitzeak berrerabiltzeko itzultzen du, fisiko berri bat ireki beharrean, beraz, ihes bat dirudien eredua askotan erabilera zuzena da. Egiaztatu pool-a benetan erabiltzen ari dela, suposatu beharrean: erregistratu konexio fisikoak sortzea, edo begiratu zerbitzariko saio-kontagailua pantaila dabilen bitartean. SQL errendimendu-gidak gauza bera dio joan-etorriak murrizteari eta maizko ad hoc deialdiak batzeari buruz, zerbitzuari dagozkion adibideekin, zeintzuk zure inplementaziora eraman behar dituzun.
Pooling-ak instalazio-kostua kentzen du eta kontsulten itxaronaldi sekuentzialak ukitu gabe uzten ditu. Neurketa garbirako aurrebaldintza da, ez bere horretan konponketa.
Pisatu exekuzioa datuetara hurbiltzea
Aplikazioa datu-basetik gertu exekutatzeak datu-basearekiko truke urrun asko pantaila-saio urrun bakar batekin ordezkatzen ditu. Karga berritsu baterako aldaketa handia izan daiteke, eta errendimendu-aldaketa bezainbeste eragiketa-aldaketa da: saioen kudeaketa, sarbide-kontrola, softwarearen hedapena eta erabiltzaile-esperientzia guztiak aplikazioarekin batera mugitzen dira.
Neurtu benetako interfazea eta hark transferitzen dituen datuak, edozein norabide azkarragoa dela suposatu aurretik. Urruneko mahaigain-saio batek pixelak mugitzen ditu, eta grafiko dentsoa duen pantaila batek okerrago joka dezake bide berean ordezkatu zituen kontsultak baino, batez ere bezeroak etengabe berriz marrazten duenean.
Gero errepikatu jatorrizko ekintza eta alderatu hiru zenbaki: itxaronaldi sekuentzialak, emaitzen bolumena eta hasieratik amaierako osatze-denbora. Neurtutako erabiltzaile-zeregina aldatzen duen eta aldi berean datuen zuzenketa eta sarbide-politika gordetzen dituen hobekuntza da mantentzea merezi duena.