none
Problema de performance RRS feed

  • Pergunta

  • Bom dia. Estou com o seguinte problema. Existe uma procedure dinamica que esta acabando com o servidor.

    Fizemos um profile e notamos que um dos steps da procedure é a vilã do problema. Notamos que após o profile detectar um hash ele simplesmente trava a execução e não retorna nada. O disk-io fica parado e só há consumo de cpu mas o resultado não volta.

    Gostaria que me ajudassem a entender o que acontece com o sql.  A impressão é que o comando fica "Bobo" por falta de memória. Por que dessa conclusão?Alteramos o query governor cost limit para 300 e percebemos que tudo voltou a funcionar. Retornamos para 0 e tudo continuou funcionando..

    Pergunta. Esse comando limpa a memória? Provavelmente sim pois perdemos o plano de execução da query até então guardadas.

    Mas limpar o cache não é uma solução, visto que com o tempo vai ocorrer o mesmo problema e não podemos ficar zerando os planos toda vez.

    Como  a query é dinamica e gaurda a ação do primeira execução que é executada e as demais consultas independente da variação dos parametros usará esse plano, o que é um problema pois.. tem casos em que são passados 1 parametro que retorna 100 linhas e outros que passamos 10 parametros que podem retornar mais de 1500 linhas..

    O recompile na procedure acredito não seja a solução pois a query é de consulta e muito utilizada simultaneamente e o tempo para executar o recompile é precisoso.

    Precisaria entender porque a query para sua execução e porque não ocorre reciclagem dos planos de execução liberando a memória. Existe algum comando para verificar qual o comando está ocupando minha memória que começa causar esse gargalo? Desde ja a agradeco.

    terça-feira, 14 de janeiro de 2014 10:46

Respostas

  • Deleted
    terça-feira, 14 de janeiro de 2014 12:30
  • Olá Haichu!

    Seria interessante que você nos informasse qual versão do produto e build você esta utilizando. Quanto ao "congelamento" que você informa, no log de erros do SQL Server e do windows alguma mensagem de erro foi registrada?

    Todas operações abaixo, incluindo o query cost fazem o flush do cache:

    cross db ownership chaining
    index create memory
    cost threshold for parallelism
    max degree of parallelism
    max text repl size
    min memory per query
    min server memory
    max server memory
    query governor cost limit
    query wait
    remote query timeout
    user options

    Fonte: Book SQL Server 2008 Internals

    Baseado no que você comentou, aparenta que você esta com problemas de "parameter sniffing", se você realmente identificou a procedure, aconselho você a capturar o plano de execução dela no momento em que o servidor esta apresentando lentidão e capturar o plano de execução dela com o ambiente estável. Você poderia pensar em "plan guides" e quanto a recompilação, você poderia talvez impor uma recompilação por trechos de código e não na procedure inteira. Veja se os link's abaixo te ajudam:

    PLAN GUIDES:

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

    Parameter Sniffing:

    http://blogs.msdn.com/b/turgays/archive/2013/09/10/parameter-sniffing-problem-and-workarounds.aspx

    Um abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 14 de janeiro de 2014 12:45

Todas as Respostas

  • Deleted
    terça-feira, 14 de janeiro de 2014 12:30
  • Olá Haichu!

    Seria interessante que você nos informasse qual versão do produto e build você esta utilizando. Quanto ao "congelamento" que você informa, no log de erros do SQL Server e do windows alguma mensagem de erro foi registrada?

    Todas operações abaixo, incluindo o query cost fazem o flush do cache:

    cross db ownership chaining
    index create memory
    cost threshold for parallelism
    max degree of parallelism
    max text repl size
    min memory per query
    min server memory
    max server memory
    query governor cost limit
    query wait
    remote query timeout
    user options

    Fonte: Book SQL Server 2008 Internals

    Baseado no que você comentou, aparenta que você esta com problemas de "parameter sniffing", se você realmente identificou a procedure, aconselho você a capturar o plano de execução dela no momento em que o servidor esta apresentando lentidão e capturar o plano de execução dela com o ambiente estável. Você poderia pensar em "plan guides" e quanto a recompilação, você poderia talvez impor uma recompilação por trechos de código e não na procedure inteira. Veja se os link's abaixo te ajudam:

    PLAN GUIDES:

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

    Parameter Sniffing:

    http://blogs.msdn.com/b/turgays/archive/2013/09/10/parameter-sniffing-problem-and-workarounds.aspx

    Um abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 14 de janeiro de 2014 12:45
  • Deleted
    terça-feira, 14 de janeiro de 2014 13:19