[SQL Server] Memory LPIM – É saudável ou não para o banco de dados?

[SQL Server] Memory LPIM – É saudável ou não para o banco de dados?

Tempo de leitura: 5 minutos

Fala pessoal, tudo bom? Espero que sim! Voltamos com mais um artigo com o intuito de gerar uma discussão saudável.

O assunto é referente a bloqueio de páginas de memória no SO, já ouviram falar?  Antes de tudo, estou deixando claro que em nenhum momento estou afirmando que seja ou não uma vantagem . A implementação do bloqueio de páginas na memória, pode ser variável a depender do cenário e necessita de monitoramento e/ou ajustes.

Para introduzir o artigo, primeiramente vamos entender um pouco sobre memória virtual no Windows.

É óbvio que o Windows por si só gerencia processos e atividades de programas. O SO faz um gerenciamento completo dos seus recursos.

Após esse entendimento básico, sabe-se então, que o SO é capaz de manipular recursos como memória, disco e etc. Por exemplo: Existe um arquivo de paginação no próprio Windows chamado pagefile.sys e quase não é percebido por nós, mas dependendo do cenário ele está lá, e inclusive sendo usado.

 

Arquivo de paginação pagefile.sys do sistema operacional

Como funciona?

  1. Por exemplo: Existe o processo de Nº1 que já está em execução.
  2. O processo Nº1 necessita de mais memória, entretanto, o SO já está com a memória topada devido a outros processos.
  3. Arquivo de paginação entra em ação e começa a usar recursos do seu disco como memória, gerenciado pelo arquivo de paginação pagefile.sys.

Na pratica:

Já passei por um cenário no qual o disco da unidade (C:) de um dos ambientes de banco de dados de produção não parava de crescer. E antes que vocês me perguntem, o maximum server memory estava habilitado e configurado corretamente. Ao decorrer, quando verifiquei, aparentemente não tinha nenhum problema ou nenhum processo que poderia tá causando o crescimento. Então pensei, vou precisar rodar uma ferramenta que me auxilie a verificar o que de fato está ocorrendo.

Usei uma ferramenta de apoio chamada Treesize.

Treesize identifica dentro da unidade ou local selecionado, quais são os maiores arquivos.

Identifiquei através da ferramenta que o arquivo de paginação (pagefile.sys) estava enorme, e então fui pesquisar. Até descobrir que se tratava de um arquivo de paginação.

O que estava ocorrendo?

É logico que o uso da paginação de memória virtual sempre é ocasionado por algum processo em específico cujo a memória já não é mais capaz de atender, porém naquele momento não fui capaz de identificar de fato o que estava ocorrendo. Depois de alguns minutos, percebi que DatabaseMail do SQL Server estava consumindo uma boa quantidade de recurso da memória do servidor. Muito interessante.

Então entrei na parte de atuação, e através do SQL Server, encerrei alguns processos do DatabaseMail.

Após identificar a causa raiz e reiniciar a instancia, o arquivo pagefile.sys iniciou uma redução, liberando espaço no meu disco (C:) novamente.

Por curiosidade fui pesquisar e acabei descobrindo que eu estava realmente um pouco atrasado em relação a LPIM.

Assim como o IFI (Instant File Initialization)LPIM  (Lock Page in Memory) é uma configuração que realizamos no sistema operacional, e que reflete também no SQL Server.  Com o LPIM habilitado, o SQL Server simplesmente passa a respeitar essa ideia de NÃO usar paginação das páginas do buffer pool para desafogar seus processos. O caso que ocorreu acima referente ao DatabaseMail e ao consumo da unidade (C:)  não existiria caso o LPIM já estivesse habilitado. Entretanto, eu poderia ter uma sobrecarga referente a memória gerando um possível (Out of Memory). Vejamos, o SQL Server necessita de memória para executar algum processo, o bloqueio de páginas está ativado e não temos essa opção de “desafogar”, logo, o SQL Server precisa fazer alguma coisa para realizar essa execução. Fila de espera? Talvez. A grande questão é que ao meu ver, um problema vai levando ao outro, ou seja, falta de memória, aumento no uso CPU e por ai vai.

Nesse cenário, através do monitoramento o LPIM funcionou bem. Até hoje não tive problemas, entretanto segundo o nosso colega da comunidade bastante conhecido, Jonathan Kehayias, em 2011 publicou um artigo que realmente é intrigante.

Segue o artigo como referência para que vocês possam ler:

Segundo o mesmo, O LPIM voltado para algumas versões, não é indicado. Entretanto, no meu caso houve um cenário bem sucedido que fugiu um pouco do padrão.

Por curiosidade, resolvi postar esse artigo para tentar verificar se vocês profissionais em SQL Server, já utilizaram o recurso alguma vez na vida de vocês, e como foi a experiência.

Lembrando que o recurso impacta diretamente no SQL Server, assim como também em outras ferramentas.

Como ativar:

Para ativação do recurso, vocês podem seguir a própria documentação oficial:

Opinião:

Independente da necessidade, buscar dados físicos diretamente do disco, principalmente para banco de dados, nunca é uma boa. Como o pagefile.sys usa a unidade de disco, não sei se realmente é uma boa. Entretanto, tudo é cenário. Gostaria de saber também a opinião de vocês.

Artigos de referências:

  1. https://blog.sqlauthority.com/2019/09/16/sql-server-enable-lock-pages-in-memory-lpim/
  2. https://www.red-gate.com/simple-talk/sql/database-administration/great-sql-server-debates-lock-pages-in-memory/
  3. https://docs.microsoft.com/pt-br/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-ver15
  4. https://www.techtudo.com.br/dicas-e-tutoriais/noticia/2016/09/o-que-e-pagefilesys-e-como-usa-lo-para-melhorar-o-windows-10.html

 

5 1 vote
Article Rating
Subscribe
Notify of
guest

1 Comentário
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Gabriel laerth
Gabriel laerth
3 anos atrás

Muito bom!