- Cluster de várias instâncias do SQL Server 2008 R2 (no VMware vSphere 5.1)
- 2 nós, cada um executando 2 instâncias (4 instâncias no total)
- 16 GB de RAM por nó.
A única vez que as instâncias estão no mesmo nó é quando estou corrigindo o outro nó.
A recomendação de "memória máxima do servidor" de Brent Ozar é deixar o Windows com 4 GB ou 10%, o que for maior.
Como este é um cluster, como devo definir a memória máxima em cada nó? Devo tratar cada um como um servidor independente? Isso garantiria que a memória em cada nó não fosse desperdiçada. No entanto, em uma falha de nó, o total máximo de memória para todas as 4 instâncias excederia a memória do sistema do único nó. Isso causará algum problema no prazo até que o segundo nó seja recuperado? Preciso diminuir a configuração de memória máxima nas 4 instâncias até que o nó secundário seja recuperado? Ou o SQL Server é inteligente o suficiente para continuar funcionando (usando o arquivo de paginação, se necessário).
Você deve absolutamente aproveitar ao máximo o hardware quando estiver em uma configuração ideal e ajustar quando estiver no modo de manutenção. E sim, você terá um problema enquanto ambas (ou todas as quatro?) instâncias estiverem ativas no mesmo nó. Como um failover induz um início de serviço no nó agora ativo, você pode ajustar a memória máxima de cada servidor nesse evento usando um procedimento de inicialização. Eu escrevi sobre isso aqui, mas por um motivo diferente (failover para um nó com uma quantidade diferente de memória):
Basicamente, você só precisa verificar se as duas instâncias estão no mesmo nó (e isso exigirá que um servidor vinculado seja configurado em ambas as direções) e ajuste de acordo. Um exemplo muito rápido e completamente não testado com base na postagem do meu blog e supondo que haja apenas uma instância em cada nó por vez (a questão é um pouco ambígua se você tiver 2 instâncias no total ou 4):
Claro, crie-o novamente na outra instância, trocando o nome do servidor vinculado usado.
Isso fica um pouco mais complexo se você precisar ajustar, dependendo se está compartilhando o nó atual com 1, 2 ou 3 outras instâncias.
Observe que isso causará outros efeitos colaterais, como limpar o cache do plano (no caso de uma das instâncias não reiniciar ou falhar, caso em que o cache do plano estaria vazio de qualquer maneira), mas eles são indiscutivelmente melhores do que deixando ambas as instâncias presumindo que ainda têm 12 GB de memória para brincar - haverá muita discussão se ambas forem muito usadas.
Você também pode considerar outras opções, como maxdop global, afinidade NUMA/CPU, etc., dependendo da sensibilidade do sistema à quantidade de recursos disponíveis.
Resposta do Community Wiki coletando respostas parciais originalmente deixadas como comentários sobre a pergunta
Jon Seigel : Sim, vai, mas você não quer fazer isso . O melhor conselho que ouvi (também de Brent) é definir os máximos para o melhor cenário e os mínimos para o pior cenário.
Kin : Esses links irão ajudá-lo com o script:
Marca : Consulte Gerenciamento dinâmico de memória (TechNet)
Eu recomendo definir a memória máxima do servidor para o valor padrão de 2147483647, o que significa que o SQL Server gerenciará a memória dinamicamente.