2010-07-20 15 views
16

vi una pregunta similar que le preguntó cómo monitorear el progreso de una copia de seguridad/restaurar la operación: Is there a SQL script that I can use to determine the progress of a SQL Server backup or restore process?Seguimiento de la ejecución de una consulta SQL en SQL SERVER

me gustaría saber si hay una consulta similar/forma de ver cuánto tiempo le queda a la consulta hasta que termine. Por ejemplo, una consulta generalmente tiene un tiempo transcurrido de 5 minutos. Me gustaría saber cuánto tiempo queda hasta que termine DURANTE la ejecución de la consulta.

Gracias de antemano, Roni.

+0

Hola Roni, para aclarar, ¿estás buscando monitorear el progreso de una consulta que está realizando una copia de seguridad/restauración? O una consulta en general? –

Respuesta

16

No hay forma de saber cuánto tiempo queda. El tiempo de ejecución de una consulta depende de muchas cosas más allá de la consulta real: bloqueo/bloqueo de otras consultas, otros procesos que consumen recursos (uso de CPU/disco), el sistema operativo, la red, etc. ¿Qué sucede si su consulta de 5 minutos se está ejecutando? alguien más inicia un gran informe, su consulta puede ejecutarse a las 5:30 ahora. ¿Qué ocurre si alguien comienza a descargar un archivo grande y acapara todo el ancho de banda de la red? ¿Qué sucede si el sistema operativo decide hacer algo en segundo plano, etc.? Hasta que se devuelvan todas las filas, la consulta no está lista, pero puede ejecutarse en un marco de tiempo variable.

+0

De hecho. En algunos sistemas (mal configurados/sobrecargados), una única consulta intensiva puede bloquear una tabla crucial, y de repente, las consultas que generalmente terminan en una segunda ejecución durante decenas de minutos. Puede ver los tiempos de consulta y proporcionar una suposición: "en promedio, esta consulta finaliza en 5:41, se ha estado ejecutando durante 3:15 ahora", pero es solo eso: una suposición (ni siquiera una estimación). – Piskvor

+1

¡He visto protectores de pantalla de renderizado 3D funcionando en cajas de bases de datos de producción! –

+0

En Oracle, por ejemplo, tenemos la vista v $ session_longops, que muestra el estado de las operaciones. http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2092.htm ¿Está seguro de que no hay algo similar en SQL SERVER? Roni. –

11

sys.dm_exec_requests tiene esa información, por lo que algo así le dará el progreso:

SELECT 
percent_complete 
FROM sys.dm_exec_requests 
--where session_id=51 or command like 'restore%' 
+3

Esta consulta solo es útil si tiene el permiso VIEW SERVER STATE. Si no lo haces, solo verás los resultados de la declaración SELECT que acabas de enviar, ¡que es un poco inútil! Para establecer si tiene permisos, ejecute lo siguiente "SELECT * FROM fn_my_permissions (NULL, 'SERVER');" - Si no ve una entrada con permission_name 'VIEW SERVER STATE', entonces no tiene el permiso. – samaspin

+10

Además, esta información se proporciona solo cuando se ejecutan comandos específicos. Estos son, por ejemplo, 'ROLLBACK',' RECOVERY' o 'BACKUP DATABASE'. – user35443

4

Sí se puede conocer el tiempo transcurrido estimado a menos que habría alguna situación inesperada que afectan a la ejecución del proceso.

Select total_elapsed_time, 
* from sys.dm_exec_sessions where session_id="your Id here" 
10

Lo que quiere es Live Query Statistics.

Puede activarlo en la versión más reciente de SSMS con un botón situado junto a la que le da el plan normal de consulta:

enter image description here

Esto luego le da un plan de consulta en vivo:

enter image description here

En la parte inferior se ve el progreso en total:

enter image description here

Cuestiones relacionadas