Pergunta Identificando timeout no servidor

  • sábado, 28 de abril de 2012 19:31
     
     

    Turma, 

    Tenho vários bancos de dados que rodão no mesmo servidor e tenho percebido que várias aplicações tem sofrido por timeout e tem trazido bastante dificuldade para gerenciar. 

    Temos URA, site, aplicações desktop, web, planilhas dinâmicas, enfim, uma diversidade enorme de possibilidade de problemas, mas antes de apontar o problema é necessário identificá-lo. 

    Comecei a utilizar o Trace do SQL 2008, apenas com a opção de Timeout, para verificar o que está acontecendo, e em pouco mais de 2h de monitoramento, passei de 2500 timeout em diversas aplicações. 

    Pelo Trace consegui identificar, a máquina que está executando a pessquisa, o banco de dados, o usuário, mas não consegui identificar qual é o comando (sentença SQL) que estava sendo executada no momento do timeout.

    Portanto, preciso identificar qual é a sentença SQL que está provocando o timeout. 

    Valeu !!!


    Pablicio

Todas as Respostas

  • segunda-feira, 30 de abril de 2012 13:52
     
      Contém Código

    Pablicio,

    vc está com um problema bem genérico. Podem existir várias razões para esse timeouts. O que posso te aconselhar é verificar algumas coisas para tentarmos identificar o problema.
    Primeiro, vamos verificar como estão e quais são os tipos de espera em seu servidor problemático:

    WITH Waits AS
        (SELECT
            wait_type,
            wait_time_ms / 1000.0 AS WaitS,
            (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS,
            signal_wait_time_ms / 1000.0 AS SignalS,
            waiting_tasks_count AS WaitCount,
            100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS Percentage,
            ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS RowNum
        FROM sys.dm_os_wait_stats
        WHERE wait_type NOT IN (
            'CLR_SEMAPHORE', 'LAZYWRITER_SLEEP', 'RESOURCE_QUEUE', 'SLEEP_TASK',
            'SLEEP_SYSTEMTASK', 'SQLTRACE_BUFFER_FLUSH', 'WAITFOR', 'LOGMGR_QUEUE',
            'CHECKPOINT_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT', 'BROKER_TO_FLUSH',
            'BROKER_TASK_STOP', 'CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT', 'DISPATCHER_QUEUE_SEMAPHORE',
            'FT_IFTS_SCHEDULER_IDLE_WAIT', 'XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN', 'BROKER_EVENTHANDLER',
            'TRACEWRITE', 'FT_IFTSHC_MUTEX', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
            'BROKER_RECEIVE_WAITFOR', 'ONDEMAND_TASK_QUEUE', 'DBMIRROR_EVENTS_QUEUE',
            'DBMIRRORING_CMD', 'BROKER_TRANSMITTER', 'SQLTRACE_WAIT_ENTRIES',
            'SLEEP_BPOOL_FLUSH', 'SQLTRACE_LOCK')
        )
    SELECT
        W1.wait_type AS WaitType,
        CAST (W1.WaitS AS DECIMAL(14, 2)) AS Wait_S,
        CAST (W1.ResourceS AS DECIMAL(14, 2)) AS Resource_S,
        CAST (W1.SignalS AS DECIMAL(14, 2)) AS Signal_S,
        W1.WaitCount AS WaitCount,
        CAST (W1.Percentage AS DECIMAL(4, 2)) AS Percentage,
        CAST ((W1.WaitS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgWait_S,
        CAST ((W1.ResourceS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgRes_S,
        CAST ((W1.SignalS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgSig_S
    FROM Waits AS W1
        INNER JOIN Waits AS W2 ON W2.RowNum <= W1.RowNum
    GROUP BY W1.RowNum, W1.wait_type, W1.WaitS, W1.ResourceS, W1.SignalS, W1.WaitCount, W1.Percentage
    HAVING SUM (W2.Percentage) - W1.Percentage < 95; -- percentage threshold
    GO

    []s


    http://www.diaadiasql.com.br