O servidor de banco de dados que estou usando está executando 6 instâncias diferentes do SQL Server. Possui 48 GB de RAM. E um deles está consumindo mais de 10 GB de RAM, o consumo total é de 20 GB por enquanto. O consumo de RAM está crescendo continuamente. Alguns dias antes, ele estava usando mais de 40 GB de RAM e o servidor estava respondendo muito lentamente. O aplicativo mostra os problemas de falha ao salvar dados.
Então, eu reiniciei os serviços do SQL Server.
Assim que os serviços foram reiniciados, o uso caiu para 4 GB, mas agora está crescendo. E estou preocupado que ele cresça até 40 GB em 4 ou 5 dias e torne o servidor lento.
A reinicialização do serviço não é a boa opção, eu acho.
Também descobri de diferentes fontes que podemos definir o tamanho máximo de uso de memória para o SQL Server. E não tenho certeza se isso vai ajudar ou não. Não posso testar isso porque o servidor está usando o banco de dados de produção e seria um risco se o serviço parar ao modificar a configuração no SQL Server.
Alguém pode ajudar nesse problema?
Respostas:
Isso é por design. O SQL Server deve usar toda a memória disponível, pois está armazenando cada vez mais dados na memória, para que não precise voltar ao disco para obter a mesma memória repetidamente.
Se você precisar limitar a quantidade de memória que uma única instância do SQL Server está usando, faça isso no SQL Server Management Studio clicando com o botão direito do mouse no nome da instância no Pesquisador de Objetos e selecionando propriedades. Em seguida, selecione a guia memória e defina a quantidade máxima de memória que o SQL Server poderá usar. Agora, isso não vai limitar todos os aspectos do SQL Server a essa quantidade de memória. Isso controla apenas o buffer pool e o cache do plano de execução. Coisas como CLR, Texto completo, a memória real usada pelos arquivos exe do SQL Server, SQL Agent, procedimentos armazenados estendidos etc. não são controlados por essa configuração. No entanto, essas outras coisas normalmente não precisam de muita memória, são o buffer pool e o cache do plano de execução que precisam da maior parte da memória.
Se você definir essa configuração em uma instância, convém defini-la em todas as instâncias para que elas não se interajam.
fonte