Usuário com melhor resposta
Lentidão SQL SERVER 2005

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)
Respostas
-
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.htmlHeap Tables - Por que devemos evitá-las ?
http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&thold=-1&mode=flat&order=0&sid=312Monitorando 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- Marcado como Resposta Fernando Miranda Domeneghetti terça-feira, 1 de novembro de 2011 12:02
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- Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 31 de outubro de 2011 15:58
- Editado Gustavo Maia Aguiar segunda-feira, 31 de outubro de 2011 15:59
-
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 -
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 -
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.htmlHeap Tables - Por que devemos evitá-las ?
http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&thold=-1&mode=flat&order=0&sid=312Monitorando 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- Marcado como Resposta Fernando Miranda Domeneghetti terça-feira, 1 de novembro de 2011 12:02
-
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 -
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 -
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
- Editado Fernando Miranda Domeneghetti terça-feira, 8 de novembro de 2011 11:14
-
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 -
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 -
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