Na minha dev box, tenho meu SQL Server configurado com uma quantidade máxima de memória alta (8 GB de 16 GB). Isso é necessário para muitas tarefas de desenvolvimento.
Às vezes eu quero minha memória de volta, no entanto. Não quero deixar 8 GB consumidos permanentemente.
Qual é uma boa maneira de fazer com que o SQL Server libere repentinamente toda a memória para o sistema operacional?
DBCC DROPCLEANBUFFERS
não faz isso . Ele apenas marca buffers limpos como disponíveis.
Reiniciar o SQL Server é um problema porque isso faz com que uma recuperação de banco de dados de 1 minuto seja executada devido a este bug/recurso: Parar o serviço SQL Server faz com que os bancos de dados não sejam desligados corretamente (por favor, vote nesse item de conexão; parece um bug grave) .
Eu aumento e diminuo rotineiramente a opção de configuração de memória máxima do servidor para as instâncias do SQL Server 2005-2016 em execução no meu laptop (com páginas de bloqueio na memória habilitadas). Nunca me causou problemas, e a memória sempre parece ser liberada rapidamente. Também paro, inicio e reinicio instâncias conforme acho que preciso delas (usando o SQL Server Configuration Manager, que mantenho aberto).
No que diz respeito ao ponto de verificação, como você configura isso depende da versão . O checkpoint manual com uma meta de duração está disponível desde 2005 (embora seja inegavelmente mais eficaz em versões posteriores).
A execução de um ponto de verificação manual
<duration>
por banco de dados antes do desligamento ajudará a distribuir a carga de E/S e reduzir o tempo de recuperação na inicialização. O ponto de verificação gerenciado também reduzirá a E/S necessária quando uma redução de memória for solicitada, pois haverá menos páginas sujas para gravar no armazenamento persistente. Não há nenhum benefício específico em descartar buffers limpos antes de reduzir a configuração de memória máxima que notei.Não usar 'bloquear páginas na memória' pode aumentar a taxa na qual o SQL Server pode liberar memória, mas confio nisso para evitar paginar a memória do SQL Server para o disco. Se você não precisar dele para essa finalidade, poderá optar por executar sem ele.
Como você disse que deseja liberar memória na máquina DEV para poder usar a consulta abaixo
Mas observe os comandos acima
won't cause SQL Server process to release memory committed it would just clear caches
. Isso é o que você está experimentando.Depois de executar a consulta acima, você pode alterar a memória máxima do servidor SQL Server para um valor mais baixo (pode ser 4-5G no seu caso), isso forçará os processos do SQL Server a liberar memória e, assim, reduzir o consumo de memória novamente. máquina DEV. Alterar a memória máxima do servidor não requer reinicialização. A outra coisa é reiniciar o serviço do SQL Server, isso definitivamente limpará os caches e a memória mantida pelo processo do SQL Server seria liberada. Mas depois de reiniciar o SQL Server, pode, depois de algum tempo, recuperar toda a memória.