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” .

image

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.

image

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 removed

  • Anonymous
    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ço

  • Anonymous
    November 29, 2013
    Demétrio, veja esse artigo do Slava: blogs.msdn.com/.../424905.aspx

  • Anonymous
    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, Fabricio

  • Anonymous
    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 Marcelo

  • Anonymous
    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!!!