Como controlar o uso excessivo de ram pelo SQL Server?

13

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?


fonte
1
Por padrão, o SQL usará o máximo de RAM possível para maximizar seu desempenho, isso é bom - significa que ele está armazenando em cache consultas e resultados comuns para tornar seu aplicativo mais rápido. Ele usará apenas a RAM até o limite em que o SO reporte a paginação. Você pode substituir esse comportamento. Veja esta documentação MS: Como ajustar uso de memória usando as opções de configuração no SQL Server Este também pode ser útil: Como determinar as definições de configuração do SQL Server adequadas
4
NÃO é um problema - é o comportamento padrão e projetado para o SQL Server !! E sim - reiniciar o processo do SQL Server é uma péssima idéia ... O SQL Server armazena em cache o máximo de dados e páginas de memória possível - está otimizando o desempenho geral do sistema dessa maneira. Essa é a razão pela qual uma máquina do SQL Server sempre deve ser um servidor dedicado - sem fazer nada além do SQL Server.
marc_s
Sim, eu entendi. Foi projetado dessa maneira. Mas quando o servidor sql usa grande parte da memória, ele fica lento e causa o tempo limite dos relatórios. Então, eu quero impedir que o servidor sql use memória limitada.
4
Na verdade, se o SQL Server estiver usando o máximo de memória possível, eu diria que isso tornaria menos provável a dificuldade em fornecer relatórios. É quando você restringe artificialmente o SQL Server (ou coloca muitas instâncias em uma caixa que competem por recursos) onde você vê problemas devido a concessões de memória e outros problemas.
Aaron Bertrand
Mas eu me pergunto por que de repente começou a mostrar os relatórios bem depois de reiniciar o serviço do servidor sql. Pode ser que muitos clientes estejam usando o aplicativo devido ao qual os relatórios não foram exibidos?

Respostas:

14

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.

mrdenny
fonte