Come uccidere / interrompere immediatamente una lunga query SQL?


93

Sto usando SQL Server 2008 e il suo studio di gestione. Ho eseguito una query che restituisce molte righe. Ho provato ad annullarlo tramite il pulsante rosso di annullamento, ma non si è fermato negli ultimi 10 minuti. Di solito si ferma entro 3 minuti.

Quale potrebbe essere il motivo e come posso interromperlo immediatamente?


hai controllato che qualsiasi applicazione trattiene questa query?
user1102001

1
arrestare e riavviare nuovamente i servizi sql ..
user1102001

ho affrontato questo senario perché anche io stavo eseguendo tutto in sql ed è mio desiderio modificare il mio profilo o no ...
user1102001

@ user1102001 - non ti obbliga a fare nulla. Ho detto che si può e non si deve :)
sequel.learner

Risposte:


66

Quale potrebbe essere la ragione

L'annullamento della query è immediato, a condizione che la tua attenzione possa raggiungere il server ed essere elaborata. Una query deve trovarsi in uno stato annullabile, che è quasi sempre vero tranne se si eseguono determinate operazioni come chiamare un servizio Web da SQLCLR. Se la tua attenzione non riesce a raggiungere il server è solitamente dovuto al sovraccarico dello scheduler .

Ma se la tua query fa parte di una transazione che deve essere ripristinata, il ripristino non può essere interrotto. Se sono necessari 10 minuti, sono necessari 10 minuti e non c'è niente che tu possa fare al riguardo. Anche il riavvio del server non aiuterà, renderà solo più lungo l'avvio poiché il ripristino deve terminare il rollback.

Per rispondere a quale motivo specifico si applica al tuo caso, dovrai indagare da solo.


Si noti che SSMS mostra la query come "annullata" (al contrario di "tentativo di annullamento") solo dopo aver ricevuto la risposta di attenzione, il che implica prima il drenaggio di tutti i risultati intermedi nella pipe di comunicazione (ad es. Tutti i risultati nel TCP / IP buffer di invio / ricezione e tutti i buffer in memoria).
Remus Rusanu

1
Vorrei che dicesse "rollback"
Simon_Weaver

@RemusRusanu - Cosa succede se il tempo di ripristino stimato è di oltre 20.000 ore? Felice di ripristinare da un backup. dba.stackexchange.com/questions/222145/…
youcantryreachingme

108
sp_who2 'active'

Controlla i valori in CPUTime e DiskIO . Notare lo SPID del processo che ha un valore elevato in confronto.

kill {SPID value}

Sto usando Microsoft SQL Server 2008 R2, ho provato a scoprire qual è lo SPID della query che viene eseguita ed è sospesa, e ho scoperto che ci sono molte istanze dello stesso SELECT SQL con lo stesso SPID. Quando provo a eseguire il comando KILL 114 - qui 114 è il valore SPID della mia query sospesa. Di seguito viene visualizzato l'errore: Guida. Msg 102, livello 15, stato 1, riga 2 Sintassi non corretta vicino a "114".
Code Buster

40

Per prima cosa esegui il comando seguente:

sp_who2

Successivamente, esegui il comando seguente con SPID, che hai ottenuto dal comando precedente:

KILL {SPID value}

22

Questa è una risposta sciocca, ma funziona in modo affidabile almeno nel mio caso: nello studio di gestione, quando "Annulla esecuzione query" non interrompe la query, faccio semplicemente clic per chiudere il documento sql corrente. mi chiede se voglio cancellare la query, dico di si, ed ecco che in pochi secondi smette di essere eseguita. Dopodiché mi chiede se voglio salvare il documento prima di chiuderlo. A questo punto posso fare clic su Annulla per mantenere il documento aperto e continuare a lavorare. Non ho idea di cosa stia succedendo dietro le quinte, ma sembra funzionare.


5
In questo caso la query potrebbe effettivamente essere ancora in esecuzione / sospesa in background, semplicemente non la vedrai più.
Aries51

1
Penso che uccida la connessione, poiché devi riconnetterti dopo questo.
anakic

2
Termina la connessione a SSMS ma non (necessariamente) al db.
Aries51

1
Ho provato questo mio sql appeso. T_T
bot

1
Se non puoi vederlo, non esiste.
ChrisD

13

Se annulli e vedi quella corsa

 sp_who2 'active'

(Activity Monitor non sarà disponibile sul vecchio sql server 2000 FYI)

Individua lo SPID che desideri uccidere, ad esempio 81

Kill 81

Esegui di sp_who2 'active' nuovo e probabilmente noterai che sta dormendo ... rotolando indietro

Per ottenere lo STATUS, esegui di nuovo KILL

Kill 81 

Quindi riceverai un messaggio come questo

 SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.

11

È possibile utilizzare una scorciatoia da tastiera ALT+ Breakper interrompere l'esecuzione della query. Tuttavia, ciò potrebbe non riuscire in tutti i casi.


1
Questo è funzionato per me nello studio di gestione. Grazie
Vishvanathsinh Solanki

3
--Find Session Id for respective all running queries
SELECT text, getdate(),*
 FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)

---Kill specific session
kill 125

Per favore aggiungi qualche spiegazione alla tua risposta modificandola in modo che gli altri possano imparare da essa
Nico Haase

2

apparentemente su sql server 2008 r2 64bit, con una query di lunga durata da IIS il kill spid non sembra funzionare, la query viene riavviata ancora e ancora. e sembra che stia riutilizzando lo spid. la query fa sì che il server sql prenda costantemente il 35% di CPU e blocchi il sito web. Immagino che bc / non possa rispondere ad altre domande per l'accesso


2
Mi piacerebbe vedere una fonte per questo.
Ant Swift

1

Dalle mie parti il ​​mio sql si è bloccato quando ho provato a chiuderlo mentre correvo all'infinito. Quindi quello che ho fatto è aprire il mio task manager e terminare l'attività con la mia query sql. Questo ha fermato il mio sql e lo ha riavviato.


1

Una semplice risposta, se la casella rossa "stop" non funziona, è provare a premere i pulsanti "Ctrl + Break" sulla tastiera.

Se stai eseguendo SQL Server su Linux, c'è un'app che puoi aggiungere al tuo systray chiamata "killall". Basta fare clic sul pulsante "killall" e quindi fare clic sul programma che è catturato in un ciclo e terminerà il programma. Spero che aiuti.


1

Soffro della stessa cosa da molto tempo. Ciò accade specialmente quando sei connesso a un server remoto (che potrebbe essere lento) o hai una connessione di rete scarsa. Dubito che Microsoft sappia qual è la risposta giusta.

Ma da quando ho provato a trovare la soluzione. Solo un approccio laico ha funzionato

  • Fare clic sul pulsante di chiusura sulla scheda della query di cui si è vittime. Dopo un po '(se Microsoft non è duro con te !!!) potresti ottenere una finestra che lo chiede

"La query è attualmente in esecuzione. Annullare la query?"

  • Fare clic su "Sì"

  • Dopo un po 'ti chiederà se vuoi salvare questa query o no?

  • Fare clic su "Annulla"

E post questo, potrebbe essere che il tuo studio sia di nuovo stabile per eseguire la tua query.

Quello che fa in background è disconnettere la finestra della query con la connessione. Quindi, per eseguire nuovamente la query, ci vorrà del tempo per connettere nuovamente il server remoto. Ma credimi, questo compromesso è molto meglio della sofferenza di vedere quel timer che funziona per l'eternità.

PS: questo funziona per me, complimenti se funziona anche per te. !!!


1
Ha funzionato ancora per me e ha risolto il mio problema a partire da ->
ErocM
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.