Lock Pages in Memory

23 de agosto de 2019 0 Por Rodrigo Crespi

No SQL Server o Lock Pages in Memory serve para prevenir que o SQL Server faça paginação das páginas do buffer pool. Esta configuração é útil quando o impacto de performance está sendo causado pela quantidade de páginas recicladas do buffer pool.

De maneira bem simplificada, o Windows roda todos os seus processos em uma área dedicada de memória virtual que é conhecida como VAS (Virtual Address Space) e esta é dividida em duas regiões: a de sistema (Kernel) e a de usuário (app).
Na região do Kernel é mapeado diversas estruturas de sistema do OS como o file cache, paginado ou não.
No caso do User Mode Server, aloca-se os processos de aplicações que estão sendo executadas no momento, neste caso incluímos o SQL Server.

Quando habilitamos o Lock Page in Memory para a conta do SQL Server, estamos falando para que a alocação de buffer pool utilize a chamada da função AWE API. Desta maneira, a memória é considerada locked, ou seja, não será paginável e deve estar na área de Kernel (physical memory server).

Tudo parece bem, mas a possibilidade de erro surge quando o SQLOS não pode responder à tempo a solicitação da API do Windows QueryMemoryResourceNotification que é responsável pelo flag que reduz o consumo de memória.

Simplificando, é uma pressão de memória causada por qualquer aplicativo ou anomalia do sistema que deixa o Windows sem memória (Out Of Memory). Sendo assim, o SQLOS não terá tempo para devolver memória ao processo do Windows.

Se houver uma configuração adequada do Max Server Memory, talvez seja possível contornar a possibilidade de Out Of Memory. A melhor recomendação é definir um valor baixo para este parâmetro e ir aumentando gradativamente. Juntamente deve-se ir acompanhando o contador Memory\Available MBytes.

Dúvidas? Entre em contato conosco! 😉

Bibliografia
Denlaney, K. et al. Microsoft SQL Server 2012 Internals. 1a ed. Microsoft Press.
Microsoft Support. Disponível em: http://support.microsoft.com/kb/918483 Acesso em: 22 de ag 2019.
CSS SQL Server Engineers. Disponível em: http://blogs.msdn.com/b/psssql/archive/2012/03/20/setfileiooverlappedrange-can-lead-to-unexpected-behavior-for-sql-server-2008-r2-or-sql-server-2012-denali.aspx Acesso em: 22 de ag 2019.
Docs Microsoft. Disponível em: https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-2017 Acesso em : 22 de ag 2019.