Pergunta

Eu vi no Oracle 10g um recurso que estima o tempo restante para uma consulta de longa duração e eu queria saber se isso é possível também no SQL Server (pelo menos em 2008?)?

Suponha que eu tenho uma tabela muito grande com dezenas de milhões de linhas (bem indexado etc. etc.) e eu preciso procurar algumas linhas particulares. Eu sei que vai ter um monte de tempo e eu estou bem com isso, mas eu gostaria de apresentar o usuário com algum tipo de uma barra de progresso.

Como posso mostrar o progresso?

Foi útil?

Solução

Eu esquecê-lo e apenas colocar um círculo de giro!

Falando sério, para levar a idéia de MrTelly Além disso, há exibições de gerenciamento dinâmico que pode lhe dar o tempo médio de execução para determinadas consultas -. Talvez que você pode obter em algum lugar

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

edit: Eu tenho visto por cento concluída no procedimento sp_whoisactive de Adão Machanic. Talvez isso é um outro lugar para olhar. SQL 2016 tem a loja de consulta que persiste informações cache do plano - um substituto para o cache do plano de DMV, que é limpo na reinicialização.

Outras dicas

Relacionado:

sistemas de banco de dados de hoje fornecem pouco feedback para o usuário / DBA em quanto de execução de uma consulta SQL foi concluído. Por muito tempo execução de consultas, esse feedback pode ser muito útil, por exemplo, para ajudar a decidir se a consulta deve ser encerrado ou permissão para executar para conclusão. Embora o requisito acima é fácil de se expressar, desenvolver um indicador robusto de progresso para a execução da consulta é desafiador. Neste trabalho, nós estudamos o problema e presente acima técnicas que podem formar a base para a estimativa de progresso efetivo. Os resultados do experimentalmente validando as nossas técnicas no Microsoft SQL Server são promissores.

Eu não estou ciente de uma ferramenta que vai fazer isso automaticamente, mas há um par de alternativas. Quebre sua consulta em blocos ...

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

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

como cada sql móvel para atualizar a barra de progresso.

Ou você poderia gravar o comprimento do tempo necessário para cada um de seus seleciona, armazenar esses valores talvez em uma base por usuário. Em seguida, usar essa informação para retornar um comprimento de barra de progresso.

Ambas as abordagens são bastante kludgy, espero que alguém sabe a melhor abordagem.

Claro que você pode tentar decifrar o plano de consulta e fazer um julgamento com base nisso, mas no código que seria difícil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top