2013-05-23 14 views
7

Cerco di scoprire le prestazioni o l'implementazione interna per WAITFOR in T-SQL, sono passati attraverso MSDN e StackOverflow e altri siti senza fortuna, qui è la mia domandaQual è l'impatto di WAITFOR su altri processi e transazioni?

Per sottostante Codice, voglio eliminare la parte superiore 10.000 righe dalla tabella DUMMY. Voglio fare in modo che questo lavoro di cancellazione abbia il minor impatto sulle prestazioni sugli altri lavori del database e dare la priorità agli altri (se ce ne sono). Quindi faccio in modo che elimini 100 righe alla volta e lo faccia 100 volte con il tempo di sospensione in due eliminazioni adiacenti.

Domanda:

  1. Durante il WAITFOR tempo di blocco, sarà questa transazione consumare CPU o semplicemente inattiva e in attesa di calci da qualche evento 1 secondo più tardi?

  2. Durante questo 1 sec, se ci sono altre transazioni che provano a INSERT/UPDATE sulla tabella DUMMY, chi ha la priorità?

davvero apprezzare il vostro aiuto o qualsiasi intuizioni di questo

declare @cnt int 
set @cnt = 0 
while @cnt < 100 
begin 
    delete top 100 from DUMMYTABLE where FOO = 'BAR' 
    set @cnt = @cnt + 1 
    waitfor delay '00:00:01' 
end 
+0

Per il punto 2, dipende dal fatto che tu ci abbia mostrato l'intero codice - se il codice è in esecuzione all'interno di una transazione, questo cambia tutto –

+0

@Damien_The_Unbeliever grazie per aver segnalato, non è in un BEGIN TRAN ... Blocco COMMIT, solo tsql avvolto in perl. –

+1

Se vuoi davvero minimizzare l'impatto, assicurati che ci sia un indice su FOO –

risposta

18
  • Non consuma qualsiasi CPU
  • Stato = sospeso

Si può vedere questo con 2 interrogazione windows:

SELECT @@SPID; 
GO 
WAITFOR DELAY '000:03:00'; -- three minutes 

poi nell'altro

SELECT * FROM sys.sysprocesses S WHERE S.spid = 53; -- replace 53 

Nota: SQL Server 2012 SP1, ma per quanto ne so comportamento è lo stesso

punto 2, dispiace perdere questo

Un'altra sessione verrà modificare la tabella, mentre il WAITFOR è in esecuzione. Non è una serratura.

+1

grazie gbn, la tua risposta e il tuo esperimento sono così utili! non so che possiamo fare qualcosa di simile prima. molte grazie! –

Problemi correlati