Memória SQL Server
É a respeito da memória do SQL Server. Quando o servidor está ficando sem memória, recomendamos adicionar mais memória ao hardware para superar os problemas de utilização da CPU.
Mas antes de prosseguir com a atualização da memória, como parte da solução de problemas, como verificamos / calculamos a memória SQL que está consumida atualmente na instância.
Por exemplo:
NOME DO SERVIDOR: XXXXXXXXXXXXX
Memória física instalada (RAM): 64,0 GB
Memória do SQL Server atualmente alocada: 58.982 MB -> 58.982 GB
Neste caso, temos apenas uma instância (MSSQLSERVER) no servidor e 80% da memória foi alocada para a instância de acordo com o padrão. E 20% é alocado para aplicativos e sistemas operacionais.
Quando verificamos o Monitor de Recursos, ele mostrará 80% de preenchimento, pois configuramos a Memória do SQL Server para isso.
Mas isso não significa que 80% do SQL seja totalmente utilizado, pois o SQL manterá algum espaço no buffer no backend. Quando surfei, obtive a fórmula abaixo para calcular a memória SQL consumida na instância, mas esses parâmetros foram removidos na ferramenta de monitor de desempenho há muito tempo.
Existe uma maneira de verificar, atualmente, quanto o SQL utiliza de 80% (OR) em quais métricas podemos proceder com o upgrade de memória.
FÓRMULA PARA CALCULAR A MEMÓRIA SQL: (Os parâmetros abaixo foram removidos do Monitor de Desempenho)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
Respostas
como verificamos / calculamos a memória SQL atualmente consumida na instância.
Isso é muito simples de fazer. Você tem DMV sys.dm_os_process_memory que fornecerá as informações. Vai te dar physical memory usedetotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
Mas isso não significa que 80% do SQL seja totalmente utilizado, pois o SQL manterá algum espaço no buffer no backend
Assim que o SQL Server atingir o valor máximo de memória do servidor, ele manterá essa memória, a menos que a notificação de memória insuficiente solicite a liberação de memória. Então, sim, pode não estar usando tudo, mas ainda assim irá mantê-lo. Isso é chamado de cache, pois ajuda a evitar falhas de página física.
Existe uma maneira de verificar, atualmente, quanto o SQL utiliza de 80% (OR) em quais métricas podemos proceder com o upgrade de memória.
Como eu disse uma vez, utilizado ele mostrará toda a memória utilizada, mesmo quando não precisa dessas páginas no processamento de consulta. Quando uma nova solicitação chegar, essas páginas serão removidas para criar espaço para novas páginas.
Como você define "utilizado"? Uma página que foi lida no cache um segundo atrás, isso seria contado como utilizado? Um minuto atrás? Uma hora? Uma semana?
A questão é que não existem coisas como "utilizadas". O servidor SQL mantém páginas (e outras coisas) na memória. Quando há pressão de memória (interna ou externa), um mecanismo tradicional de envelhecimento do cache (basicamente) é usado para remover coisas que foram usadas menos recentemente. Há muito mais detalhes sobre o manuseio da memória (cache), é claro, mas, em princípio, é tratado como qualquer mecanismo de cache.
Portanto, conceitos como "utilizado" ou configuração ideal simplesmente não existem. Você pode ver se há muita memória não sendo usada pelo servidor SQL, é claro. Mas quando o servidor SQL aloca memória, ele fica preso a ela, a menos que haja pressão de memória. Quem sabe, talvez alguém precise dessa página no próximo segundo?
Você pode reduzir a memória máxima do servidor e ver quando seu desempenho começa a prejudicar, por exemplo.
Use o MemoryManagerInfoprocedimento armazenado, que pode ser encontrado aqui:
https://github.com/aleksey-vitsko/Database-Administrator-Tools
Ele fornece um bom detalhamento de como o SQL Server usa a memória atualmente :
Veja o exemplo na imagem abaixo - isto é o que meu servidor está consumindo atualmente:
Aproximadamente, Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(memória roubada do servidor inclui cache de plano, bloqueios, etc.)