Principale utente con più risposte
eliminare record -

Domanda
-
salve
ho una tabella con 400.000 record
ho un campo ID come campo chiave
analizzando la tabella noto che ho 50 record che hanno solo il valore ID e tutti gli altri campi vuoti
ho provato ad eseguire
DELETE FROM [MioDatabase].[dbo].[MiaTabella]
WHERE iD = 373643 or id 373642
GO
ma e' da 15 minuti che sta eseguendo la vista
come posso risolvere?
GRAZIE
Risposte
-
Ciao,
potresti controllare se la query di eliminazione è ha incontrato un lock ed è quindi bloccata in attesa della risorsa, la DMV sys.dm_os_waiting_tasks può darti informazioni utili.
A mali estremi, puoi eseguire il kill dello SPID che sta eseguendo la DELETE (ovviamente la transazione verrà respinta).
Ciao
Sergio Govoni
Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn
- Modificato Sergio GovoniMVP, Moderator martedì 14 aprile 2020 21:31
- Proposto come risposta Edoardo BenussiMVP, Moderator lunedì 20 aprile 2020 07:45
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 27 aprile 2020 10:38
-
Un'operazione di delete potrebbe andare lunga anche in questi casi:
- un trigger di delete svolge ulteriori operazioni onerose
- esistono tabelle correlate con foreign key su cui sono definite azioni (cascading delete/update) onerose
Nel caso in cui l'update fosse bloccata da lock di altri processi potresti impostare un lock timeout piccolo, p.es. 5sec, in modo da accorgerti subito della loro presenza:
/* attende il lock 5sec */ set lock_timeout 5000 delete...
Da come hai scritto la where assumiamo che il campo id sia un numerico (int, etc): è così?
ciao
G.
- Proposto come risposta Edoardo BenussiMVP, Moderator lunedì 20 aprile 2020 07:45
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 27 aprile 2020 10:38
Tutte le risposte
-
Ciao,
potresti controllare se la query di eliminazione è ha incontrato un lock ed è quindi bloccata in attesa della risorsa, la DMV sys.dm_os_waiting_tasks può darti informazioni utili.
A mali estremi, puoi eseguire il kill dello SPID che sta eseguendo la DELETE (ovviamente la transazione verrà respinta).
Ciao
Sergio Govoni
Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn
- Modificato Sergio GovoniMVP, Moderator martedì 14 aprile 2020 21:31
- Proposto come risposta Edoardo BenussiMVP, Moderator lunedì 20 aprile 2020 07:45
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 27 aprile 2020 10:38
-
Un'operazione di delete potrebbe andare lunga anche in questi casi:
- un trigger di delete svolge ulteriori operazioni onerose
- esistono tabelle correlate con foreign key su cui sono definite azioni (cascading delete/update) onerose
Nel caso in cui l'update fosse bloccata da lock di altri processi potresti impostare un lock timeout piccolo, p.es. 5sec, in modo da accorgerti subito della loro presenza:
/* attende il lock 5sec */ set lock_timeout 5000 delete...
Da come hai scritto la where assumiamo che il campo id sia un numerico (int, etc): è così?
ciao
G.
- Proposto come risposta Edoardo BenussiMVP, Moderator lunedì 20 aprile 2020 07:45
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 27 aprile 2020 10:38
-
oltre alle risposte corrette già ricevute non capisco perchè tu, a fronte di 50 record con questa caratteristica, esegua la seguente istruzione di delete
DELETE FROM [MioDatabase].[dbo].[MiaTabella]
WHERE iD = 373643 or id 373642
GO
perchè cancelli solo 2 record?
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it