Comment dois-je configurer la mémoire pour plusieurs instances de SQL Server?

9

Nous avons un ensemble d'instances SQL Server (2008 R2) qui s'exécutent sur le même serveur virtuel. Chaque instance représente une étape de notre cycle de développement (Dev / Test / Stage / etc.). Les instances doivent toutes être en ligne à un moment donné, mais la charge a tendance à être isolée sur une seule instance à la fois, selon où nous en sommes dans le cycle de vie de la version.

SQL Server semble saisir et conserver la quantité de mémoire que nous avons définie comme max. Ce que j'aimerais savoir s'il existe un moyen de configurer les instances pour qu'elles soient «intelligentes» concernant la consommation de mémoire afin qu'elles ne s'empêchent pas mutuellement d'obtenir de la mémoire en cas de besoin.

Phil Sandler
la source
Si toutes les instances doivent être en ligne à un moment donné et que vous définissez la mémoire maximale, SQL Server ne la libérera pas. Lorsque vous dites que la charge est isolée sur une seule instance en même temps, cela signifie-t-il qu'il n'y a pas d'activité sur d'autres instances? En outre, combien d'instances vous exécutez sur un virtuel et quelle est la configuration CPU / mémoire pour le virtuel?
Kin Shah
3
J'ai écrit à ce sujet pour les clusters multi-instances, où vous devez ajuster la mémoire en cas de basculement conduisant à plusieurs instances sur le même nœud . Vous pouvez utiliser une approche similaire ici, mais exécuter à la place des procédures stockées à la demande qui reconfigurent la mémoire en fonction des besoins actuels. Vous ne pourrez pas configurer chaque instance pour le faire automatiquement, sauf si vous les fixez simplement à une mémoire maximale de façon permanente (puis ajustez manuellement lorsque vous en avez besoin).
Aaron Bertrand

Réponses:

7

SQL Server utilisera autant de mémoire que possible (à peu près), et il est toujours conseillé de définir une limite pour chaque instance. Le paramètre par défaut est 2147483647MB.

En fonction de votre utilisation et de vos propres circonstances, vos paramètres peuvent varier, mais normalement un bon point de départ est de définir la mémoire maximale du serveur entre 75 et 90%, en fonction de la quantité de RAM dont vous disposez. Glenn Berry partage une bonne indication il y a quelques années ICI .

Si vous avez plusieurs instances actives sur un serveur, vous devrez peut-être partager les ressources entre elles, par exemple si vous avez 32 Go de RAM avec 3 instances, vous devez affecter environ 9500 Mo à chaque instance. Lorsque vous utilisez une seule instance à la fois, les autres ne libéreront pas la RAM qu'ils utilisent. Vous pouvez libérer leur RAM en arrêtant le service.

Lorsque d'autres applications / services sont en cours d'exécution, la quantité de mémoire peut devoir être ajustée pour les accueillir.

RoKa
la source