Articles

Come rendere SQL Server agire come un essere umano Utilizzando WAITFOR

fischer-twins-396836 Foto di Fischer Twins su Unsplash

Probabilmente sintonizzare le query per le massime prestazioni. Sei orgoglioso di sapere come aggiungere indici e codice refactoring per spremere fino all’ultima goccia il potenziale di prestazioni del tuo server. La velocità è di solito re.

Ecco perché probabilmente non si utilizza il comando WAITFOR di SQL Server regolarmente – in realtà rende la query complessiva più lenta .

Tuttavia, la lentezza non è sempre una brutta cosa. Oggi voglio mostrarvi due dei miei modi preferiti per utilizzare il comando WAITFOR.

Guarda il video di questa settimana su YouTube

Puoi anche guardare i contenuti di questa settimana sul mio canale YouTube .

1. Costruire un umano

I computer moderni sono veloci. Le CPU eseguono miliardi di azioni al secondo, la quantità di RAM prodotta può stipare su un bastone aumenta regolarmente, e gli SSD stanno rapidamente facendo disco I/O riguarda una cosa del passato.

Mentre tutte queste cose sono ottime per l’elaborazione di carichi di lavoro di grandi dimensioni, spostano i computer sempre più lontano dalla “velocità umana”.

Ma la “velocità umana” a volte è ciò che vuoi. Forse vuoi simulare l’utilizzo dell’app sul tuo database o il carico creato dagli analisti che eseguono query ad hoc sul tuo server.

Questo è dove amo usare WAITFOR DELAY – può simulare gli esseri umani che eseguono query molto bene:

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

Inserisci un po ‘ di generazione di numeri casuali psuedo e alcune istruzioni IF, e hai un carico di server falso puoi iniziare a usare:

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. Broker di servizi del povero

Il broker di servizi è una grande funzionalità in SQL Server. Gestisce molto bene gli scenari di messaggistica e accodamento, ma richiede più tempo di configurazione, quindi di solito non mi piace usarlo in scenari in cui ho bisogno di qualcosa di veloce e sporco.

Invece di dover impostare Service Broker per sapere quando alcuni dati sono disponibili o un processo è pronto per essere avviato, posso fare lo stesso con un ciclo WHILE e un 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? No. Pratico? Sì.

Non ho più bisogno di continuare a controllare una tabella per i risultati prima di eseguire una query – posso avere WAITFOR farlo per me.

Se sai che c’è un tempo specifico che vuoi aspettare fino a quando non inizi a eseguire il ping di un processo, puoi incorporare WAITFOR TIME per rendere il tuo controllo ancora più intelligente:

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *