Estou conectado em um servidor SQL Server 2008 via TCP/IP na Internet, link de 10Mbit e executando os scripts via Management Studio. Então caso você tenha uma situação similar e queira comprovar os benefícios do SET NOCOUNT ON de uma maneira bem simples, execute primeiro esta rotina:
create proc TESTE_NOCOUNT_OFF as
begin
      create table
#temp (
            ID int not null primary key,
            CAMPOTESTE varchar(10)
      )
      set nocount
off
      declare @contador int
      set @contador = 1
      while @contador < 100000
      begin
            insert into #temp (ID, CAMPOTESTE) values (@contador, 'TESTETESTE')
            set @contador = @contador + 1
      end 
      drop table
#temp
end
GO
exec
TESTE_NOCOUNT_OFF
GO
drop proc TESTE_NOCOUNT_OFF
GO
Anote o tempo de execução com o NOCOUNT desligado (aqui rodou em 44 segundos) e depois execute esta rotina, com o NOCOUNT ligado:
create proc TESTE_NOCOUNT_ON as
begin
      create table
#temp (
            ID int not null primary key,
            CAMPOTESTE varchar(10)
      )
      set nocount
on
      declare @contador int
      set @contador = 1
      while @contador < 100000
      begin
            insert into #temp (ID, CAMPOTESTE) values (@contador, 'TESTETESTE')
            set @contador = @contador + 1
      end 
      drop table
#temp
      set nocount
off
end
GO
exec
TESTE_NOCOUNT_ON
GO
drop proc TESTE_NOCOUNT_ON
GO
Agora sem as mensagens rodou em 1 segundo. Legal, não? O motivo da demora com as mensagens não é o consumo de CPU ou I/O, mas sim rede. Como o SQL Server transmite por padrão as mensagens com os contadores, independente destas serem usadas pelo cliente, a performance da rotina sofre um grande impacto. Eliminando as mensagens, é eliminado este overhead e há uma melhoria sensível na execução.
Qualquer dúvida, avisem. Obrigado por visitar o blog!
Valeu pela dica.
ResponderExcluirEstou realizando o treinamento em sql server pelo curso adv, www.cursoadv.com.
Sempre busco dicas para melhorar meu desempenho, gostei muito do site, têm muito material bom.
Parabéns