Domanda

Ho visto in Oracle 10g una funzione che stima il tempo rimanente per una query di lunga durata e mi chiedevo se ciò fosse possibile anche in SQL Server (almeno nel 2008?)?

Supponiamo di avere una tabella molto grande con decine di milioni di righe (ben indicizzate ecc. ecc.) e che devo cercare alcune righe particolari. So che ci vorrà un sacco di tempo e lo sto bene, ma vorrei presentare all'utente una sorta di barra di avanzamento.

Come posso mostrare i progressi?

È stato utile?

Soluzione

Me ne dimenticherei e metterei un cerchio rotante!

Scherzi a parte, per portare ulteriormente l'idea di MrTelly, ci sono viste di gestione dinamiche che possono darti tempi medi di esecuzione per determinate query, forse che possono portarti da qualche parte.

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

modifica: Ho visto la percentuale completa nella procedura sp_whoisactive di Adam Machanic. Forse è un altro posto in cui guardare. SQL 2016 ha l'archivio query che persiste le informazioni sulla cache del piano, un sostituto della cache del piano dmv, che viene cancellata al riavvio.

Altri suggerimenti

Related:

  

I sistemi di database di oggi forniscono pochi feedback all'utente / DBA su   quanto dell'esecuzione di una query SQL è stata completata. Per molto tempo   eseguendo query, tale feedback può essere molto utile, ad esempio, per   aiuta a decidere se la query deve essere terminata o autorizzata a essere eseguita   a completamento. Sebbene il requisito di cui sopra sia facile da esprimere,   lo sviluppo di un solido indicatore di progresso per l'esecuzione della query è   stimolante. In questo documento, studiamo il problema e il presente sopra   tecniche che possono costituire la base per un'efficace stima dei progressi.   I risultati della validazione sperimentale delle nostre tecniche in Microsoft   SQL Server è promettente.

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

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

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

al completamento di ogni sql, quindi aggiornare la barra di avanzamento.

Oppure puoi registrare il tempo impiegato per ciascuna delle tue selezioni, archiviare quei valori forse per utente. Quindi utilizzare tali informazioni per restituire una lunghezza della barra di avanzamento.

Entrambi questi approcci sono piuttosto ludici, speriamo che qualcuno conosca un approccio migliore.

Ovviamente potresti provare a decifrare il piano di query e dare un giudizio basato su quello, ma con un codice che sarebbe difficile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top