Usuário com melhor resposta
Monitorar performance

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
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.aspxTroubleshooting 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- Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 18 de janeiro de 2012 16:06
- Marcado como Resposta Luiz MercanteModerator quarta-feira, 17 de julho de 2013 11:13
-
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/
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.- Sugerido como Resposta Luiz MercanteModerator terça-feira, 18 de junho de 2013 16:27
- Marcado como Resposta Luiz MercanteModerator quarta-feira, 17 de julho de 2013 11:14
-
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
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]
- Marcado como Resposta Luiz MercanteModerator quarta-feira, 17 de julho de 2013 11:15
Todas as 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.aspxTroubleshooting 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- Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 18 de janeiro de 2012 16:06
- Marcado como Resposta Luiz MercanteModerator quarta-feira, 17 de julho de 2013 11:13
-
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] -
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
-
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/
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.- Sugerido como Resposta Luiz MercanteModerator terça-feira, 18 de junho de 2013 16:27
- Marcado como Resposta Luiz MercanteModerator quarta-feira, 17 de julho de 2013 11:14
-
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
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]
- Marcado como Resposta Luiz MercanteModerator quarta-feira, 17 de julho de 2013 11:15