Falta de Memória na Máquina
No post anterior falei sobre a memória livre no sistema operacional, no qual apresentava um gráfico com grande variação na quantidade de memória livre.
Afinal, como descobrir se falta memória RAM no meu servidor? Existe uma forma bastante simples usando a ferramenta do Performance Monitor. Basta acompanhar o contador “Memory: Available MBytes” .
Esse contador apresenta a evolução da memória ao longo do dia e permite descobrir os horários *exatos* no qual o servidor sofreu de pressão por memória. No exemplo abaixo, observamos que às 15h e 16h30 foram momentos bastante críticos.
Sintomas:
- Uma ou mais aplicações aumentam o consumo de memória
- Sistema Operacional inicia a paginação de memória de todos os processos
Nesse caso específico, haviam duas instâncias SQL Server rodando na mesma máquina. Nesse caso, recomendamos utilizar a configuração do “Max Server Memory” para limitar o tamanho das instâncias e evitar a paginação.
Problema:
A paginação dos processos para disco (Page File) causa lentidão temporária no servidor e pode prejudicar os processos. A lentidão pode durar desde segundos a alguns minutos. Seria isso um problema? Tudo depende da carga:
- Uma rotina batch que dura horas não será visivelmente afetada
- Acessos de milissegundos podem demorar segundos (uma eternidade!) para finalizar
Atualmente com máquinas de 64GB ou mais de memória, acho prudente deixar pelo menos 2GB livre. Essa memória livre seria uma sobrevida em caso de picos de consumo.
Você discorda? Deixe seu comentário!
Comments
Anonymous
November 27, 2013
The comment has been removedAnonymous
November 27, 2013
Fala Demétrio!!! É verdade, Lock Pages in Memory vai resolver o problema. Ou deveria dizer, vai "mascarar" o problema.Anonymous
November 27, 2013
A conversa sobre PTE é bastante extensa e fica difícil de generalizar. Isso me lembra um dos posts do Slava Oks, que comenta sobre a falta de memória virtual (que é teoricamente limitada em 7TB) devido à falta de PTE.Anonymous
November 27, 2013
Opa Catae, Não conhecia o post do Slava sobre PTE. Vou procurar na net. Não entendi quando você citou "difícil de generalizar". O fato do PTE usar mais páginas para alocar mais memória não seria "um dos motivos" para deixar mais memória para o SO ? Grande abraçoAnonymous
November 29, 2013
Demétrio, veja esse artigo do Slava: blogs.msdn.com/.../424905.aspxAnonymous
November 29, 2013
Com relação à pergunta "O fato do PTE usar mais páginas para alocar mais memória não seria "um dos motivos" para deixar mais memória para o SO?": SIM, você tem toda a razão. O comentário é MUITO válido. Mas PTE não deveria (embora possa) ser a principal preocupação quando trabalhamos com máquinas de 16GB. Esse tipo de discussão é excelente! Abraços, FabricioAnonymous
December 16, 2013
Olá Catae, tudo bem? No passado tive um problema de falta de memória no SQL Server (configurado para gerenciar a memória), onde analisando os contadores de alocação de memória e paginação do sistema operacional, não era possível identificar nenhuma contenção de memória. Entretanto, após analisar contadores do SQL, foi possível identifica que o SQL estava com pouco memória disponível, através do uso de ciclo de página em memória. Qual contador do SQL é utilizado para esta análise? e como deve ser analisado? Abraços MarceloAnonymous
December 27, 2013
Oi Marcelo! Desculpa pela demora na resposta... A sua análise está correta. Esses contadores de paginação e memória livre ajudam a determinar se há falta de recurso no sistema operacional. Entretanto, é FUNDAMENTAL analisar os contadores do SQL para identificar se há contenção de memória INTERNA à instância. Estou devagar e sempre documentando cada um deles. Eles seriam Target Pages, Total Pages, Stolen Pages, e principalmente os contadores de Lazy Writes/sec e Page Life Expectancy. Obrigado pelo seu comentário!!!