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 (4)

  1. Fernando Garcia disse:

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

  2. Demétrio Silva disse:

    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

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