¿Cómo eliminar / detener una consulta SQL larga inmediatamente?

93

Estoy usando SQL Server 2008 y su estudio de administración. Ejecuté una consulta que arroja muchas filas. Intenté cancelarlo mediante el botón rojo de cancelación, pero no se detuvo durante los últimos 10 minutos. Por lo general, se detiene en 3 minutos.

¿Cuál podría ser la razón y cómo lo detengo de inmediato?

aprendiz de secuela
fuente
¿Ha comprobado que alguna aplicación contiene esta consulta?
user1102001
1
detenga y reinicie sus servicios SQL nuevamente ..
user1102001
Me he enfrentado a este senario ya que incluso yo estaba corriendo todo en SQL y es mi deseo de editar mi proflie o no ...
user1102001
@ user1102001: no te obliga a hacer nada. Dije que puedo y no debería :)
sequel.learner

Respuestas:

66

Cual podria la razon

La cancelación de una consulta es inmediata, siempre que su atención pueda llegar al servidor y ser procesada. Una consulta debe estar en un estado cancelable, que casi siempre es cierto, excepto si realiza ciertas operaciones como llamar a un servicio web desde SQLCLR. Si su atención no puede llegar al servidor, generalmente se debe a una sobrecarga del programador .

Pero si su consulta es parte de una transacción que debe revertirse, la reversión no se puede interrumpir. Si toma 10 minutos, entonces necesita 10 minutos y no hay nada que pueda hacer al respecto. Incluso reiniciar el servidor no ayudará, solo hará que el inicio sea más largo ya que la recuperación debe finalizar la reversión.

Para responder qué motivo específico se aplica a su caso, deberá investigarlo usted mismo.

Remus Rusanu
fuente
Tenga en cuenta que SSMS muestra la consulta como 'cancelada' (a diferencia de 'intentar cancelar') solo después de que se recibe la respuesta de atención, lo que implica drenar primero todos los resultados intermedios en el conducto de comunicación (por ejemplo, todos los resultados en el TCP / IP enviar / recibir búferes y todos los búferes en memoria).
Remus Rusanu
1
Desearía que dijera 'retroceder'
Simon_Weaver
@RemusRusanu: ¿Qué pasa si el tiempo de reversión estimado es de más de 20.000 horas? Feliz de restaurar desde una copia de seguridad. dba.stackexchange.com/questions/222145/…
you cantryreachingme
108
sp_who2 'active'

Compruebe los valores en CPUTime y DiskIO . Tenga en cuenta que el SPID del proceso tiene un gran valor comparativamente.

kill {SPID value}
Mudassir Hasan
fuente
Estoy usando Microsoft SQL Server 2008 R2, intenté averiguar cuál es el SPID de la consulta que se está ejecutando y está suspendida, y descubrí que hay muchas instancias del mismo SELECT SQL que tienen el mismo SPID. Cuando intento ejecutar el comando KILL 114, aquí 114 es el valor SPID de mi consulta suspendida. Aparece el mensaje de error a continuación: Por favor, guíe. Msg 102, Level 15, State 1, Line 2 Sintaxis incorrecta cerca de '114'.
Code Buster
40

Primero ejecute el siguiente comando:

sp_who2

Después de eso, ejecute el siguiente comando con SPID, que obtuvo del comando anterior:

KILL {SPID value}
usuario1608817
fuente
22

Esta es una respuesta algo tonta, pero funciona de manera confiable al menos en mi caso: en Management Studio, cuando "Cancelar la ejecución de la consulta" no detiene la consulta, simplemente hago clic para cerrar el documento SQL actual. me pregunta si quiero cancelar la consulta, digo que sí, y he aquí que en unos segundos deja de ejecutarse. Después de eso, me pregunta si quiero guardar el documento antes de cerrarlo. En este punto, puedo hacer clic en Cancelar para mantener el documento abierto y seguir trabajando. No tengo idea de lo que sucede detrás de escena, pero parece funcionar.

