Articles

Hoe SQL Server zich als een mens te laten gedragen door gebruik te maken van WAITFOR

fischer-twins-396836 foto door Fischer Twins op Unsplash

U stemt waarschijnlijk uw query ‘ s af voor maximale prestaties. U bent er trots op te weten hoe u indexen en refactor code toe te voegen om uit te knijpen elke laatste daling van de prestaties van uw server potentieel. Snelheid is meestal koning.

daarom gebruikt u waarschijnlijk het WAITFOR-commando van SQL Server niet regelmatig – het maakt uw algehele query trager.

echter, traagheid is niet altijd een slechte zaak. Vandaag wil ik jullie twee van mijn favoriete manieren laten zien om het WAITFOR commando te gebruiken.

bekijk de video van deze week op YouTube

u kunt ook de inhoud van deze week bekijken op mijn YouTube-kanaal .

1. Het bouwen van een menselijke

moderne computers zijn snel. CPU ’s uitvoeren miljarden acties per seconde, de hoeveelheid RAM-fabrikanten kunnen proppen op een stick neemt regelmatig toe, en SSD’ s maken snel disk I/O betreft een ding van het verleden.

hoewel al deze dingen geweldig zijn voor het verwerken van grote workloads, verplaatsen ze computers steeds verder weg van “menselijke snelheid”.

maar” menselijke snelheid ” is soms wat je wilt. Misschien wilt u het gebruik van apps simuleren op uw database of de belasting die is gemaakt door analisten die ad hoc queries uitvoeren tegen uw server.

Dit is waar ik hou van het gebruik van WAITFOR DELAY – het kan mensen simuleren het uitvoeren van query ‘ s zeer welll:

-- 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

Gooi wat psuedo-random number generation en een aantal IF statements, en je hebt een fake server load je kunt beginnen met:

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. Poor Man ‘ S Service Broker

Service Broker is een geweldige functie in SQL Server. Het behandelt messaging en queuing scenario ’s echt goed, maar vereist meer setup tijd, dus ik meestal niet graag met behulp van het in scenario’ s waar ik iets snel en vies nodig.

in plaats van Service Broker in te stellen om te weten wanneer bepaalde gegevens beschikbaar zijn of een proces klaar is om afgetrapt te worden, kan ik hetzelfde doen met een WHILE loop en een WAITFOR:

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? Geen. Praktisch? Bevestigend.

Ik hoef niet langer een tabel te controleren op resultaten voordat ik een query start – ik kan wachten om dat Voor mij te doen.

Als u weet dat er een specifieke tijd is waarop u wilt wachten totdat u een proces begint te pingen, kunt u wachttijden gebruiken om uw controle nog intelligenter te maken:

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *