Para um de nossos SQL Server, recentemente adicionamos mais memória. O valor inicial era de 12GB. O servidor apresentou falta de memória física, então adicionamos mais 12 GB, totalizando 24 GB. Então eu defini os seguintes valores: min. memória do servidor 1024 MB - memória máxima do servidor: 19456. Bem, tudo está funcionando bem, mas tenho algumas perguntas sobre o uso da memória do SQL Server. De fato, o servidor SQL de repente usou toda a memória atribuída:
Eu tenho um bom livro que diz: "Uma vez que o uso da memória aumentou além da configuração mínima de memória do servidor, o SQL Server não liberará nenhuma memória abaixo desse valor" - A mesma coisa está acontecendo aqui com a memória máxima do servidor?
Estou me perguntando (de novo) como medir quanta memória o SQL está realmente usando. Estou confuso com o parâmetro " Total server memory (KB) " ("esse contador mede o uso total do buffer pool do SQL Server"). De acordo com o perfmon, são apenas 2 MB:
Talvez possamos poupar o ESX de alguma RAM e a memória do SQL Server (ou seja, PLE) ainda mostrará bons valores - Como ter certeza? Uma boa explicação sobre como funciona a memória SQL nesse caso será muito apreciada!
Sua configuração está boa. 24 GB de RAM total, 19 GB para SQL Server deixando 5 GB para o sistema operacional.
O SQL Server consome muita memória e consumirá todos os 19 GB disponíveis, o que é perfeitamente normal.
Você pode reduzir a memória máxima do servidor de 19 GB. No entanto, eu não faria isso se você estivesse enfrentando pressão de memória com 12 GB de memória.
A questão seria quais outras funções esse servidor está executando que usariam a memória que você potencialmente desalocaria do SQL Server? Essas funções (talvez SSIS, SSRS, SSAS etc) podem ser movidas para um servidor alternativo?
Observe a escala do contador "Total Server Memory (KB)": é 0,0001. Isso significa que o número que você vê é dividido por 10.000, portanto, são 20 GB em vez de 2 MB.
Dito isso, Max Server Memory controla a quantidade máxima de memória que pode ser alocada para o processo do SQL Server. Dependendo da versão que você está usando, essa configuração controla apenas o buffer pool ou todas as alocações. As versões do SQL Server < 2012 controlam apenas o tamanho do buffer pool com essa configuração, enquanto as versões >= 2012 controlam todas as alocações de memória.
Isso é praticamente normal e esperado, você descobriu que havia pouca memória física, adicionou memória física e alterou a configuração de memória máxima do servidor agora o SQL Server pode ver que tem permissão para usar memória extra, então foi em frente e pegou tudo. Isso ajudaria o SQL Server a tornar as coisas mais rápidas quando novos requisitos de memória vierem porque ele já tem memória em cache, o novo processo que requer memória obteria isso imediatamente.
Embora isso esteja correto, mas não realmente relacionado ao que você está vendo. O que foi dito acima é que a memória mínima do servidor é o ponto até o qual o SQL Server tentará reduzir seu consumo de memória em caso de pressão de memória. O que você está vendo é o comportamento padrão do SQL Server quando há mais memória disponível.
Se você estiver usando o SQL Server 2008 e acima, uma maneira fácil de ver quanta memória o SQL Server está usando é consultando DMV sys.dm_os_process_memory
Phy_Memory_usedby_Sqlserver_MB
-- Fornece a memória física total usada pelo SQL Server em MBTotal_Memory_UsedBySQLServer_MB
-- Fornece a memória total (arquivo RAM+Page) usada pelo SQL Server em MBTambém posso ver que você está usando o Gerenciador de Tarefas para ver a utilização da memória do SQL Server, NÃO use o gerenciador de tarefas, pois ele não mostrará a memória correta utilizada quando o privilégio de páginas bloqueadas na memória for atribuído à conta de serviço do SQL Server
Memória Total do Servidor : Esta é simplesmente a memória total usada pelo SQL Server, MAS isso não rastreia TODA a memória usada e pode perder alguns MBs e é aqui que o DMV entra em cena, então sempre confie na consulta que postei.
Agora, se você ver que a escala na qual mediu a memória total do servidor é 0,0001, nesse caso, qualquer que seja o valor obtido, você deve multiplicá-lo por 10.000 para obter o valor na escala de 1, que é o que você precisa. Não consigo ver como você conseguiu 2 MB, você pode me mostrar.
Há muito tempo, escrevi um artigo sobre memória e solução de problemas do SQL Server , isso deve ajudar você a começar sobre os fundamentos do gerenciamento de memória do SQL Server.
Se você estiver usando o SQL Server 2012 e superior, você deve ler
Deixar RAM suficiente para SO e ESX no seu caso é importante. Se você deseja definir o valor ideal para a memória máxima do servidor, aqui está o link stackexchange