none
Problema - reads e cpu RRS feed

  • Pergunta

  •  

    Caros, estou com um problema em uma stored procedure minha que é o seguinte.

    Quando essa stored é executada atraves da aplicação, temos uma leitura de 200000 e CPU de 2000 (pelo profiler)

    Caso eu execute a mesma stored, com os mesmos parametros via SSMS, ela retorna com a cpu de 200 e reads de 10000. (o normal)

    se eu simplesmente altero essa stored procedure, ela volta ao normal.

    Isso poderia ser um problema de cache do sql?

    Essa stored usa UNION ALL, table function e scalar function.

    WIll

    segunda-feira, 15 de dezembro de 2008 13:18

Todas as Respostas

  • Olá amigo, o que provavelmente está ocorrendo é que como a cada execução o SQL guarda no cache um plano de execução da procedure para ser usado na próxima execução e vc está usando um "union all" na procedure, o que faz com que esse plano de execução não seja mais válido, ou seja, não é o mais ideal.

     

    Recomento vc a utilizar a função with recompile dentro da tua procedure ou chamá-la  na execução da proc.

    Exemplo:

     

    Code Snippet

    create procedure pr_teste

    with recompile

    as

    select .....

    union all

    select.....

     

     

    ou

    Code Snippet

     

    exec pr_teste2 with recompile

     

     

     

      

    segunda-feira, 15 de dezembro de 2008 16:12
  •  

    Obrigado pela resposta,

     

    eu já tinha executado esse teste, colocando o recompile na stored, porém também não obtive sucesso.

     

     

    Eu executo o mesmo procedimento pelo SSMS e CPU e Reads são muito melhores.

     

     

    segunda-feira, 15 de dezembro de 2008 16:23
  • Emanuel,

     

    Mas se utilizar o With Recompile, todas as vezes que a stored procedure for executada ele será recompilada!!!

     

    Será que o SQL Server esta conseguindo atualizar este cache?

    segunda-feira, 15 de dezembro de 2008 16:35
    Moderador
  • Wlongo,

     

    Você já verificou o plano de execução desta stored procedure?

     

    Como estão as estatísticas de utilização desta sp?

    segunda-feira, 15 de dezembro de 2008 16:37
    Moderador
  • Concordo com vc Junior.

    Wlogo, realize comparações entre as duas formas de execução da procedure como vc está falando.

    Primeiramente limpe o cache com DBCC FREEPROCCACHE pra começar do zero e depois, compare com o profile as 2 formas.

     

     

     

    segunda-feira, 15 de dezembro de 2008 16:41
  • Boa Tarde,

     

    Lembre-se que o plano de execução leva em consideração diversas características inclusive as da conexão que foi efetuada. Verifique se as propriedades de conexão do SSMS e da aplicação são as mesmas. Para verificar, você pode rodar um SELECT na sys.dm_exec_sessions ou utilizar o DBCC USEROPTIONS.

     

    [ ]s,

     

    Gustavo

    segunda-feira, 15 de dezembro de 2008 20:24