none
Monitorar performance RRS feed

  • Pergunta

  • Bom dia pessoal!

    Preciso de dicas de vocês para monitorar a performance de um servidor.

    O caso é o seguinte:
    Tenho um cliente, que neste estou tendo muitos time-outs na aplicação.
    Alguns relatórios consegui resolver, uns alterando a query, outros alterando o índice, ou mesmo criando novos. 
    Outros casos, não consegui, como por exemplo em inclusões, ou em selects básicos (estes nem sei o porque do time-out pois até o hint nolock inseri para testes). 
    Preciso resolver estes problemas, e agora tenho tempo para monitorar o servidor, gostaria de saber de vocês, quais pontos devo atacar primeiro, quais técnicas posso usar. Qualquer informação é bem vinda!

     

    Muito obrigado!

     

    Clayton Dias 

    quarta-feira, 18 de janeiro de 2012 12:40

Respostas

  • Boa Tarde,

    Performance é algo bem amplo e dificilmente abordaremos uma situação genérica com algo pontual (não temos queries, não temos configurações e há muito pouca informação no post). Ainda assim, para que você possa encontrar boas referências sobre o assunto, eis um bom ponto de partida:

    Troubleshooting Performance Problems in SQL Server 2005
    http://technet.microsoft.com/en-us/library/cc966540.aspx

    Troubleshooting Performance Problems in SQL Server 2008
    http://msdn.microsoft.com/en-us/library/dd672789(v=sql.100).aspx

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 18 de janeiro de 2012 16:06
  • Fala Clayton.

    Dê uma olhada nos principais contadores do SQL que vão te ajudar no troubleshooting:

    http://sqldicas.com.br/dicas/perfmon-e-sql-server/

    Abs!


    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br


    Se a resposta foi útil de alguma forma, classifique como resposta ou vote como útil.

    quinta-feira, 13 de junho de 2013 19:58
    Moderador
  • Clayton,

    Como você esta fazendo uso de diversas variáveis, uma alternativa seria utilizar um Table Hint para otimizar e forçar uma mudança no plano de execução do seu Select.

    No seu caso uma alternativa é utilizar o Query Hint OPTIMIZE FOR específico para se trabalhar com variáveis. Instrui o otimizador de consulta a usar um valor específico para uma variável local quando a consulta é compilada e otimizada. O valor só é usado durante a otimização, e não durante a execução das consultas.

    <content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">

    O exemplo a seguir instrui o otimizador de consulta a usar o valor 'Seattle' como variável local @city_name e a usar valores estatísticos para determinar o valor da variável local @postal_code ao otimizar a consulta.

    USE AdventureWorks2008R2; GO

    DECLARE @city_name nvarchar(30); DECLARE @postal_code nvarchar(15);

    SET @city_name = 'Ascheim'; SET @postal_code = 86171;

    SELECT * FROM Person.Address WHERE City = @city_name AND PostalCode = @postal_code OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) ); G0


    </content>


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 6 de julho de 2013 14:15
    Moderador

