DBCC MEMORYSTATUS (Parte I)
Esse comando DBCC MEMORYSTATUS sempre foi muito útil para investigar o consumo de memória no SQL Server. No tempo do SQL 2000, era impossível determinar a distribuição de memória sem o auxílio desse comando não-documentado. A partir do SQL 2005, algumas informações podem ser encontradas em DMV’s.
Esse post mostra como acompanhar a visão do SQL Server em relação ao ambiente externo (Sistema Operacional e outros processos).
O gerenciador de memória (Memory Manager) pode alocar memória virtual através de uma API denominada VirtualAlloc(). Nessa API, o espaço de memória é previamente reservado e depois “comitado”.
Memory Manager KB ---------------------------------------- ----------- VM Reserved 67639392 VM Committed 505752 Locked Pages Allocated 59652352 Reserved Memory 1024 Reserved Memory In Use 0
No exemplo acima, observamos que o SQL Server reservou um espaço de aproximadamente 67GB (67639392 kb), representado por VM Reserved. A quantidade máxima de memória reservada é de 7TB para a plataforma 64-bits, ou seja, não há grande preocupação. Se o servidor é de 32-bits, então esse limite é de apenas 2GB.
O próximo passo é investigar a quantidade de memória “comitada” (VM Committed). Essa é a quantidade de memória utilizada pelo SQL Server ainda usando a API VirtualAlloc(). Essa memória pode ser paginada para disco (Pagefile) a qualquer momento. O exemplo apresenta 505MB (505752 kb) utilizados pelo SQL Server, valor muito próximo ao que será reportado pelo Task Manager.
Observamos a memória alocada através de Locked Pages e AWE, que corresponde a aproximadamente 59GB (59652352 kb) – Locked Pages Allocated. Essa memória nunca será paginada. Para que o SQL Server tenha permissão para utilizar essa memória, necessita-se do privilégio Locked Pages in Memory.
Por fim, o SQL Server deixa alocado 1MB de memória em caso de emergência (Reserved Memory). Por exemplo, uma situação crítica durante uma operação de ROLLBACK ocorre quando há falta de memória no servidor e nenhuma memória pode ser alocada. Para garantir que as estruturas mínimas sejam registradas no banco de dados, o banco de dados pode utilizar temporariamente Reserved Memory. (Felizmente) Nunca vi essa situação ocorrer.
Comments
Anonymous
July 27, 2010
Muito bom Fabrício. Poderias comentar sobre as demais saídas deste comando que achas interessante? AbraçosAnonymous
August 09, 2010
Pode deixar. Já estou preparando a continuação de mais artigos sobre o DBCC MEMORYSTATUS. Se você tiver algum contador específico e quiser mais detalhes, pode falar que vou pesquisando. Abraços, Fabricio