A maneira mais comum de monitorar a memória é através da análise dos contadores de performance (performance counters). Os dados dos contadores podem ser obtidos através de DMVs (Dynamic Management Views) ou através do Performance Monitor (também conhecido como System Monitor)
As DMVs estão disponíveis em todas as instâncias SQL Server. Elas permitem recuperar informações dos sistema, monitorar e diagnosticar. A DMV mais utilizada para monitoramento de memória é a sys.dm_os_performance_counters.
O Performance Monitor é uma ferramenta disponível no próprio Windows. Ele permite capturar informações sobre o hardware, sistema operacional e todos os aplicativos que possuem contadores. Os dados são exibidos através de uma interface gráfica em diversos formatos (gráficos e relatório) ou podem ser capturados em log para serem analisados posteriormente.
Em seguida irei listar os principais objetos e contadores que devem ser analisados para monitoramento de memória de um servidor SQL Server. Os valores de referência são descritos os que são normalmente utilizados, mas podem variar dependendo do ambiente.
O objeto Memory está relacionado a memória do sistema operacional do servidor, os principais contadores a serem analisados são:
Available Mbytes: indica a quantidade de memória disponível em MB no momento. O ideal é que este contador esteja com valor acima de 100 MB. Valores inferiores podem indicar a necessidade de mais memória RAM.
Pages/sec: indica o número de páginas que são páginadas na memória para o disco por segundo. O ideal é que este a média deste contador esteja sempre próximo de zero em um intervalo de 24 horas e em situações normais. Picos ocasionais podem aumentar este valor. Se a média do contador for maior que 20, o servidor precisará de mais memória RAM.
O objeto Buffer Manager está relacionado a instância SQL Server, cada instância SQL Server terá objetos próprios. Os principais contadores a serem analisados são:
Buffer Cache Hit Ratio: indica o percentual de páginas de foram atendidas pelo buffer pool. O ideal é que este valor seja igual ou superior a 99%. Valores inferiores podem indicar memória insuficiente para a instância SQL Server.
Checkpoints Page/sec: indica o número de páginas limpas no disco por segundo. O valor ideal é abaixo de 50. Se este valor estiver constantemente alto, pode indicar que a instância SQL Server precisa de mais memória.
Lazy writes/sec: indica o número de vezes por segundo que o lazy write elimina as páginas do buffer cache. Se este valor estiver maior que 20, pode indicar que a instância SQL Server precisa de mais memória.
Page life expectancy: inidica a expectativa de vida (em segundos) de uma página de dados na memória. O ideal é que este valor seja sempre superior a 300 segundos. Valores inferiores podem indicar necessidade de memória para a instância SQL Server.
Target Pages: indica o número ideal de páginas no buffer pool.
Total Pages: indica o número de páginas que estão no buffer pool no momento. Este valor deve ser menor o valor do contador Target Pages.
O objeto Memory Manager também está relacionado a cada instância SQL Server. Os principais contadores a serem analisados são:
Memory Grants Pending: indica o número de processos esperando na área de trabalho da memória. O ideal é este valor fique próximo de zero. Caso os valores sejam constantemente altos, deve-se certifica-se de que o problema está relacionado a insuficiencia de memória e não a objetos dos bancos de dados.
Target Server Memory: indica o total de memória que a instância SQL Server pode utilizar.
Total Server Memory: indica o total de memória que a instância SQL Server está utilizando no momento. Se este valor for igual ou maior que o valor do Target Server Memory, pode indicar a necessidade de mais memória para a instância SQL Server.
O objeto Process relacionado ao servidor que hospeda a instância SQL Server. O principal contador a ser analisado é:
Working Set: indica o tamanho do conjunto da carga de trabalho dos processos em bytes na memória física do servidor. Caso este valor permaneça sempre abaixo do mínimo de memória configurada para instância SQL Server, isso indica que a instância está configurada com mais memória do que realmente precisa.
TatiVieira