Todas as Respostas

  • Clayton, bom dia!

     

    Experimente utilizar o SQL Profiler junto com o System Monitor do Windows.

     

    Veja se ajuda: http://cibellecastro.wordpress.com/2011/10/31/system-monitor-sql-profiler-como-utilizar/

     

    Abraços!

    quarta-feira, 18 de janeiro de 2012 12:57
  • Boa Tarde,

    Performance é algo bem amplo e dificilmente abordaremos uma situação genérica com algo pontual (não temos queries, não temos configurações e há muito pouca informação no post). Ainda assim, para que você possa encontrar boas referências sobre o assunto, eis um bom ponto de partida:

    Troubleshooting Performance Problems in SQL Server 2005
    http://technet.microsoft.com/en-us/library/cc966540.aspx

    Troubleshooting Performance Problems in SQL Server 2008
    http://msdn.microsoft.com/en-us/library/dd672789(v=sql.100).aspx

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 18 de janeiro de 2012 16:06
  • Clayton,

    O que você esta precisando? Quando falamos de performance temos muito o que analise, tanto relacionado ao SQL Server, como também ao Hardware, Windows entre outros elementos.

     

    Você poderia destacar que tipo de análise esta querendo?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    quinta-feira, 19 de janeiro de 2012 00:19
    Moderador
  • Então, vou explicar melhor um dos pontos.

    Tenho uma funcionalidade na minha aplicação que grava logs, e estou com muitos registros de timeout.
    A função que mais tenho problema é uma procedure simples, com o seguinte codigo dentro:

    	UPDATE 	ULT_INFRA_ID 
     	SET 	ULTIMO_iD = ULTIMO_iD + 1,
    		@ID = ULTIMO_iD + 1
    	WHERE 	TABELA_SISTEMA_iD = 952
    
    	INSERT INTO LOG_ACESSO_FUNCAO(
    		 LOG_ACESSO_FUNCAO_ID	,
    		 FUNCAO_iD				,
    		 GRUPO_USUARIO_ID		,
    		 data_acesso			)
    	VALUES (
    		@ID		,
    		@FUNCAO_iD	,
    		@GRUPO_USUARIO_ID,
    		GETDATE())
    
    
    		select 	flag_permissao_acesso    ,
    			flag_permissao_gravacao  ,
    			flag_permissao_exclusao  ,
    			flag_permissao_impressao 	
    		from	grupo_usuario_funcao (NOLOCK)
    		where	grupo_usuario_id	= @grupo_usuario_id
    		and	funcao_id		= @funcao_id
    		and	tab_status_id		= 1
    		
    		if @@rowcount = 0
    		    begin
    			select 	'N' As flag_permissao_acesso    ,
    				'N' As flag_permissao_gravacao  ,
    				'N' As flag_permissao_exclusao  ,
    				'N' As flag_permissao_impressao 		
    		    end
    


    As variáveis usadas são parâmetros de entrada na procedure.

    Existe um índice que cobre a consulta, e não tenho nenhum problema nela, então imagino que meu problema é que alguma outra sessão esta bloqueando esta consulta.

     

    Acham que é isto mesmo?

    Como faço para descobrir quem esta bloqueando?

     

    Clayton Dias 

    segunda-feira, 23 de janeiro de 2012 12:07
  • Fala Clayton.

    Dê uma olhada nos principais contadores do SQL que vão te ajudar no troubleshooting:

    http://sqldicas.com.br/dicas/perfmon-e-sql-server/

    Abs!


    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br


    Se a resposta foi útil de alguma forma, classifique como resposta ou vote como útil.

    quinta-feira, 13 de junho de 2013 19:58
    Moderador
  • Clayton,

    Como você esta fazendo uso de diversas variáveis, uma alternativa seria utilizar um Table Hint para otimizar e forçar uma mudança no plano de execução do seu Select.

    No seu caso uma alternativa é utilizar o Query Hint OPTIMIZE FOR específico para se trabalhar com variáveis. Instrui o otimizador de consulta a usar um valor específico para uma variável local quando a consulta é compilada e otimizada. O valor só é usado durante a otimização, e não durante a execução das consultas.

    <content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">

    O exemplo a seguir instrui o otimizador de consulta a usar o valor 'Seattle' como variável local @city_name e a usar valores estatísticos para determinar o valor da variável local @postal_code ao otimizar a consulta.

    USE AdventureWorks2008R2; GO

    DECLARE @city_name nvarchar(30); DECLARE @postal_code nvarchar(15);

    SET @city_name = 'Ascheim'; SET @postal_code = 86171;

    SELECT * FROM Person.Address WHERE City = @city_name AND PostalCode = @postal_code OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) ); G0


    </content>


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 6 de julho de 2013 14:15
    Moderador