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:
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?Durante questo 1 sec, se ci sono altre transazioni che provano a
INSERT/UPDATE
sulla tabellaDUMMY
, 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
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 –
@Damien_The_Unbeliever grazie per aver segnalato, non è in un BEGIN TRAN ... Blocco COMMIT, solo tsql avvolto in perl. –
Se vuoi davvero minimizzare l'impatto, assicurati che ci sia un indice su FOO –