locked
Análise do arquivo de trace para identificar tempo de ociosidade. RRS feed

  • Pergunta

  • Senhores da lista, boa tarde.

    Tenho um resultado do profile que foi armazenado em uma tabela e estou tentando identificar se existe um tempo ociosidade de um determinada conexão durante o processamento de uma funcionalidade do sistema Financeiro (baixa de 500 pedidos).  Não estou considerando nesse momento qualquer ação em relação a tuning do banco.

    A query que criei é essa :

    select a.EventClass,
           a.RowNumber,
           a.Duration,
           a.TextData,
           a.CPU,a.Reads,a.Writes,
           a.StartTime,
           a.EndTime , 
           b.RowNumber, 
           b.starttime ,
           datediff(ms,a.EndTime , b.starttime ) as dif 
    from Trace a join Trace b
      on a.rownumber = b.rownumber-1
    


    Para achar o tempo ocioso, estou calculando a diferença entre a data e hora de termino de um comando com a data e hora de inicio do proximo comando. Entendo, eu, que o intervalo entre o termino de um comando e o inicio do proximo comando não é processamento do SQL Server para um conexão. Esse intervalo está entre o retorno do resultado do comando para a aplicação, processamento da aplicação e o envio de uma nova execução de comando pelo banco.

    No Profiler foi configurado para capturar somente os eventos:

    RPC: Completed

    SP: Completed

    SP: StmtCompleted

    SQL: StmtCompleted

    Esse raciocínio está correto?

    Grato,

    Wolney

     


    Wolney
    • Movido Gustavo Maia Aguiar quinta-feira, 29 de dezembro de 2011 14:09 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 21 de dezembro de 2011 20:02

Respostas

  • Boa Tarde,

    O Perfmon é fantástico, mas seu nível de análise é mais global e ele jamais nos permitiria sozinho chegar no usuário, na tabela ou na query específica independente de ser 2000 ou 2008 R2.

    Para saber quando tempo ele fica ocioso eu sugiro a seguinte abordagem:

    - Inclua os eventos Audit Login e Audit Logout
    - Tire a diferença de tempo entre esses eventos
    - Tire a diferença do tempo entre o Login e o Logout com a soma do Duration

    O que sobrar é tempo ocioso...

    [ ]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
    quinta-feira, 29 de dezembro de 2011 14:08

Todas as Respostas

  • Olá Wolney, fazer esta análise através do Performance Monitor não resolveria teu problema?
    quinta-feira, 22 de dezembro de 2011 19:42
  • Olá Marcus,

    No caso do Perfmon, qual seria os contadores que tenho que configurar para capturar somente uma conexão de um determinado hostname que preciso identificar quanto tempo o SQL está aguardando um comando?

    Grato,


    Wolney
    terça-feira, 27 de dezembro de 2011 19:46
  • Wolney,

    Qual é a versão do SQL Server que você esta utilizando? No SQL Server 2008 foram introduzindo uma gama de novos contadores de performance do SQL Server para o Perfmon.


    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]
    quarta-feira, 28 de dezembro de 2011 11:24
    Moderador
  • Junior,

    Infelizmente é a versão SQL 2000 :( !!!

    Esse banco estará indo para o SQL 2008 R2 somente em Abril. Mas de qualquer forma, o que estou procurando (independente da versão do SQL) é identificar para um único hostname, o tempo que ele gasta com processamento do SQL Server.

    Para vc ter uma ideia, o usuário reclama que para baixar um único pedido no sistema Financeiro, demora cerca de 15 segundos ( fato que precenciei) . Capturando pelo profile somente o host dele, configurando os eventos de comandos completados e escolhendo a coluna DURATION, fazendo as soma dessa coluna chego a um valor de 2 segundos de processamento.

    Concluo que os demais 13 segundos estão entre o intervalo de término de um comando e início do próximo comando processando pelo SQL. É o tempo que o resultado do comando volta para o hostname, é processado e o retorno do próximo comando.  Com esses dados em mãos, tenho como demonstrar que o banco está fazendo o processamento rápido.

    No perfmon não identifiquei se consigo efetuar algum filtro por hostname.

    Grato,

     

     


    Wolney
    quarta-feira, 28 de dezembro de 2011 13:54
  • Boa Tarde,

    O Perfmon é fantástico, mas seu nível de análise é mais global e ele jamais nos permitiria sozinho chegar no usuário, na tabela ou na query específica independente de ser 2000 ou 2008 R2.

    Para saber quando tempo ele fica ocioso eu sugiro a seguinte abordagem:

    - Inclua os eventos Audit Login e Audit Logout
    - Tire a diferença de tempo entre esses eventos
    - Tire a diferença do tempo entre o Login e o Logout com a soma do Duration

    O que sobrar é tempo ocioso...

    [ ]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
    quinta-feira, 29 de dezembro de 2011 14:08