anakic
fuente
5
En este caso, es posible que la consulta aún se esté ejecutando / colgando en segundo plano, simplemente ya no la verá.
Aries51
1
Creo que mata la conexión, ya que tienes que volver a conectarte después de esto.
anakic
2
Mata la conexión a SSMS pero no (necesariamente) a la base de datos.
Aries51
1
Intenté esto, mi sql colgó. T_T
bot
1
Si no puede verlo, no existe.
ChrisD
13

Si cancelas y ves que se ejecuta

 sp_who2 'active'

(Activity Monitor no estará disponible en el antiguo SQL Server 2000 FYI)

Encuentra el SPID que deseas matar, por ejemplo, 81

Kill 81

Ejecute de sp_who2 'active' nuevo y probablemente notará que está durmiendo ... retrocediendo

Para que el STATUS vuelva a ejecutar el KILL

Kill 81 

Entonces recibirás un mensaje como este

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

Puede usar un atajo de teclado ALT+ Breakpara detener la ejecución de la consulta. Sin embargo, esto puede no funcionar en todos los casos.

Yash Saraiya
fuente
1
Este me funcionó en Management Studio. Gracias
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
Jai Nath Gupta
fuente
1
Agregue alguna explicación a su respuesta editándola de manera que otros puedan aprender de ella
Nico Haase
2

aparentemente en sql server 2008 r2 64bit, con una consulta de larga ejecución desde IIS, el kill spid no parece funcionar, la consulta simplemente se reinicia una y otra vez. y parece estar reutilizando el spid. la consulta hace que el servidor sql tome como un 35% de la CPU constantemente y cuelgue el sitio web. Supongo que bc / no puede responder a otras consultas para iniciar sesión

Joseph McKinley
fuente
2
Me encantaría ver una fuente para esto.
Ant Swift
1

En mi parte, mi sql colgó cuando intenté cerrarlo mientras lo ejecutaba sin cesar. Entonces, lo que hice fue abrir mi administrador de tareas y finalizar la tarea de mi consulta SQL. Esto detiene mi sql y lo reinicia.

larva del moscardón
fuente
1

Una respuesta simple, si el cuadro rojo "detener" no funciona, es intentar presionar los botones "Ctrl + Pausa" en el teclado.

Si está ejecutando SQL Server en Linux, hay una aplicación que puede agregar a su bandeja del sistema llamada "killall". Simplemente haga clic en el botón "killall" y luego haga clic en el programa que está atrapado en un bucle y terminará el programa. Espero que ayude.

Aubrey Love
fuente
1

He estado sufriendo lo mismo desde hace mucho tiempo. Ocurre especialmente cuando está conectado a un servidor remoto (que puede ser lento) o tiene una conexión de red deficiente. Dudo que Microsoft sepa cuál es la respuesta correcta.

Pero desde que intenté encontrar la solución. Solo 1 enfoque de laico funcionó

  • Haga clic en el botón Cerrar sobre la pestaña de consulta que está sufriendo. Después de un tiempo (¡si Microsoft no es duro contigo!), Es posible que aparezca una ventana preguntando esto

"La consulta se está ejecutando actualmente. ¿Desea cancelar la consulta?"

  • Haga clic en "Sí"

  • Después de un tiempo, le preguntará si desea guardar esta consulta o no.

  • Haga clic en "Cancelar"

Y publique eso, puede ser que su estudio esté estable nuevamente para ejecutar su consulta.

Lo que hace en segundo plano es desconectar su ventana de consulta con la conexión. Por lo tanto, para volver a ejecutar la consulta, se necesitará tiempo para volver a conectar el servidor remoto. Pero créame, esta compensación es mucho mejor que el sufrimiento de ver ese temporizador que funciona por la eternidad.

PD: Esto funciona para mí, Felicitaciones si también funciona para ti. !!!

Maulik Modi
fuente
1
Todavía funcionó para mí y resolví mi problema a partir de ->
ErocM