Liberar memória no Windows Server 2019 para instância do SQL Server?

Liberar memória no Windows Server 2019 para instância do SQL Server?

Temos o Windows Server 2019 Standard (x64) com 64 GB de memória.

A captura de tela abaixo mostra o uso de memória em 96% com oServidor SQL Windows NTexecutando e usando 344,5 MB.

insira a descrição da imagem aqui

Este é o Gerenciador de Tarefas após interromper o serviçoServidor SQL Windows NT. O uso de memória caiu para 8%.

insira a descrição da imagem aqui

eu começo o serviçoServidor SQL Windows NTde novo. O gerenciador de tarefas está muito baixo, 9%, mas o servidor SQL está usando mais memória agora do que quando o uso de memória era de 96%. insira a descrição da imagem aqui

Duas questões:

  1. Qual é o problema com a memória?
  2. Como posso diminuir o uso de memória sem precisar reiniciar a instância do SQL Server?

Responder1

Está faltando um detalhe importante aqui: o SQL Server é mostrado pelo Gerenciador de Tarefas como usando apenas 344,5 MB de RAM, mas na verdade reservou muito mais, quase tudo, para seu próprio uso. O Gerenciador de Tarefas não mostrará isso. Na verdade, os números no Gerenciador de Tarefas não somam 97% da memória do sistema, porque a memória reservada não é mostrada lá.

Sua suposição de que quase toda a sua memória é usada por outra coisa e, portanto, o SQL Server não consegue usar mais de 344,5 MB está completamente errada. Não funciona assim. O Gerenciador de Tarefas pode ser bastante enganador; dê uma olhada nos contadores de desempenho reais.


Atualize para tentar explicar melhor.

servidor SQLpor designarmazena dados em cache na memória e, com o tempo, consumirá quase toda a memória disponível no sistema; mas essa memória não é mostrada (ou pelo menos não toda) no Gerenciador de Tarefas, porque o SQL Server tenta jogar bem e diz ao sistema operacional "Quero essa quantidade de memória, mas é apenas para armazenamento em cache, posso sobreviver sem ela, então sinta-se à vontade para recuperá-lo se precisar". Isso significa que o Gerenciador de Tarefas mostra muito menos memória usada pelo SQL Server do que realmente reservou.

Isso éde jeito nenhumum problema; é feito de propósito e intencionalmente. O "problema" que você está vendo não existe, apenas o que você vê no Gerenciador de Tarefas é enganoso.

Se você parar o SQL Server, é claro que ele liberará toda a memória alocada, tanto aquela que é mostrada no Gerenciador de Tarefas quanto aquela (muito mais) que não é mostrada. Quando você reiniciá-lo, ele usará muito pouca memória: o uso aumentará novamente com o tempo, à medida que o SQL Server carrega dados na memória e os armazena em cache. Mas a maior parte desta memória, novamente, iránãoserá mostrado no Gerenciador de Tarefas, porque essa ferramenta específica não consegue vê-lo.

Também acrescentarei que se o SQL Server realmentenecessáriomemória, ele a alocaria de uma maneira diferente eentãoo Gerenciador de Tarefas mostraria isso; você veria 60 GB de memória usada pelo SQL Server se ele realmenteobrigatóriotanta memória, em vez de usá-la apenas para armazenamento em cache.

Responder2

Você está executando o SQL Server nesta máquina, então ele está fazendo o que o SQL Server faz - ele reserva (quase) toda a memória disponível no sistema operacional, para que, quando receber grandes consultas ou outras operações, não precise alocar RAM , já tem.

Você tem poucas opções.

  1. Aceite isso. Se você estiver executando apenas o SQL Server nesta máquina, ele estará funcionando conforme o esperado. Deixe isso em paz.
  2. Tampe. Se for necessário executar outras cargas de trabalho neste servidor, você poderá limitar a quantidade de RAM que o SQL reservará.

Eu absolutamente não faria a opção 2, a menos que o SQL nunca usasse a RAM que absorve. Você só saberá disso se estiver medindo contadores de desempenho SQL no nível do sistema operacional e visualizações de gerenciamento dinâmico no nível SQL.

Visão geral, que problema você está realmente tentando resolver? "Liberar memória" neste cenário é uma tarefa inútil, a menos que você saiba que está liberando-a para outra coisa usar. Você está tendo problemas de desempenho de SQL e, em caso afirmativo, como determinou que está com gargalos de RAM em vez de, por exemplo, design de índice incorreto ou consultas não otimizadas?

O que estou levando você éuse o monitoramento adequado para diagnosticar problemas de desempenho.Você precisa saber muito sobre SQL e bastante sobre Windows para fazer isso. Se você não for um DBA, contrate um ou faça um contrato, ou trabalhe com seu fornecedor de software se este for SQL para um produto adquirido. Se for algo que sua empresa escreveu sem um DBA, compre um.

https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

Por padrão, uma instância do SQL Server pode, com o tempo, consumir a maior parte da memória disponível do sistema operacional Windows no servidor. Depois que a memória for adquirida, ela não será liberada a menos que seja detectada pressão na memória. Isso ocorre por design e não indica um vazamento de memória no processo do SQL Server.

/Editar com base na sua edição:

Embora eu não seja administrador de sistema, parece-me que o SQL Server está usando pouca memória porque todo o resto está sendo consumido pelo Windows.

Você está quase definitivamente errado aqui. Como mencionei acima, o SQL Server alocará quase toda a RAM do sistema ao longo do tempo. A quantidade de RAM em uso pelo processo sqlserver.exe NÃO informa quanta RAM o SQL realmente alocou. Os DMVs e os contadores de desempenho lhe dirão isso.

Eu uso o SSMS para trabalhar com os bancos de dados e percebo em primeira mão como tudo é lento. Até mesmo coisas simples, como abrir o painel de tabelas para ver todas as minhas tabelas, demoram um pouco e às vezes expiram.

Não execute isso no servidor SQL, execute-o na sua estação de trabalho.

informação relacionada