none
Problema de performance no SQL Server 2012 RRS feed

  • Pergunta

  • Uma stored procedure que filtra 7.000 registros em uma tabela com 100.000 registros e atualiza um único campo, executa em menos de 1 segundo no SQL Server 2008 Express.

    A mesma SP nesse mesmo banco de dados "backupeado" e restaurado no SQL Server 2012 Standard está demorando 2 minutos para executar.

    O que pode estar causando esse problema?




    terça-feira, 26 de junho de 2012 06:14

Todas as Respostas

  • Claudio,

    Quando ha uma atualização de base, é comum acontecer isso, faça isso:

    - Atualize as estatisticas;

    - Recrie todos os indices (Rebuild).

    Seu problema deverá ser solucionado.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    terça-feira, 26 de junho de 2012 11:32
    Moderador
  • Fabrizzio,

    Atualizei as estatísticas (SP_UPDATESTATS 'resample') e recriei os índices, mas não adiantou. Continua exatamente da mesma forma.

    Alguma outra idéia?


    terça-feira, 26 de junho de 2012 13:53
  • Claudio,

    É o mesmo hardware?


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    terça-feira, 26 de junho de 2012 14:05
    Moderador
  • Não Fabrizzio, o SQL Server 2102 está rodando em um servidor recém instalado, com o Windows Server 2008.

    O SQL Server 2008 Express está instalado em outro computador, com o Windows 7.

    terça-feira, 26 de junho de 2012 14:15
  • Não sei se adianta, mas se alguém que tiver o SQL Server 2012 Standard quiser testar, posso enviar o banco de dados com informações fictícias.
    quarta-feira, 4 de julho de 2012 21:10
  • Cláudio, se quiser mandar, posso testar.

    Mas se o hardware não é o mesmo, isso pode ter influência. Além da questão das configurações de um servidor para outro. Então não sei se será fácil descobrir o porquê dessa diferença.

    Você percebeu piora de performance também em outros pontos ou somente nesta procedure?


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sexta-feira, 6 de julho de 2012 01:37
    Moderador
  • Claudio,

          AS queries podem estar utilizando planos de execução diferentes. Veja os planos nos dois servidores e compare para ver onde está a diferença.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    sexta-feira, 6 de julho de 2012 19:26
    Moderador
  • Cláudio,

    mudança de infra, instalação nova, a gente sempre deixa algo pra trás. Pegando ganho no que o Fabrizzio falou, eu primeiro faria o Reuild dos índices e só depois atualizaria as estatísticas, pois o rebuild por si só já as atualiza, depois você roda o updatestats que ele vai filtrar só o que é necessário atualizar.

    Outro ponto é verificar se não está tendo contenção em sua tempDB, veja pela procedure SP_WHOISACTIVE que tem disponível na net se nao está tendo alguns PFS e SGAM lá, provavelmente seu arquivo de dados não está dividido e o gargalo está sendo lá.

    Outra coisa, pode ser que sua querie, de alguma maneira está parametrizada para trabalhar corretamente com o R2 e você deixou o Compability Level do 2012. Mude essa opção também a nível de "chute" e veja se a opção Parametrization está igual nos dois bancos, pois pode ser que esteja Forced na instância do 2008 e está SIMPLE no 2012.

    segunda-feira, 9 de julho de 2012 01:28
  • Roberson, provavelmente a diferença tem a ver com as configurações nos servidores.

    Por enquanto, o problema reside nessa procedure.

    De qualquer maneira, gostaria que testasse. Mas o projeto está "paralisado" até agosto, então vou deixar para enviar o banco de dados mais para o final do mês (estarei ausente até lá). Obrigado.

    segunda-feira, 9 de julho de 2012 13:52
  • Ok, Roberto.

    Vou fazer essa comparação, assim que possível.

    Obrigado

    segunda-feira, 9 de julho de 2012 13:53
  • Leonardo,

    Espero que seja uma dessas opções, vou tentar (assim que possível) e depois retorno com os resultados.

    Obrigado

    segunda-feira, 9 de julho de 2012 13:55
  • Olá Claudio,

    Conseguiu resolver sua questão?


    Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation

    quinta-feira, 19 de julho de 2012 14:46
  • Oi Heloisa,

    Ainda não pude verificar as sugestões dos colegas, só vou poder retomar o projeto na primeira semana de agosto.

    Assim que possível, retorno com os resultados.

    sábado, 21 de julho de 2012 06:18
  • Tentei todas as sugestões, sem sucesso.

    Criei um programa em VB para abrir e atualizar um recorset ADO, no lugar da stored procedure, e o resultado foi o mesmo: dois minutos e meio para executar.

    Tanto no SQL 2008 Express quanto em outra instância do SQL Server 2012 Standard na mesma máquina, o problema não ocorre. Somente no servidor novo.


    segunda-feira, 6 de agosto de 2012 12:04