Como equilibrar a memória do SQL Server com a memória do SQL Server Analysis Services

11

Temos muitos sistemas com a mesma configuração

  • Um servidor (virtual ou físico)
  • Executando o SQL Server (SQL) e o SQL Server Analysis Server (AS)
  • múltiplos núcleos
  • 16GB RAM

Todas as noites, o SQL Server realiza cerca de 2-3 horas de processamento, seguidas por 2-3 horas de processamento do AS. Ao longo do dia, apenas o AS é consultado.

Supondo que este seja um servidor dedicado e que nenhum outro aplicativo seja motivo de preocupação, e que os dois conjuntos de processamento sejam completamente síncronos - sem sobreposições sempre uma após a outra - como posso definir melhor os limites de memória do servidor SQL e AS.

O motivo para perguntar é que, se eu não definir um limite para o SQL, ele capturará toda a memória possível. No entanto - meu entendimento é que o SQL felizmente abandonará essa memória se:

  • Não está usando e

  • Outro serviço / programa solicita.

Então, de uma perspectiva lógica, acredito que permita que o SQL tome o quanto for necessário, mas não tenho tanta certeza sobre o AS ' TotalMemoryLimit. Não tenho certeza se o AS renunciará à sua memória. De fato, ler mais me leva a acreditar que é errado deixá-lo levar tudo.

Isso significa que eu realmente preciso definir limites para ambos? Estou confuso sobre quais devem ser as melhores práticas e o que precisamos medir considerando que os processos não se sobrepõem.

Espero que isso faça sentido.

Preet Sangha
fonte

Respostas:

9

Eu acho que é possível forçar as mãos dos dois serviços tendo uma tarefa agendada ou serviço que:

(a) antes do processamento noturno do SQL Server, encerra o serviço SSAS e aumenta a memória alocada para o SQL Server

(b) após o processamento do SQL Server, reduz a memória máxima do servidor e reinicia o SQL Server

(c) inicia o SSAS

Isso pressupõe que o SSAS não precisa estar online enquanto o SQL Server está processando. Caso contrário, altere (a) de "desliga" para "reinicia" ... enquanto o SSAS não estiver fazendo nada ativamente enquanto o SQL Server estiver processando, não haverá preocupação de que roube a memória novamente.

Isso também pressupõe que você deseja que cada serviço se sobreponha ao consumo de memória e use a mesma memória em momentos diferentes - tenho certeza de que existem maneiras com afinidade / NUMA etc. para segregar completamente o espaço de operações ou, no pior caso, hospedar em diferentes máquinas.

Aaron Bertrand
fonte
Eu acho que talvez devêssemos reiniciar o SQL após o processamento do SASS também - já que ele faz uma leitura grande (data warehouse).
Preet Sangha
Realmente pensando nisso - a reinicialização do servidor SQL não afetará todo o processamento do SQL?
Preet Sangha
1
@ Pre sim, não é esse o ponto?
Aaron Bertrand
7

O SQL e o SSAS precisam ser executados ao mesmo tempo? Se não, você tem 100% de certeza?

Gostaria de olhar para definir a configuração de memória para SQL e SSAS para ver se eles podem cooperar entre si.

Precisamos deixar um pouco de memória para o sistema operacional, outros processos e alocações de várias páginas. Talvez 4G?

Tente algo assim ...

No lado SQL, defina Max Server Memory como 12G e Min Server Memory como 6G.

No lado do SSAS, defina TotalMemoryLimit como 12G e LowMemoryLimit como 6G.

Além disso, não ative Bloquear páginas na memória.

Tente algumas iterações, ajustando esses números para cima ou para baixo.

Se isso simplesmente não funcionar, e você sabe que o SQL e o SSAS não precisam ser executados ao mesmo tempo, tentarei a sugestão de Aaron de agendar tarefas para ativar e desativar os serviços.

Steven
fonte