Eu dei uma olhada na troca de pilha de dba e não consegui encontrar uma resposta para esta, então aqui vai minha preocupação. Espero que alguém tenha feito alguma pesquisa sobre isso e possa fornecer uma resposta confiável.
Temos um cluster Ativo/Ativo do SQL Server em execução em 2 nós. SQLA é o nó padrão para uma instância com a outra (SQLB) como failover e vice-versa (nó padrão SQLB para a outra instância com SQLA como failover). Esses servidores estão sendo executados em caixas físicas com 64 GB de RAM
Temos que configurar "Max Server Memory" e existem 2 teorias por aqui
- Primeira teoria: siga a abordagem de Jonathan Kehayias praticamente universalmente aceita que, em poucas palavras, é assim "reserve 1 GB de RAM para o sistema operacional, 1 GB para cada 4 GB de RAM instalados de 4 a 16 GB e, em seguida, 1 GB para cada 8 GB de RAM instalados acima de 16 GB de RAM." Isso deixará cada caixa com uma configuração de memória máxima do servidor de 53 GB
- Segunda teoria: precisamos limitar a memória máxima do servidor a um valor que permita que o nó secundário cuide da outra instância se ocorrer um failover. Isso limita cada instância a um valor muito menor (cerca de 30 GB para que você tenha 30 GB x 2 + 4 GB para o sistema operacional = 64 GB)
À primeira vista, a primeira teoria seria desejável, pois dá a cada instância um espaço de memória muito maior, mas algumas pessoas (inclusive eu) não têm certeza do que acontece se você fizer failover e tiver 2 instâncias na mesma caixa, cada uma com uma memória máxima do servidor de 53 GB de RAM.
Você sabe qual é o caminho a seguir com esse cenário? alguma dessas duas abordagens está certa? ou você tem razões válidas para que uma terceira abordagem seja usada? você conhece algum post sério de blog ou white paper para apoiá-lo com evidências?
Obrigado a todos!
Observe que isso é chamado de cluster de várias instâncias não ativo na verdade. Sua preocupação está correta sobre o que aconteceria quando ambos os nós estivessem no mesmo nó; nesse caso, você precisa de um script dinâmico para identificar um failover e ajustar a memória máxima do servidor SQL Server de acordo.
Vamos nos concentrar em como definir a memória máxima do servidor corretamente quando ambos os nós estão sendo executados nos respectivos nós para isso, veja minha resposta no segmento SE Qual é a maneira sensata de calcular a memória máxima do servidor .
Agora, para o cenário em que o failover acontece e as duas instâncias estão no mesmo nó. Você tem que usar scripts dos seguintes recursos.
Use o script do PowerShell por meio do trabalho do agente de inicialização para equilibrar a memória entre duas instâncias em um cluster em um failover
Um tópico semelhante falando sobre como ajustar a memória para o cluster de várias instâncias
Agora, quando ambas as instâncias estão no mesmo nó, você precisa distribuir uniformemente a memória deixando o suficiente para o sistema operacional. Nesse cenário, 29 G para cada instância e 6 G para SO é o que eu diria que seria um bom valor. Como você tem 2 instâncias em execução, deixar alguns shows a mais para o sistema operacional realmente ajudaria.
Observe também que você deve sair imediatamente dessa situação, pois o SQL Server seria extremamente lento.