Configurando o Maximize Throughput for Network Applications

Comecei a reler os artigos que escrevi no passado e encontrei um falando sobre Working Set. Quando escrevi o post, pensava no mistério do porque o Task Manager reporta a quantidade incorreta de memória usada pelo SQL Server. A explicação está em um documento do MSDN que comenta sobre a composição do Working Set. Toda a memória AWE e Locked Pages não fazem parte do Working Set e, portanto, não são reportados corretamente pelo Task Manager.

MSDN Working Set
https://msdn.microsoft.com/en-us/library/cc441804(VS.85).aspx

Hoje estive repensando sobre o assunto e lembrei de uma configuração importante e que não deve ser deixada de fora do seu checklist.

Nos tempos antigos do Windows NT/2000, quando a memória era um recurso escasso, o Sistema Operacional procurava usar toda a memória disponível da máquina. Se a máquina tivesse 1GB, 2GB, 3GB, não importava… ele procurava manter somente 4MB de memória livre. Mais do que isso era um desperdício de memória livre!

Working Set Size, Nonpaged Pool, and VirtualLock()
https://support.microsoft.com/kb/108449

O sistema operacional gerenciava quanto cada aplicação poderia usar de memória física. Quando a máquina se encontrava com pouca quantidade de memória (os tais 4MB), o Windows iniciava a paginação de memória virtual para o Page File. Entrava então, a decisão sobre qual o processo que deveria ser paginado e isso levaria em conta o Working Set de cada processo e do cache do File System.

Working Set = Quantidade de memória RAM utilizada por um determinado processo

É durante essa decisão que entra o parâmetro de configuração “Maximize Throughput for Network Applications”, pois o Sistema Operacional procura diminuir o Working Set do File System antes de começar a diminuir a memória dos processos (incluindo o SQL Server). Portanto, o procedimento é habilitar a configuração seguindo os passos descritos no Books Online:

Maximizing Data Throughput
https://msdn.microsoft.com/en-us/library/ms191471.aspx

Em um próximo post, gostaria de explicar melhor os efeitos da paginação quando ocorrem sobre o SQL Server.