Como devo configurar a memória para várias instâncias do SQL Server?

9

Temos um conjunto de instâncias do SQL Server (2008 R2) que são executadas no mesmo servidor virtual. Cada instância representa um estágio em nosso ciclo de desenvolvimento (Dev / Test / Stage / etc.). Todas as instâncias precisam estar online a qualquer momento, mas o carregamento tende a ser isolado para uma instância por vez, dependendo de onde estamos no ciclo de vida do release.

O SQL Server parece pegar e reter qualquer quantidade de memória que definimos como o máximo. O que eu gostaria de saber se existe alguma maneira de configurar as instâncias para serem "inteligentes" sobre o consumo de memória, para que elas não impeçam a obtenção de memória quando necessário.

Phil Sandler
fonte
Se todas as instâncias precisarem estar online a qualquer momento, e você definir a memória máxima, o SQL Server não a liberará. Quando você diz .. load é isolado em uma instância por vez, isso significa que não há atividade em outras instâncias? Além disso, quantas instâncias você está executando em um virtual e qual é a configuração de CPU / Memória para o virtual?
Kin Shah
3
Escrevi sobre isso para clusters de várias instâncias, nos quais é necessário ajustar a memória no caso de um failover que leva a várias instâncias no mesmo nó . Você pode usar uma abordagem semelhante aqui, mas, em vez disso, execute procedimentos armazenados sob demanda que reconfiguram a memória com base nas necessidades atuais. Você não poderá definir cada instância para fazer isso automaticamente, a menos que você simplesmente as fixe permanentemente em uma memória máxima (e depois ajuste manualmente quando necessário).
Aaron Bertrand

Respostas:

7

O SQL Server usará o máximo de memória possível (praticamente) e é sempre aconselhável definir um limite para cada instância. A configuração padrão é 2147483647MB.

Dependendo do uso e das circunstâncias específicas, as configurações podem variar, mas normalmente um bom ponto de partida é definir a memória máxima do servidor entre 75 e 90%, dependendo da quantidade de RAM que você possui. Glenn Berry compartilha uma boa indicação há alguns anos AQUI .

Se você possui várias instâncias ativas em um servidor, pode ser necessário compartilhar os recursos entre elas; por exemplo, se você possui 32 GB de RAM com 3 instâncias, deve atribuir cerca de 9500 MB a cada instância. Quando você estiver usando apenas uma instância de cada vez, as outras não liberarão a RAM que estão usando. Você pode liberar a RAM deles interrompendo o serviço.

Quando você tem outros aplicativos / serviços em execução, pode ser necessário ajustar a quantidade de memória para acomodá-los.

RoKa
fonte