Articles

Sådan får du Server til at fungere som et Menneske ved at bruge VENTETIL

fischer-tvillinger-396836 foto af Fischer tvillinger på Unsplash

du indstiller sandsynligvis dine forespørgsler for maksimal ydelse. Du sætter en ære i at vide, hvordan du tilføjer indekser og refactor kode for at presse ud hver sidste dråbe din server ydeevne potentiale. Hastighed er normalt konge.

derfor bruger du sandsynligvis ikke regelmæssigt serverens VENTEFOR – kommando-det får faktisk din samlede forespørgsel til at køre langsommere .

dog er langsomhed ikke altid en dårlig ting. I dag vil jeg vise dig to af mine foretrukne måder at bruge kommandoen VENTFOR på.

se denne uges video på YouTube

Du kan også se denne uges indhold på min YouTube-kanal .

1. Opbygning af et menneske

moderne computere er hurtige. Sekund, mængden af RAM-producenter kan proppe på en pind øges regelmæssigt, og SSD ‘ er gør hurtigt disk I/O-bekymringer til fortiden.

mens alle disse ting er gode til behandling af store arbejdsbelastninger, flytter de computere længere og længere væk fra “menneskelig hastighed”.

men “menneskelig hastighed” er nogle gange, hvad du vil have. Måske vil du simulere appbrug i din database eller den belastning, der er oprettet af analytikere, der kører ad hoc-forespørgsler mod din server.

det er her, Jeg elsker at bruge VENTETIL forsinkelse – det kan simulere mennesker, der udfører forespørgsler ekstremt godt:

-- Run foreverWHILE (1=1)BEGIN --Insert data to simulate an app action from our app EXEC dbo.BuyDonuts 12 -- We usually average an order every 3 seconds WAITFOR DELAY '00:00:03'END

kast nogle psuedo-tilfældige talgenerering og nogle if-udsagn, og du har en falsk serverbelastning, du kan begynde at bruge:

WHILE (1=1)BEGIN -- Generate command values 1-24 DECLARE @RandomDonutAmount int = ABS(CHECKSUM(NEWID()) % 25) + 1 -- Generate a delay between 0 and 5 seconds DECLARE @RandomDelay int = ABS(CHECKSUM(NEWID()) % 6) EXEC dbo.BuyDonuts @RandomDonutAmount WAITFOR DELAY @RandomDelayEND

2. Dårlig mands Servicemægler

Servicemægler er en fantastisk funktion i server. Det håndterer messaging og kø scenarier rigtig godt, men kræver mere opsætningstid, så jeg kan normalt ikke lide at bruge det i scenarier, hvor jeg har brug for noget hurtigt og snavset.

i stedet for at skulle oprette Servicemægler for at vide, hvornår nogle data er tilgængelige, eller en proces er klar til at blive sparket i gang, kan jeg gøre det samme med et stykke tid loop og en VENTETIL:

DECLARE @Quantity smallint = NULL-- Keep checking our table data until we find the data we wantWHILE (@Quantity IS NULL)BEGIN -- Delay each iteration of our loop for 10 seconds WAITFOR DELAY '00:00:03' -- Check to see if someone has bought a dozen donuts yet SELECT @Quantity = Quantity FROM dbo.Orders WHERE Quantity = 12END-- Run some other query now that our dozen donut purchase condition has been metEXEC dbo.GenerateCoupon

Fancy? Ingen. Praktisk? Ja.

Jeg behøver ikke længere at holde øje med en tabel for resultater, før jeg kører en forespørgsel – jeg kan vente på at gøre det for mig.

Hvis du ved, at der er et bestemt tidspunkt, du vil vente på, indtil du begynder at pinge en proces, kan du indarbejde ventetid for at gøre din kontrol endnu mere intelligent:

DECLARE @Quantity smallint = NULL-- Let's not start checking until 6am...that's when the donut shop opensWAITFOR TIME '06:00:00'-- Keep checking our table data until we find the data we wantWHILE (@Quantity IS NULL)BEGIN -- Delay each iteration of our loop for 10 seconds WAITFOR DELAY '00:00:03' -- Check to see if someone has bought a dozen donuts yet SELECT @Quantity = Quantity FROM dbo.Orders WHERE Quantity = 12END-- Run some other query now that our dozen donut purchase condition has been metEXEC dbo.GenerateCoupon

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *