2010-07-20 26 views
16

Ho visto una domanda simile, che ha chiesto come monitorare lo stato di avanzamento di un backup/ripristino del funzionamento: Is there a SQL script that I can use to determine the progress of a SQL Server backup or restore process?Monitoraggio il progresso di una query SQL in SQL Server

Vorrei sapere se c'è una query simile/modo di vedere quanto tempo la query ha lasciato fino alla fine. Ad esempio, una query di solito ha un tempo trascorso di 5 minuti. Mi piacerebbe sapere quanto tempo è rimasto fino alla fine DURANTE l'esecuzione della query.

Grazie in anticipo, Roni.

+0

Ciao Roni, per chiarire, stai cercando di monitorare l'avanzamento di una query che sta eseguendo un backup/ripristino? O una query in generale? –

risposta

16

Non c'è modo di sapere quanto tempo è rimasto. Il tempo di esecuzione di una query dipende da molte cose al di là della query stessa: blocco/blocco di altre query, altri processi che consumano risorse (utilizzo di cpu/disco), sistema operativo, rete, ecc. Cosa succede se la query di 5 minuti è in esecuzione, qualcun altro dà il via a un grosso rapporto, la tua richiesta può essere pubblicata alle 5:30 ora. Cosa succede se qualcuno inizia a scaricare un file di grandi dimensioni e domina tutta la larghezza di banda della rete? Cosa succede se il sistema operativo decide di fare qualcosa in background, ecc. Fino a quando tutte le righe non vengono restituite, la query non viene eseguita, ma può essere eseguita in un intervallo di tempo variabile.

+0

Infatti. Su alcuni sistemi (mal configurati/sovraccarichi), una singola query intensiva può bloccare una tabella cruciale e, all'improvviso, query che solitamente terminano in una seconda esecuzione per decine di minuti. È possibile visualizzare i tempi di interrogazione e fornire un'ipotesi: "in media, questa query viene completata in 5:41, è in esecuzione per 3:15 ora", ma è solo questo: un'ipotesi (nemmeno una stima). – Piskvor

+1

Ho visto gli screen saver di rendering 3D in esecuzione su caselle di database di produzione! –

+0

In Oracle, ad esempio, abbiamo la vista v $ session_longops, che mostra lo stato delle operazioni. http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2092.htm Sono sicuro che non ci sia una cosa simile in SQL SERVER? Roni. –

11

sys.dm_exec_requests ha queste informazioni, in modo da qualcosa di simile che vi darà il progresso:

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

Questa query è utile solo se si dispone dell'autorizzazione VIEW SERVER STATE. Se non lo fai, vedrai solo i risultati dell'istruzione SELECT che hai appena inviato, il che è un po 'inutile! Per stabilire se si dispone delle autorizzazioni, eseguire "SELECT * FROM fn_my_permissions (NULL, 'SERVER');" - Se non si vede una voce con nome_autorizzazione 'VIEW SERVER STATE', non si dispone dell'autorizzazione. – samaspin

+10

Inoltre, questa informazione viene fornita solo quando vengono eseguiti comandi specifici. Questi sono ad esempio 'ROLLBACK',' RECOVERY' o 'BACKUP DATABASE'. – user35443

4

Sì è possibile conoscere il tempo trascorso stimato a meno che non ci sarebbe qualche situazione inaspettata che interessano l'esecuzione del processo.

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

Quello che si desidera è Live Query Statistics.

È possibile attivarlo nella versione più recente di SQL Server Management Studio con un pulsante accanto a quello che ti dà il normale piano di query:

enter image description here

Questo poi ti dà un piano di query dal vivo:

enter image description here

In fondo si vede il progresso totale:

enter image description here