Temos muitos sistemas que possuem a mesma configuração
- Um servidor (virtual ou físico)
- Executando SQL Server (SQL) e SQL Server Analysis Server (AS)
- vários núcleos
- 16gb RAM
A cada noite, o SQL Server fará cerca de 2 a 3 horas de processamento, seguido de 2 a 3 horas de processamento AS. Então, ao longo do dia, apenas os AS são consultados.
Supondo que este seja um servidor dedicado e nenhum outro aplicativo seja motivo de preocupação, e que os dois conjuntos de processamento sejam completamente síncronos - sem sobreposições sempre um após o outro - como posso definir melhor os limites de memória do servidor SQL e AS.
O motivo da pergunta é que, se eu não definir um limite para o SQL, ele consumirá toda a memória possível. No entanto - meu entendimento é que o SQL abrirá mão dessa memória com prazer se:
não está usando e
Outro serviço/programa o solicita.
Portanto, de uma perspectiva lógica, acredito que permita que o SQL leve o quanto for necessário, mas não tenho tanta certeza sobre o AS' TotalMemoryLimit
. Não tenho certeza se o AS abrirá mão de sua memória. Na verdade, ler mais me leva a acreditar que é errado deixar levar tudo.
Isso significa que eu realmente preciso definir limites para ambos? Estou confuso sobre quais deveriam 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.
Eu acho que é viável forçar as mãos de ambos os serviços tendo uma tarefa ou serviço agendado que:
(a) antes do processamento noturno do SQL Server, desliga o serviço SSAS e aumenta a memória alocada para o SQL Server
(b) após o SQL Server ter feito seu processamento, 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 durante o processamento do SQL Server. Caso contrário, altere (a) de "desligar" para "reiniciar" ... desde que o SSAS não esteja fazendo nada ativamente enquanto o SQL Server está processando, não deve haver nenhuma preocupação de que ele roube a memória de volta.
Isso também pressupõe que você deseja que cada serviço sobreponha o consumo de memória e use a mesma memória em momentos diferentes - tenho certeza de que existem maneiras com afinidade / NUMA etc. em máquinas diferentes.
O SQL e o SSAS precisam ser executados ao mesmo tempo? Se não, você tem 100% de certeza?
Eu examinaria 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 para 12G e LowMemoryLimit para 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ê souber que o SQL e o SSAS não precisam ser executados ao mesmo tempo, tentaria a sugestão de Aaron de agendar trabalhos para ativar e desativar os serviços.