none
Timeout expired, mas não sempre... RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma aplicação em asp.net com sql server e diariamente temos registros nos logs de um erro em querys aleatórias.
    Pegamos estas querys e rodamos no sql management studio mas elas rodam em milesimos de segundos sempre.. Nunca trava, nunca demora.. 

    Alguém tem alguma idéia do que ou porque na aplicação estas querys ficam resultando em timeout.
    Eu tenho impressão que em alguns momentos o servidor possa estar sobrecarregado e neste momento estas querys se tornam lenta mas nunca consegui capturar este momento.. Sempre que testou pelo management studio roda bem.

    Existe alguma forma de analisar indicadores do sql que me permitam saber ao longo do dia, momentos em que ele estava sobrecarregado ou algo assim ?

    Qualquer ajuda é bem vinda.
    terça-feira, 25 de fevereiro de 2014 00:54

Respostas

  • Durval, bom dia.

    Muito show. Eu não sabia que existia esta opção de dizer ao sql para rodar a consulta sem "travar" o banco.

    Existe alguma forma fácil de identificar querys que estejam presas em função de deadklocks ?

    Abraços

    Rafael,

    Veja os posts abaixo que explicam de maneira simples como verificar um deadlock.

    http://blogs.technet.com/b/latam/archive/2010/03/18/deadlocks-no-sql-server-2008-o-que-fazer-para-resolv-los.aspx

    http://msdn.microsoft.com/pt-br/library/ms188246.aspx

    Não esqueça de marcar como resposta todos os posts que ajudaram na solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Rafael Metring terça-feira, 25 de fevereiro de 2014 17:56
    terça-feira, 25 de fevereiro de 2014 12:56
    Moderador
  • Rafael,

    Seu conceito está correto, nos momentos em que o servidor esta sobrecarregado de requisições, muito provavelmente deve ocorrer deadlock entre os registros que estão sendo manipulados nesta e/ou em outras consultas que utilizam os mesmos dados.

    Você pode aumentar o time-out do seu servidor, mas o correto é evitar o deadlock utilizando um hint adequado para seu uso. Veja no exemplo abaixo:

    --PARA CONSULTAR DADOS
    SELECT * FROM TB_SuaTabela WITH(NOLOCK)
    
    --PARA ATUALIZAR OU REMOVER REGISTROS
    UPDATE TB_SuaTabela WITH(ROWLOCK) SET
    CAMPO1 =''
    WHERE ...

    Para maiores informações sobre hints veja o link:

    http://technet.microsoft.com/en-us/library/ms187713.aspx

    http://technet.microsoft.com/en-us/library/ms187373.aspx

    Você também pode alterar a quantidade de memória disponível em cada consulta. Veja abaixo:

    http://technet.microsoft.com/pt-br/library/ms181047(v=sql.105).aspx

    --Habilita o acesso à configurações avançadas do SQL
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    
    --Altera a quantidade de memória alocada/consulta(Kb)
    sp_configure 'min memory per query', 20480;
    GO
    RECONFIGURE;
    GO

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Alexandre Matayosi terça-feira, 25 de fevereiro de 2014 12:57
    • Marcado como Resposta Rafael Metring terça-feira, 25 de fevereiro de 2014 17:56
    terça-feira, 25 de fevereiro de 2014 11:15
    Moderador

Todas as Respostas

  • Rafael,

    Seu conceito está correto, nos momentos em que o servidor esta sobrecarregado de requisições, muito provavelmente deve ocorrer deadlock entre os registros que estão sendo manipulados nesta e/ou em outras consultas que utilizam os mesmos dados.

    Você pode aumentar o time-out do seu servidor, mas o correto é evitar o deadlock utilizando um hint adequado para seu uso. Veja no exemplo abaixo:

    --PARA CONSULTAR DADOS
    SELECT * FROM TB_SuaTabela WITH(NOLOCK)
    
    --PARA ATUALIZAR OU REMOVER REGISTROS
    UPDATE TB_SuaTabela WITH(ROWLOCK) SET
    CAMPO1 =''
    WHERE ...

    Para maiores informações sobre hints veja o link:

    http://technet.microsoft.com/en-us/library/ms187713.aspx

    http://technet.microsoft.com/en-us/library/ms187373.aspx

    Você também pode alterar a quantidade de memória disponível em cada consulta. Veja abaixo:

    http://technet.microsoft.com/pt-br/library/ms181047(v=sql.105).aspx

    --Habilita o acesso à configurações avançadas do SQL
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    
    --Altera a quantidade de memória alocada/consulta(Kb)
    sp_configure 'min memory per query', 20480;
    GO
    RECONFIGURE;
    GO

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Sugerido como Resposta Alexandre Matayosi terça-feira, 25 de fevereiro de 2014 12:57
    • Marcado como Resposta Rafael Metring terça-feira, 25 de fevereiro de 2014 17:56
    terça-feira, 25 de fevereiro de 2014 11:15
    Moderador
  • Durval, bom dia.

    Muito show. Eu não sabia que existia esta opção de dizer ao sql para rodar a consulta sem "travar" o banco.

    Existe alguma forma fácil de identificar querys que estejam presas em função de deadklocks ?

    Abraços
    terça-feira, 25 de fevereiro de 2014 11:58
  • Durval, bom dia.

    Muito show. Eu não sabia que existia esta opção de dizer ao sql para rodar a consulta sem "travar" o banco.

    Existe alguma forma fácil de identificar querys que estejam presas em função de deadklocks ?

    Abraços

    Rafael,

    Veja os posts abaixo que explicam de maneira simples como verificar um deadlock.

    http://blogs.technet.com/b/latam/archive/2010/03/18/deadlocks-no-sql-server-2008-o-que-fazer-para-resolv-los.aspx

    http://msdn.microsoft.com/pt-br/library/ms188246.aspx

    Não esqueça de marcar como resposta todos os posts que ajudaram na solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Rafael Metring terça-feira, 25 de fevereiro de 2014 17:56
    terça-feira, 25 de fevereiro de 2014 12:56
    Moderador