Pergunta

Usando o SQL Server Management Studio.

Como posso testar o desempenho de um grande select (dizer 600k linhas) sem a janela de resultados impactando o meu teste? Todas as coisas são iguais isso realmente não importa, já que as duas consultas serão ambos saída para o mesmo lugar. Mas eu gostaria de acelerar os meus ciclos de testes e eu estou pensando que as configurações do SQL Server Management Studio saída estão ficando no meu caminho. Saída para texto é o que eu estou usando atualmente, mas eu estou esperando por uma alternativa melhor.

Eu acho que isso está impactando os meus números, porque o banco de dados é na minha caixa local.

Edit: tinha uma pergunta sobre fazer onde 1 = 0 aqui (pensando que a junção iria acontecer, mas nenhuma saída), mas eu testei e não funcionou - não é um indicador válido do desempenho da consulta.

Foi útil?

Solução

Você poderia fazer SET ROWCOUNT 1 antes de sua consulta. Eu não tenho certeza que é exatamente o que você quer, mas vai evitar ter que esperar por muitos dados a serem devolvidos e, portanto, dar-lhe despesas de cálculo precisos.

No entanto, se você adicionar cliente Statistics para sua consulta , um dos números é o tempo de espera nas respostas do servidor, que lhe dará o tempo de cálculo servidor não incluindo o tempo que leva para transferir os dados através da rede.

Outras dicas

Você pode SET STATISTICS TIME ON para obter uma medição de o tempo no servidor. E você pode usar a consulta / Incluir Estatísticas Cliente (Shift + Alt + S) no SSMS para obter informações detalhadas sobre o uso do tempo cliente. Note-se que consultas SQL não executar e, em seguida, retornar o resultado para o cliente quando acabado, mas em vez disso eles correm como eles retornam resultados e até mesmo suspender a execução se o canal de comunicação está cheia.

O único contexto em que uma consulta ignora completamente o envio dos pacotes resultado de volta para o cliente é a ativação. Mas então o tempo para retornar a saída para o cliente também deve ser considerada quando você medir o seu desempenho. Tem a certeza de seu próprio cliente vai ser qualquer mais rápido do que SSMS?

SET ROWCOUNT 1 vai parar o processamento após a primeira linha é retornada que meios menos que o plano passa a ter um operador bloqueando os resultados serão inúteis.

Tomando um exemplo trivial

SELECT * FROM TableX

O custo desta consulta na prática dependerá grandemente o número de linhas em TableX.

Usando SET ROWCOUNT 1 não vai mostrar nada disso. Independentemente de TableX tem 1 linha ou 1 bilhão de linhas que vai parar a execução após a primeira linha é retornada.

Muitas vezes atribuem os resultados SELECT a variáveis ??para ser capaz de olhar as coisas como leituras lógicas sem ser retardado por SSMS exibindo os resultados.

  SET STATISTICS IO ON
  DECLARE @name nvarchar(35),
          @type nchar(3)

  SELECT @name = name, 
         @type = type
  FROM master..spt_values

Há um pedido relacionado Ligar item Fornecer "resultados Descartar no servidor" opção no SSMS e / ou TSQL

Como você pode testar o desempenho da sua consulta se não o fizer saída dos resultados? Acelerar o teste é inútil se o teste não lhe diz nada sobre como a consulta vai realizar. Você realmente quer descobrir este cão de uma consulta leva dez minutos para retornar dados depois de empurrá-lo para prod?

E, claro, a sua vai levar algum tempo para retornar 600.000 registros. Ele vai na sua interface de usuário, bem como, provavelmente vai demorar mais do que na sua janela de consulta porque a informação tem que ir através da rede.

A melhor coisa que você pode fazer é verificar o plano de execução de consulta (pressione Ctrl + L ) para a consulta real. Isso lhe dará o melhor palpite para o desempenho disponível.

Eu acho que a cláusula WHERE de WHERE 1=0 está definitivamente acontecendo no lado do SQL Server, e não Management Studio. Nenhum resultado seria devolvido.

É você motor DB na mesma máquina que você está correndo o Mgmt Studio em?

Você pode:

  • Saída para texto ou
  • Saída para arquivo.
  • Fechar Resultados da Consulta painel.

Isso seria apenas mover os ciclos passados ??no desenho da grade em Mgmt Studio. Talvez os resuls ao texto seria mais performance em geral. Ocultando o painel iria salvar os ciclos de Mgmt Studio em ter que desenhar os dados. Ainda está sendo devolvido ao Mgmt Studio, para que ele realmente não está salvando um monte de ciclos.

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