Como obtenho o SQL Server para liberar sua memória?

19

Eu sei que o SQL gosta de RAM, mas o libera quando o Windows pergunta. Eu sei que é assim que o SQL deve funcionar. Mas eu tenho um Administrador do Windows que não está convencido de que o SQL realmente retornará a RAM, e neste servidor (virtual) em particular, o SQL não precisa de muito quando o Analysis Services estiver concluído, mas não há mais nada neste servidor que esteja incomodando pedir muito SQL.

Estou tentando garantir aos administradores do Windows que problemas com o ambiente virtual não são "porque o SQL está usando muita RAM", mas parece que não consigo persuadir o SQL a liberá-lo sem reiniciar o serviço.

Ao processar cubos, o serviço SQL leva 8 GB de RAM, mas como não há pressão, ele não libera muito disso durante um dia normal. Os caras do Windows gritam, e seria muito melhor ter o SQL liberando isso.

Eu não quero usar a configuração de memória máxima, porque eu realmente quero SQL para usar essa quantidade de RAM ao processar. Eu só quero que ele volte novamente.

É potencialmente uma duplicata de SQL Server que não libera memória e Recuperando memória do SQL Server , mas estou me perguntando se há uma resposta diferente. Esperar pelo Windows para recuperá-lo não vai convencer os caras do Windows aqui. Reiniciar o serviço é uma opção, mas eu realmente não sou fã dessa ideia.

Eu quero saber como fazer o Windows pedir de volta ...

    
por Rob Farley 01.02.2010 / 06:29

5 respostas

12

Acredito que sua única opção seja reiniciar o Serviço SQL ou executar um aplicativo que consuma muita memória para forçar o SQL a liberá-lo.

Eu gosto da sugestão do @Nick Kavadias: monitorar o contador de desempenho Memory: Page Faults / Sec para mostrar que o SQL não colocou a memória do sistema operacional sob pressão.

    
por 01.02.2010 / 06:31
5

Uma forma de mostrar a eles que isso fará com que o SQL Server consuma toda a memória. Em seguida, copie um arquivo enorme pela rede (grandes arquivos de backup do SQL funcionam muito bem para isso). Isso fará com que o cache do sistema seja preenchido e o Windows começará a solicitar a SQL por sua memória de volta. O SQL começará a retornar a memória de volta ao sistema operacional até atingir sua configuração mínima de memória.

(Desculpe não recebi a questão toda via Twitter, mais de 140 caracteres foram necessários, aparentemente.)

    
por 01.02.2010 / 08:48
2

Você menciona 'cubos', portanto não está claro se você está falando sobre o mecanismo AS ou o mecanismo relacional. O mecanismo relacional pode liberar memória sob demanda:

DBCC FREESYSTEMCACHE('<cache name>');

Onde "nome do cache" é obtido de sys.dm_os_memory_clerks . A especificação de DBCC FREESYSTEMCACHE menciona apenas os pools de governadores, mas muitos mais caches podem ser despejados, na verdade.

Mas se toda a memória for usada pelo conjunto de buffers, a remoção do conjunto de buffers inteiro resultará em uma tremenda degradação de desempenho e em uma carga enorme de I / O. Melhor deixar o SQL lidar com isso em si.

    
por 01.02.2010 / 09:22
2

Com os mecanismos AS e DS, você pode colocar um limite na memória para ficar abaixo de um limite seguro; isso é recomendado em 64 máquinas com muita RAM e / ou várias instâncias de SQL. Pelo menos o mecanismo de banco de dados, se você alterar o limite de memória para menos do que o uso atual, reduzirá a quantidade de memória na hora sem precisar reiniciar o serviço, embora não tenha certeza sobre o SSAS.

    
por 02.02.2010 / 18:53
0

O mais fácil que eu encontrei é ir para as propriedades da memória do servidor, inserir um valor menor, aplicar, aguardar alguns minutos e ajustar o backup da configuração.

Também descobrimos que o uso de memória do sql server pode realmente melhorar o desempenho do servidor, já que ele fornece mais memória RAM para o cache, etc.

    
por 08.02.2013 / 19:44