Utilização Excessiva de Memória Pelo SQL Server

10/11/2004

0

Olá pessoal. Gostaria de saber se alguém já enfrentou algum problema com relação a grande quantidade de memória que o SQL Server aloca durante a execução de queries.

Tenho um grande problema na empresa onde trabalho. Nosso sistema roda em ambiente Web, utilizando o SQL Server como banco de dados. Muitas queries (algumas delas bem pesadas) são executadas por vários usuários ao mesmo tempo.

O que tenho percebido é que o executável do SQL vai consumindo mais e mais memória a cada vez em que os usuários vão requisitando as queries pelo sistema - e o que mais me intriga é o fato dele não liberar essa memória após o término das execuções. É como se o SQL Server sempre consumisse toda a memória disponível, mas nunca a liberasse posteriormente, mesmo não estando mais a utilizá-la.

Como rotina nada saudável, temos stopado e startado o serviço do SQL sempre que percebemos que a memória do servidor está extremamente alta, pois quando isso acontece a lentidão no sistema é muito grande, o que impacta no trabalho dos usuários. Essa atividade me incomoda muito, pois temos sempre que estar de olho em quando parar a atividade de todos os usuários pra stopar o serviço, por vezes o serviço não stopa e starta novamente (aí só mesmo o boot no servidor resolve)... é muito desconforto.

Já vi alguns comentários pela Internet dizendo que o SQL faz isso mesmo... mas nunca ninguém trata isso como se fosse algo problemático, e por conseqüência fala sobre uma possível solução para o problema do ´acúmulo´ de memória por parte dele. Eu tentei ao máximo otimizar as queries, criar índices necessários para que o esforço do servidor diminuisse, mas isso pouco adiantou.

Alguém tem alguma idéia sobre o que fazer nesses casos? Seria esse um grande problema que a Microsoft ainda não soube enfrentar com relação ao SQL Server ou ao próprio sistema operacional? (usamos Windows 2000 Server). O que mais eu poderia fazer?

Abraços


Marciapw

Marciapw

Responder

Posts

10/11/2004

Marcus.magalhaes

Boa noite Marcia.

Vamos por partes.

1) O SQL Server realmente sempre aloca memória e não devolve, à menos que o sistema operacional requisite e isso acontece quando o SO vai começar a paginar, assim o SQL começa a devolver a memória pouco a pouco.

2) Se o seu servidor de banco de dados estiver sendo compartilhado com aplicações, isso é terrível pq a forma de trabalho do servidor de bd é completamente diferente da forma de trabalho de um servidor de aplicações, procure sempre manter o bd sozinho.

3) Se vc quer limitar a quantidade de memória que o SQL Server consome, vá no [b:83e83f5528]EM (Enterprise Manager), clique com o botão direito no nome da instância desejada, vá em memória e configure o mínimo e o máximo que ele poderá utilizar, assim o SQL Server nunca irá alocar mais do que o determinado[/b:83e83f5528].

4) Se vc quer que o SQL Server devolva memória [b:83e83f5528]sem precisar fazer o stop/start[/b:83e83f5528], execute o procedimento anterior e depois entre novamente em propriedades e recoloque em modo automático, assim ele devolve memória sem precisar parar ninguém.

5) Via performance monitor, procure monitor o object [b:83e83f5528]Buffer Cache [/b:83e83f5528]e selecione [b:83e83f5528]Cache Hit Ratio[/b:83e83f5528], este indicador [b:83e83f5528][color=red:83e83f5528]DEVE SEMPRE estar acima de 85¬ (no mínimo).[/color:83e83f5528][/b:83e83f5528]

6) Procure fazer uma manutenção semanal das suas bases de dados, utilize o maintenance plan para criar rotinas de otimização (irá regerar os índices, mantendo-os sempre atualizados, e redistribuir as páginas de modo que a B-TREE continue balanceada), verificação de integridade (verifica se suas bases de dados estão integras lógica e fisicamente) e suas rotinas de backup tb podem ser agendadas por ali.

Espero ter ajudado.

Att,


Responder

26/02/2008

Tremonti

No item 4

4) Se vc quer que o SQL Server devolva memória sem precisar fazer o stop/start, execute o procedimento anterior e depois entre novamente em propriedades e recoloque em modo automático, assim ele devolve memória sem precisar parar ninguém

Como faço para deixar isso em modo automático, pois ele nao esta devolvendo a memória...


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar