none
Lentidão SQL SERVER 2005 RRS feed

  • Pergunta

  • Boa tarde!

    Estou passando por uma situação um pouco complicada para mim, pois não tenho muito conhecimento nas configurações e manutenções de banco de dados, sei apenas o suficiente hoje para meu trabalho de programador (eu sei... ja estou procurando cursos e livros para me especializar mais rsrrs)

     

    mais meu problema é o seguinte, na semana passada o pessoal reduziu o tamanho do banco de log das instancias que temos no sql server 2005... após isso a intranet da empresa passou a ter uma grande lentidão, algumas vezes chega a dar timeout

     

    tentei ver o que alguns fóruns falavam, conselhos mais até agora nada, uma coisa que reparei é que esta sendo gerado muitos locks quando um processo é executado muitos mesmo! Colocando alguns counters do HD no monitor de performance também vi que % Idle Time esta no gargalo além do Avg Disk Bytes/Writes

     

    mais acredito que meu maior problema seja a grande geração de locks que estão aparecendo no sql profiler quando é solicitado alguma coisa..

     

    alguem poderia me sugerir o que fazer para ter mais certezas se meus problemas são mesmo os locks, e algum link ou um passo a passo de como resolver?

     

    só lembrando que antes do pessoal mexer estes problemas não estavam ocorrendo, agora mesmo voltando as configurações, liberando mais memória e tudo que tentei não resolveu... também não houve nenhuma alteração no IIS

     

    obrigado!!


    Fernando
    • Movido Gustavo Maia Aguiar segunda-feira, 31 de outubro de 2011 16:00 (De:SQL Server - Desenvolvimento Geral)
    segunda-feira, 31 de outubro de 2011 14:49

Respostas

