Cache de Dados
<Continuando o artigo Monitorando a memoria do SQL Server>
Antes de entender como o SQL Server gerencia seus recursos, vamos discutir uma questão relacionada ao papel da memória no servidor:
Qual a principal função da memória em um servidor de banco de dados?
Resp: A memória é usada para fazer cache de dados.
Essa área de cache é denominada Data Cache ou Buffer Pool.
Buffer Pool
Esse é um dos componentes chaves para compreender como monitorar a memória do servidor. É o Buffer Pool que define quanto de memória será utilizada pelo SQL Server. O objetivo dele é usar o máximo de memória possível sem afetar a performance do Sistema Operacional. Em outras palavras, há um balanceamento de memória entre o SQL Server e o Sistema Operacional.
Exemplo: Se eu tivesse um servidor com 64GB de memória RAM, esperaria que quase sua totalidade fosse utilizada para fazer cache de dados.
SQL Server tem um único objetivo: utilizar o máximo de memória disponível no servidor, desde que o Sistema Operacional esteja tranquilo.
Exemplo: No SQL Server 2000 rodando com Windows 2000, o gerenciamento de memória era feito da seguinte forma: SQL Server alocava toda a memória RAM e deixava o Sistema Operacional com exatamente 4MB (WOW! A primeira vez que li isso, quase cai da cadeira). Caso algum aplicativo precisasse de memória, começaria alocando parte dos 4MB, baixando a quantidade de memória livre para 3MB, 2MB,…. Durante esse mesmo período, o SQL Server detectava a diminuiçào de memória e devolveria parte da memória para o Windows. O objetivo era manter exatamente 4MB de memória livre.
A partir do Windows 2003, houve uma mudança na forma da quantidade de memória usada. SQL Server 2000/2005/2008 recebem notificações do próprio Sistema Operacional sobre o status da memória livre. Isso significa que o SQL Server aloca o máximo de memória para o Buffer Pool até o momento que chega uma notificação falando que a “memória do Sistema Operacional está baixa”.
(Nota: Essa notificação fica registrada na DMV sys.dm_os_ring_buffer disponível a partir do SQL 2005)
Outra coisa interessante aqui: quando falamos de aumento no uso de memória, estamos falando sobre o tamanho do Buffer Pool. A forma mais fácil de acompanhar esse crescimento é através da ferramenta Performance Monitor, através do contador:
- SQL Server Buffer manager: Total Pages
Outra forma de acompanhar o tamanho do Buffer Pool é através da DMV sys.dm_os_sys_info e do comando DBCC MEMORYSTATUS.
SELECT bpool_committed FROM sys.dm_os_sys_info
O comando DBCC MEMORYSTATUS está disponível desde o SQL 2000.
DBCC MEMORYSTATUS
Foram 3 formas diferentes de obter o tamanho de 15520 páginas para o Buffer Pool. Considerando que cada página tem 8kb, então o meu SQL Server está usando aproximadamente 121MB para cache de dados (Data Cache).
No próximo post, comentarei sobre o evento de crescimento e diminuição do Buffer Pool, e como que eles estão relacionados com o contador chamado de Target Pages.
Comments
- Anonymous
June 03, 2014
Vou ler todos os seus posts :DDDDD Thanks.