Como liberar memória do SQL Server?

9

Eu tenho uma instalação de sandbox do SQL Server no meu computador local. Eu configurei a memória que a instância do SQL Server pode usar para 1000 mb. Ao executar uma operação intensiva, o uso da memória aumenta até 1000 mb. Quando a operação termina, o SQL Server ainda está mantendo a memória. Como liberar essa reserva de memória?

jrara
fonte
2
Quais são suas configuraçõesmin server memory e ? Depois que o SQL Server reserva o mínimo que você especificar, ele nunca será liberado, a menos que você altere a configuração ou rejeite a instância. Como James observou, se ele reserva mais do que o mínimo especificado, em teoria, ele deve ser liberado quando não for necessário e houver pressão de memória na máquina. max server memory
Nick Chammas
@ Nick: memória mínima do servidor: 0 (MB); memória máxima do servidor: 600 (MB).
jrara

Respostas:

13

Pare / inicie o serviço, nada mais liberará a memória de volta para o sistema operacional.

Obviamente, não é algo que você gostaria de fazer com um servidor operacional, mas perfeitamente razoável para uma sandbox local. Com três instâncias diferentes no meu laptop, é a única maneira viável.

Edite o seguinte comentário de @ Nick.

Como James observou, se ele reserva mais do que o mínimo que você especificar, em teoria ele deve ser liberado quando não for necessário e houver pressão de memória na máquina.

Qual é a sua definição de "não precisa disso"? Depois que o buffer pool estiver cheio, ele não será descartado até que elas sejam desfavorecidas por outras páginas serem trazidas. Se você quiser recuperar a memória imediatamente, como é o caso do @jrara, é necessário parar /começar.

Mark Storey-Smith
fonte
2
Por Microsoft : "No Windows Server 2003, o SQL Server usa a API de notificação de memória QueryMemoryResourceNotificationpara determinar quando o pool de buffers pode alocar memória e liberar memória". Portanto, se você estiver preocupado apenas com a fome de outros aplicativos que talvez precisem mais de memória, o SQL Server, em teoria, liberará memória que não é necessária quando o Windows solicitar. O único motivo pelo qual você deve forçar uma liberação reiniciando a instância é se esse mecanismo não estiver funcionando como projetado ou se as configurações de memória mín. / Máx. Estiverem incorretas.
Nick Chammas 11/11
Outro artigo útil do msdn para esclarecer sobre este msdn.microsoft.com/en-us/library/ms178145.aspx . Enquanto o SQL Server atingir sua configuração mínima de memória do servidor, ele liberará memória em resposta a notificações de pouca memória do sistema operacional. Na minha experiência, tem que ser bastante extremo para que isso aconteça.
georgeb
Precisamente @georgeb_dba, não o abandonará prontamente. Portanto, pare / inicie e recupere imediatamente a memória limitada do seu laptop.
Mark-Storey-Smith #
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

liberará a piscina.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Observações

A execução de DBCC FREESYSTEMCACHE limpa o cache do plano para a instância do SQL Server. A limpeza do cache do plano causa uma recompilação de todos os planos de execução subsequentes e pode causar uma diminuição repentina e temporária no desempenho da consulta. Para cada cache de armazenamento limpo no cache do plano, o log de erros do SQL Server conterá a seguinte mensagem informativa: "O SQL Server encontrou% d ocorrência (s) de liberação do cacheestore para o cache% '% s' (parte do cache do plano) devido a Operações 'DBCC FREEPROCCACHE' ou 'DBCC FREESYSTEMCACHE'. " Essa mensagem é registrada a cada cinco minutos, desde que o cache seja liberado dentro desse intervalo de tempo.

Daniel Decasse
fonte
11
certeza de que isso não reduzirá a quantidade de memória que o SQL reservou no nível do SO #
Greg
3

Ele abrirá a memória que não está sendo usada automaticamente, pois outros aplicativos tentam confirmar.

JamesRyan
fonte