none
SQL Profiler 2014 não está filtrando campo Duration RRS feed

  • Pergunta

  • Estou tentando fazer um trace de uma aplicação seguindo a orientação do fabricante. Ele solicitou que eu fizesse o trace no SQL Profiler utilizando os seguintes parâmetros:

    Performance
           - Performance Statistics.
           - SQL:FullTextQuery.     
           - Showplan ALL.
           - Showplan XML.
     Store Procedures
           - SP:Completed,
           - SP:StmtCompleted
           - SP:Starting
           - SP: StmtStarting
     TLSQL
           - SQL:BatchCompleted
           - SQL:BatchStarting
           - SQL:StmtCompleted
           - SQL:StmtStartin

    Nesses eventos selecionei todas as colunas e nos filtros marquei apenas o banco onde executo o processo e duração acima de 5000 milisegundos.
    O problema é que na tela de trace as colunas "duration" e "endtime" ficam amarelas e não apresentam dados, apesar de eu selecionar na tela de eventos. Dessa forma ele acaba gravando todos os comandos e o trace fica com cera de 30gb.
    Gostaria de saber se estou fazendo algo errado e como filtrar apenas comandos com duração maior ou igual à 5 segundos.

    Grato desde já pela atenção

    Fernando Miranda

     

    segunda-feira, 26 de junho de 2017 14:32

Respostas

  • Bom dia Fernando,

    E se você utilizar o código abaixo, que trabalha com duração também e em SQL Profiler

    SELECT TOP ( 10 )
            p.name AS [SP Name] ,
            qs.total_elapsed_time / qs.execution_count AS [avg_elapsed_time] ,
            qs.total_elapsed_time ,
            qs.execution_count ,
            ISNULL(qs.execution_count / DATEDIFF(Second, qs.cached_time, GETDATE()),
                   0) AS [Calls/Second] ,
            qs.total_worker_time / qs.execution_count AS [AvgWorkerTime] ,
            qs.total_worker_time AS [TotalWorkerTime] ,
            qs.cached_time
    FROM    sys.procedures AS p WITH ( NOLOCK )
            INNER JOIN sys.dm_exec_procedure_stats AS qs WITH ( NOLOCK ) ON p.[object_id] = qs.[object_id]
    WHERE   qs.database_id = DB_ID()
            AND qs.total_elapsed_time > 25000000
    ORDER BY avg_elapsed_time DESC
    OPTION  ( RECOMPILE );


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 29 de junho de 2017 13:49

Todas as Respostas

  • Boa tarde, FernandoMirandaSP.

    Tudo bem com você?

    Obrigado por usar o Fórum MSDN.

    Você disse que selecionou as colunas etc com duração acima de 5000 milisegundos. Depois disse que precisa filtrar com 5 segundos. Mas você conseguiu ou não? Está dando alguma mensagem de erro?

    Atencisamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 26 de junho de 2017 20:48
    Moderador
  • Oi Felipe obrigado pelo apoio.

    Eu seleciono o campo duration em todos os eventos, mas quando o profiler está colhendo os dados não exibe nada nas colunas "duration" e "endtime"  por isso ele não filtra os comandos e o trace fica em torno de 30GB. Não sei o motivo de a coluna duration não trazer o tempo de duração. E essa coluna fica com a cor amarela enquanto as outras estão na cor branca.

    Fiz upload de um print da tela:

    https://imgur.com/a/puwhI

    quinta-feira, 29 de junho de 2017 10:58
  • Bom dia Fernando,

    E se você utilizar o código abaixo, que trabalha com duração também e em SQL Profiler

    SELECT TOP ( 10 )
            p.name AS [SP Name] ,
            qs.total_elapsed_time / qs.execution_count AS [avg_elapsed_time] ,
            qs.total_elapsed_time ,
            qs.execution_count ,
            ISNULL(qs.execution_count / DATEDIFF(Second, qs.cached_time, GETDATE()),
                   0) AS [Calls/Second] ,
            qs.total_worker_time / qs.execution_count AS [AvgWorkerTime] ,
            qs.total_worker_time AS [TotalWorkerTime] ,
            qs.cached_time
    FROM    sys.procedures AS p WITH ( NOLOCK )
            INNER JOIN sys.dm_exec_procedure_stats AS qs WITH ( NOLOCK ) ON p.[object_id] = qs.[object_id]
    WHERE   qs.database_id = DB_ID()
            AND qs.total_elapsed_time > 25000000
    ORDER BY avg_elapsed_time DESC
    OPTION  ( RECOMPILE );


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 29 de junho de 2017 13:49