2009-03-05 14 views
5

Ho visto in Oracle 10g una funzionalità che stima il tempo rimanente per una query in esecuzione prolungata e mi chiedevo se ciò è possibile anche in SQL Server (almeno nel 2008?)?Stima della durata della query in SQL Server

Supponiamo di avere una tabella molto grande con decine di milioni di righe (ben indicizzate ecc. Ecc.) E ho bisogno di cercare alcune righe particolari. So che ci vorrà un sacco di tempo e mi piace, ma vorrei presentare all'utente una sorta di barra di avanzamento.

Come posso visualizzare i progressi?

+0

Se la tabella (uno) è ben indicizzata e si sta cercando "alcune" righe particolari (voglio dire poche) deve restituire immediatamente le righe. Comunque, bella domanda!;-) – FerranB

+1

anche con buoni indici in DataWarehouse alcuni report che generano query possono richiedere ben più di 1 minuto. –

risposta

5

Io me ne dimenticherò e ho appena messo un cerchio che gira!

Seriamente, per prendere ulteriormente l'idea di MrTelly, ci sono viste gestionali dinamiche che possono darti tempi medi di esecuzione per certe domande - forse questo può portarti da qualche parte.

http://msdn.microsoft.com/en-us/library/ms188754.aspx

edit: Ho visto la percentuale di completamento nella procedura sp_whoisactive da Adam Machanic. Forse quello è un altro posto dove guardare. SQL 2016 ha l'archivio delle query che mantiene le informazioni sulla cache del piano, un sostituto della cache del piano dmv, che viene cancellato al riavvio.

+0

Ottima idea. È possibile ottenere il piano di query stimato in base alla query dell'utente, quindi controllare la cache del piano per verificare se tale piano esiste già e per quanto tempo è la durata media. È disordinato e aggiungerà carico al server, ma funzionerebbe. –

1

Non sono a conoscenza di uno strumento che lo farà automaticamente, ma ci sono un paio di alternative. Rompere la query in blocchi ...

select blah from table where IdRange between (1 and 100000) 

select blah from table where IdRange between (100001 and 200000) 

come ogni sql completa in modo da aggiornare la barra di avanzamento.

Oppure è possibile registrare il tempo necessario per ciascuna delle opzioni selezionate, memorizzare tali valori in base alle esigenze dell'utente. Quindi utilizzare tali informazioni per restituire una lunghezza della barra di avanzamento.

Entrambi questi approcci sono piuttosto sfacciati, si spera che qualcuno conosca un approccio migliore.

Ovviamente si può provare a decifrare il piano di query e formulare un giudizio basato su quello, ma in codice che sarebbe difficile.

2

correlati:

odierni sistemi di database forniscono poco feedback all'utente/DBA su quanto di esecuzione di una query SQL è stata completata. Per lunghe interrogazioni aperte su , tale feedback può essere molto utile, ad esempio, per la guida decidere se la query deve essere terminata o autorizzata a eseguire per il completamento. Sebbene il suddetto requisito sia facile da esprimere, lo sviluppo di un robusto indicatore di avanzamento per l'esecuzione della query è stimolante . In questo articolo, studiamo il problema sopra riportato e presentiamo le tecniche che possono costituire la base per una stima efficace del progresso. I risultati della convalida sperimentale delle nostre tecniche in Microsoft SQL Server sono promettenti.

Problemi correlati