SQL Server Management Studio, como reduzir o tempo de execução para milissegundos


220

Quando envio um lote (por exemplo, execute uma consulta) no SSMS, vejo o tempo que levou para executar na barra de status. É possível configurar o SSMS para mostrar o tempo de consulta com resolução em milissegundos?

Aqui está o bar que eu estou falando com a seção de interesse circulada em vermelho:

insira a descrição da imagem aqui


3
Não estou realmente respondendo à sua pergunta, mas você pode usar o SQL Server Profiler (uma ferramenta de log) para verificar a duração da sua consulta. A duração é medida em milissegundos.
AGuyCalledGerald

Respostas:


66

Eu estava lutando com isso até encontrar isso ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

Além disso, se você abrir a janela Propriedades, poderá encontrar algum "Tempo decorrido de conexão" mágico que poderá fornecer algum tempo de execução ... Espero que ajude ...


18
A parte referente à janela Propriedades é realmente a resposta para esta discussão. "Tempo decorrido" está sentado lá olhando você na cara.
Eric

E agora estou definindo essa resposta como a resposta aceita, já que é a mais correta.
Michael Goldshteyn

363

O que você quer fazer é o seguinte:

set statistics time on

-- your query

set statistics time off

Isso terá a saída parecida com esta na janela Mensagens:

Tempos de execução do SQL Server: tempo de CPU = 6 ms, tempo decorrido = 6 ms.


1
Mas isso coloca o tempo na janela Mensagens, o que significa que eu tenho que alternar manualmente após executar a consulta. Além disso, os resultados parecem não fazer sentido, por exemplo: tempo da CPU = 1357 ms, tempo decorrido = 169 ms. Como isso acontece, mesmo se eu tiver 8 núcleos com hyperthreading (ou seja, 16 virtuais)?
Michael Goldshteyn

2
@MichaelGoldshteyn, por que o tempo da CPU é maior, é porque você tem uma CPU com vários núcleos ou com hyperthread.

25
@MichaelGoldshteyn 1357/8 = 169.625. Coincidência?
Dan J

3
@ DanJ, ​​o DB não faz tudo da memória. Frequentemente, a E / S está envolvida e a E / S significa mais tempo decorrido.
22612 Michael Michaelshshynyn

9
@binki Você está certo de que meu comentário de 1.555 dias foi impreciso.
Benizi

125

Ative as Estatísticas do cliente seguindo um destes procedimentos:

  • Menu: Consulta> Incluir Estatísticas do Cliente
  • Barra de ferramentas: Clique no botão (ao lado de Incluir tempo real de execução)
  • Teclado: Shift-Alt-S

Em seguida, você obtém uma nova guia que registra os horários, dados de entrada / saída e contas de linha etc. para (até) as últimas 10 seções (mais médias!):

insira a descrição da imagem aqui


É o mesmo que a resposta de @Ymagine First de Nov'2012. Veja a resposta acima ...
Bogdan Bogdanov

O site (ironicamente) tinha um erro de SQL na época, então extraí as informações principais de um cache do Google e postei como uma nova resposta. Eu não pretendia roubar crédito e talvez devesse ter editado a resposta original.
NickG

Na verdade, parece que não tenho pontos de representação suficientes para editar perguntas, então é provavelmente por isso que não fiz isso.
NickG

3
Para sua informação, as unidades para as Estatísticas de tempo estão em milissegundos: brentozar.com/archive/2012/12/…
congusbongus 7/16/16

17

Para obter o tempo de execução como uma variável em seu proc:

DECLARE @EndTime datetime
DECLARE @StartTime datetime 
SELECT @StartTime=GETDATE() 

-- Write Your Query


SELECT @EndTime=GETDATE()

--This will return execution time of your query
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

E veja isso

Avaliação do desempenho da consulta: "Custo da consulta do plano de execução" x "Tempo decorrido"


1
Datepart NS representa nanossegundos, para usar milissegundos MS
Milão Matějka

12

Eu estava atrás da mesma coisa e tropecei no seguinte link, que era brilhante:

http://www.sqlserver.info/management-studio/show-query-execution-time/

Ele mostra três maneiras diferentes de medir o desempenho. Tudo de bom para suas próprias forças. O que eu optei foi o seguinte:


DECLARE @ Time1 DATETIME

DECLARE @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Inserir consulta aqui

SET @ Time2 = GETDATE ()

SELECT DATEDIFF (MILLISECOND, @ Time1, @ Time2) AS Elapsed_MS


Isso mostrará os resultados da sua consulta seguidos pela quantidade de tempo que levou para ser concluída.

Espero que isto ajude.


Descobri que inconstante, por vezes, mostra o tempo e às vezes só mostra 0.
RMati

2

Não sei como expandir a barra de informações.

Mas você pode definir os horários como padrão para todas as consultas exibidas na guia "Mensagens".

Quando em uma janela de consulta, vá para o item do menu de consulta, selecione "opções de consulta", selecione "avançado" no grupo "Execução" e marque as caixas de seleção "definir hora da estatística" / "definir IO da estatística". Esses valores aparecerão na área de mensagens para cada consulta sem ter que lembrar de ativar e desativar as estatísticas definidas.

Você também pode usar Shift + Alt + S para ativar as estatísticas do cliente a qualquer momento


0

Você pode tentar este código:

USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.