Todas as Respostas

  • Boa Tarde,

    Considerando que uma Intranet tem uma taxa de consultas muito superior a taxa de escritas e que operações de consulta não são gravadas no log de transação, eu acho muito difícil que a redução dos logs possa ter provocado essa lentidão. Adicionalmente, quando um DBA opta por reduzí-lo, possivelmente já o fez com base em algum embasamento (logs muitos grandes, adequação da frequencia de backup de log ao seu tamanho, etc).

    Analisar os contadores do Performance Monitor também são de grande valia, mas considerando que não houve aumento de demanda e nem manutenção das aplicações e provavelmente que você irá encontrar é o que já era verdade...

    Bloqueios fazem parte do dia a dia de qualquer banco de dados. Não há sistema de concorrência (banco, filesystem, prevalência, etc) que esteja livre de concorrência e você sempre verá muito bloqueios em qualquer um desses sistemas. O que impacta não é a presença deles, mas sim quanto tempo eles duram e isso você não verá no Profiler. Um simples SELECT em um registro já irá gerar no mínimo 4 bloqueios no banco de dados e por isso é perfeitamente normal você visualizar muitos bloqueios sempre. Se não há bloqueios, é porque não há acesso.

    Eu apostaria muito mais em rotinas administrativas que não rodaram ou algo do tipo. Possivelmente alguma reindexação, atualização de estatísticas, etc não foi executada ou algo do tipo. Certifique-se de que elas foram de fato executadas.

    Gostaria de solicitar que esse tipo de dúvida fosse postada na sessão "Gerenciamento, Configuração, Instalação e Segurança" já que esse não é uma dúvida que refere-se a "SQL Server - Desenvolvimento"

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 31 de outubro de 2011 15:58
  • Boa tarde Gustavo!

    desde ja, muito obrigado por sua ajuda!

     

    Então, essa intranet é um tanto quanto "especial" kkk... quando ela foi projetada na empresa não existia um sistema de erp ou algo que pudesse gerenciar os fluxos internos, ai fizeram ela para ter controle dos fluxos e ai ja viu... bastantes cadastrinhos, atualizações e consultas, como um sistema normal...

     

    Já começamos a corrigir isso! implementamos um sistema de ERP, estou refazendo a intranet, tudo para ficar o mais correto possível, mais até estar tudo pronto temos que manter as coisas como estão mesmo... =/

     

    inclusive esses muitos e muitos locks que visualizei são nos momentos de Insert...

    os processos de consulta(select) demoram um pouco, mais bem menos que os de cadastros =/

     

    vc tem alguma sugestão de alguma coisa que posso estar fazendo?

    valeu!! 


    Fernando
    segunda-feira, 31 de outubro de 2011 16:15
  • Gustavo,

    tentei até um plano de manutenção que encontrei na net, que por conhecidencia ou não, foi vc quem fez...

    http://www.plugmasters.com.br/sys/materias/574/2/SQL-Server-2005-Wizards%3A-Planos-de-Manuten%E7%E3o

     

    Infelizmente não deu certo para mim...

     


    Fernando
    segunda-feira, 31 de outubro de 2011 18:57
  • Olá Fernando,

    Vamos lá então. Começando pelo básico.

    - Identifique senão há bloqueios de longa duração nas suas consultas

    Monitorando bloqueios com o uso de Recursive Common Table Expressions
    http://gustavomaiaaguiar.wordpress.com/2009/12/18/monitorando-bloqueios-com-o-uso-de-recursive-common-table-expressions/

    - Veja se os índices não estão fragmentados e se estiverem desfragmente-os

    Detectando fragmentação em tabelas para as versões Microsoft SQL Server 2000 e 2005
    http://www.devmedia.com.br/post-5054-Detectando-fragmentacao-em-tabelas-para-as-versoes-Microsoft-SQL-Server-2000-e-2005.html

    Heap Tables - Por que devemos evitá-las ?
    http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&thold=-1&mode=flat&order=0&sid=312

    Monitorando a fragmentação dos índices
    http://fabriciolima.net/blog/2011/02/16/monitorando-a-fragmentacao-dos-indices/

    Acho que esses são os primeiros pontos de investigação.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 1 de novembro de 2011 02:04
  • Cara, mais uma vez, valeu msm por toda ajuda!

     

    Seguindo os links que vc me mandou, identifiquei que meus problemas....

    1º esta nas fragmentações de algumas tabelas só que o problema maior é a parte de que todas tabelas são Heap Tables =/

     

    Acho que por isso que o processo de manutenção não fez a desfragmentação então...

    pelo visto vou ter muito serviço pela frente msm kkk

     

    Muito bom esse passo a passo que vc me passou! 

    Valeu!


    Fernando
    terça-feira, 1 de novembro de 2011 12:07
  • Oi Fernando,

    Eu tive esse palpite quando você falou que usou os planos de manutenção e não deu certo, mas precisava ter certeza. É uma pena que no 2005 não tenha alternativa direta para lidar com as HEAP TABLES (no 2008 temos o ALTER TABLE Tabela REBUILD). Fico feliz que o passo a passo resolveu.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 1 de novembro de 2011 14:36
  • Apenas mais uma duvida ^^

    depois que criei campos como pk nas tabelas consegui fazer a manutenção e tal, porem a lentidão infelizmente continua...

     

    achei nos logs do sql server um monte de registros com essa mensagem:

     

    Date 7/9/2011 08:03:11 (Aqui na verdade tenho varias datas e horários diferentes)

    Log SQL Server (Archive #6 - 7/9/2011 09:20:00)

     

    Source Logon

     

    Message

    Login failed for user 'NT AUTHORITY\SYSTEM'. [CLIENT: 192.168.60.9]

     

     

    Qual a importância desse usuário?

    Esses falha de login pode estar influenciando na lentidão? (pergunta meio besta... mais vai saber né? ^^)

     

    valeu!!


    Fernando

    terça-feira, 8 de novembro de 2011 11:13
  • Bom Dia,

    Acho difícil essa falha de logon estar influenciando na lentidão. Talvez algo não funcionasse, mas é difícil que fique mais lento. Esse usuário vem por Default nas instalações de SQL Server e possivelmente deve estar configurado para rodar algum serviço. Sugiro adicioná-lo na lista de logins do SQL Server (a instalação padrão o coloca como sysadmin).

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 8 de novembro de 2011 11:36
  • Como posso melhorar o tempo de audit logout?

    vejo que o problema é a duração desse audit logou... ele leva muito tempo, tipo as execuções levam 6, 40, 100 milisegundos e o audit logout leva 400.000, 700.000 milisegundos.. =/

     

     abaixo segue uma imagem com um exemplo:

    Aproveitando, como posso tirar o Mapeamento das tabelas que o SA faz, eu queria remove-lo da base arquivo, controladoria e outras:

     

    metade dos cabelos que eu tinha ja se foram neste problema =/

    Valeu!


    Fernando
    quarta-feira, 9 de novembro de 2011 16:09
  • Pessoal, só pra passar uma posição... 

    acho que encontrei o problema definitivamente...

     

    Depois de tanto mexer (até criei uma nova instancia, novos usuários, novas bases de dados importando somente as tabelas.. fiz de tudo que foi possível) acabei descobrindo que o problema é por causa do exchange (servidor de e-mails da empresa) ¬¬'

     

    É assim, eu estava analisando o código que faz insert, e update na tabela e vi que ele segue os passos abaixo:

    - abre conexão com  o banco;

    - executa a query (insert, update, etc..)

    - abre uma nova conexão com o banco (sem fechar a primeira..)

    - consulta os dados do usuário que esta fazendo o processo

    - envia um e-mail as pessoas envolvidas

    - FECHA AS CONEXÕES EM ABERTO

    só que em um teste besta que estava fazendo vi que estava demorando pra sair os e-mail da minha caixa do outlook e ai que comecei a ligar as coisas, quando fomos ver, o exchange estava travando e reiniciando os serviços e enquanto isso a minha conexão ficava aberta esperando.. com isso um logout bem demorado ¬¬'

    da pra acreditar?

    removi a parte de e-mail e tudo funcionou normalmente...

     

    valeu a pensa, pq aprendi muito com tudo isso... agora vou refazer a lógica desses envios de e-mails (isso pq não fui eu quem fiz essas paginas)

     

    Obrigado a todos e ao Gustavo tbm que deu uma grande ajuda!

     

    Valeu!

     

     


    Fernando
    sexta-feira, 11 de novembro de 2011 15:33