Freigeben über


A significant part of sql server process memory has been paged out

Ouch! Você sabe o que essa mensagem significa?

2010-10-31 12:00:00.00 spid1s A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 4620, committed (KB): 1652332, memory utilization: 0%.

Pensando na data, dia 31/Out, eu seriamente pensaria em Helloween! Porque essa mensagem indica um grande problema no SQL Server.

Artigos relacionados

Resource Monitor – Notificações

Working Set

Shared Memory

Desafio: Resource Monitor e Paginação de Memória

 

Problema

O princípio do SQL Server é utilizar a maior parte da memória como cache de dados, sendo liberada através do mecanismo de notificação do Resouce Monitor. Entretanto, o erro acima está alertando o administrador sobre um problema entre o SQL Server e o Sistema Operacional:

A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 4620, committed (KB): 1652332, memory utilization: 0%.

Tradução: Observamos que o SQL Server utiliza um total de 1652332KB de memória, no qual apenas 4620KB está em memória RAM (Working Set) e o restante de 1683662KB se encontra no Page File. Em porcentagem, isso corresponde a uma utilização de memória RAM (memory utilization) igual a 0% – o ideal é que isso se mantenha sempre em 100%.

Isso é um comportamento anormal. A memória de cache está gravada em disco e, portanto, há um impacto direto na performance do servidor (cache combina com memória, não com disco). Como resultado disso, é comum encontrar erros de travamento do Scheduler, falhas de conexão com o banco de dados, lentidão inexplicável, etc… qualquer erro estilo Helloween é esperado.

Se você se deparar com esse erro no servidor, aja rápido antes que apareçam suas consequências.

 

Como resolver?

Existe uma receita bastante simples para evitar esse tipo de problema. A primeira ação a ser tomada é revisar o limite máximo de memória usada pelo SQL Server, estabelecendo limites menores. Por exemplo, podemos limitar o uso de apenas 1GB ao SQL Server.

EXEC sp_configure 'advanced option', 1

RECONFIGURE

EXEC sp_configure 'max server memory', 1000

RECONFIGURE

O segundo passo é garantir que a memória do SQL Server não será paginada através da opção Lock Pages in Memory.

Dessa forma, o SQL Server ficará sempre em memória RAM e não vai paginar para disco.

 

Basta isso para resolver?

Não. O mais importante é determinar a causa pelo qual o Sistema Operacional decidiu paginar a memória do SQL Server para disco. O problema mais comum é o alto consumo de memória por:

  • Driver do Sistema Operacional (ex: driver da placa de rede)
  • Alto consumo de memória por um processo externo ao SQL Server (ex: anti-virus, software de monitoração)
  • Alto consumo interno ao SQL Server (ex: extended stored procedures, CLR)

Comments

  • Anonymous
    October 31, 2010
    Parabéns para voce mais uma vez,que escreve artigos objetivos e que são degrande utilização no dia a dia.Detalhe,faz os problemas complicados se tornarem fácil de se resolver,lógico,sendo objetivo. Continua escrevendo mais artigos desses... Abraços....

  • Anonymous
    November 09, 2010
    Obrigado Fernando!!

  • Anonymous
    June 01, 2011
    Olá Fabrício. Poderias fazer um post mostrando como monitorar via Extended Events e o uso com ETW para este tipo de ocorrência? Abraço

  • Anonymous
    June 06, 2011
    Fala Demétrio! Isso parece um desafio hehe... não sei como fazer isso, preciso fazer uma pesquisa sobre os eventos disponíveis no XEvent. O jeito mais fácil é utilizar o Perfmon e acompanhar o Working Set do processo, ou então utilizar as DMV para acompanhar "memory utilization". Abraços, Fabricio