Eu sei que o SQL gosta de RAM, mas a libera quando o Windows pede. 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 retornará a RAM e, nesse servidor (virtual) específico, o SQL não precisará de muito quando o Analysis Services for concluído, mas não há mais nada nesse servidor que esteja se preocupando em peça muito ao SQL.
Portanto, estou tentando garantir aos administradores do Windows que os problemas com o ambiente virtual não são "porque o SQL está usando muita RAM", mas não consigo convencer o SQL a liberá-lo sem reiniciar o serviço.
Ao processar cubos, o serviço SQL consome 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.
Não quero usar a configuração de memória máxima, porque realmente quero que o SQL use tanta RAM ao processar. Eu só quero voltar novamente depois.
É potencialmente uma duplicata do SQL Server não liberando memória e Recuperando memória do SQL Server , mas estou me perguntando se há uma resposta diferente. Esperar pela recuperação do Windows, 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.
Quero saber como obter o Windows para solicitá-lo de volta ...
fonte
sp_configure
geralmente é algo que você deve definir uma vez e deixar em paz.Respostas:
Acredito que sua única opção é reiniciar o serviço SQL ou executar um aplicativo que consome muita memória para forçar o SQL a liberá-lo.
Gosto da sugestão de @Nick Kavadias: monitore o contador de desempenho Memória: falhas de página / segundo para mostrar que o SQL não colocou a memória do sistema operacional sob pressão.
fonte
Uma maneira de mostrar a eles que isso é feito é ter o SQL Server consumindo toda a memória. Em seguida, copie um arquivo enorme pela rede (arquivos grandes 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 sua memória ao SQL. 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 pergunta inteira via Twitter, aparentemente eram necessários mais de 140 caracteres.)
fonte
Você menciona 'cubos', para que não fique claro se você está falando sobre o mecanismo AS ou o mecanismo relacional. O mecanismo relacional pode liberar memória sob demanda:
Onde 'cache name' é obtido de sys.dm_os_memory_clerks . As especificações do DBCC FREESYSTEMCACHE mencionam apenas conjuntos de governadores, mas muitos mais caches podem ser despejados.
Mas se toda a memória for usada pelo buffer pool, despejar todo o buffer pool resultará em uma enorme degradação do desempenho e em uma enorme carga de E / S. Melhor deixar o SQL lidar com isso sozinho.
fonte
Com os mecanismos AS e DS, você pode colocar um limite na memória para que eles fiquem abaixo de um limite seguro; isso é recomendado em máquinas de 64 bits com muita RAM e / ou várias instâncias do SQL. Pelo menos para 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 instantânea sem ter que reiniciar o serviço, embora não tenha certeza sobre o SSAS.
fonte
O mais fácil que encontrei é acessar as propriedades da memória do servidor, inserir um valor menor, aplicar, aguardar alguns minutos e ajustar a configuração novamente.
Também descobrimos que o uso otimizado da memória dos servidores sql pode realmente melhorar o desempenho do servidor, pois oferece mais RAM para armazenamento em cache no Windows, etc.
fonte