Comment équilibrer la mémoire SQL Server avec la mémoire SQL Server Analysis Services

11

Nous avons de nombreux systèmes qui ont la même configuration

  • Un serveur (virtuel ou physique)
  • Exécution de SQL Server (SQL) et SQL Server Analysis Server (AS)
  • plusieurs cœurs
  • 16 Go de RAM

Chaque nuit, le serveur SQL effectuera environ 2 à 3 heures de traitement, suivi de 2 à 3 heures de traitement AS. Puis tout au long de la journée, seuls les AS sont interrogés.

En supposant qu'il s'agit d'un serveur dédié, qu'aucune autre application n'est préoccupante et que les deux ensembles de traitement sont complètement synchrones - aucun chevauchement toujours l'un après l'autre - comment puis-je définir au mieux les limites de mémoire du serveur SQL et AS.

La raison de cette question est que si je ne fixe pas de limite pour SQL, elle récupérera toute la mémoire possible. Cependant - ma compréhension est que SQL renoncera volontiers à cette mémoire si:

  • Il ne l'utilise pas et

  • Un autre service / programme le demande.

Donc, d'un point de vue logique, je pense que SQL peut prendre autant qu'il le faut, mais je ne suis pas sûr de l'AS TotalMemoryLimit. Je ne sais pas si AS renoncera à sa mémoire. En fait, en lire plus me porte à croire qu'il est mal de le laisser tout prendre.

Est-ce à dire que j'ai besoin de fixer des limites pour les deux? Je ne sais pas quelles devraient être les meilleures pratiques et ce que nous devons mesurer en considérant que les processus ne se chevauchent pas.

J'espère que cela a du sens.

Preet Sangha
la source

Réponses:

9

Je pense qu'il est possible de forcer les mains des deux services en ayant une tâche ou un service planifié qui:

(a) avant le traitement nocturne de SQL Server, arrête le service SSAS et augmente la mémoire allouée à SQL Server

(b) une fois que SQL Server a effectué son traitement, réduit la mémoire maximale du serveur et redémarre SQL Server

(c) démarre SSAS

Cela suppose que SSAS n'est pas obligé d'être en ligne pendant le traitement de SQL Server. Sinon, changez (a) de "arrête" en "redémarre" ... tant que SSAS ne fait rien activement pendant le traitement de SQL Server, il ne devrait pas y avoir de souci de vol de mémoire.

Cela suppose également que vous souhaitez que chaque service chevauche la consommation de mémoire et utilise la même mémoire à des moments différents - je suis sûr qu'il existe des moyens avec affinité / NUMA, etc. pour séparer complètement leur espace d'opérations ou, dans le pire des cas, pour héberger les sur différentes machines.

Aaron Bertrand
la source
Je pense que nous devrions peut-être redémarrer SQL après le traitement SASS aussi - car il fait une grande lecture (entrepôt de données).
Preet Sangha
En fait, j'y pense - le redémarrage de SQL Server n'affectera-t-il pas réellement tout le traitement SQL?
Preet Sangha
1
@Preet oui, n'est-ce pas le but?
Aaron Bertrand
7

SQL et SSAS doivent-ils jamais s'exécuter en même temps? Si non, êtes-vous sûr à 100%?

Je chercherais à définir le paramètre de mémoire pour SQL et SSAS pour voir s'ils peuvent coopérer les uns avec les autres.

Nous devrons laisser de la mémoire pour le système d'exploitation, d'autres processus et des allocations de plusieurs pages. Peut-être la 4G?

Essayez quelque chose comme ça ...

Côté SQL, définissez Max Server Memory sur 12G et Min Server Memory sur 6G.

Côté SSAS, définissez TotalMemoryLimit sur 12G et LowMemoryLimit sur 6G.

N'activez pas non plus les pages verrouillées en mémoire.

Essayez quelques itérations, en ajustant ces chiffres vers le haut ou vers le bas.

Si cela ne fonctionne tout simplement pas et que vous savez pertinemment que SQL et SSAS n'ont pas besoin de s'exécuter en même temps, alors j'essaierais la suggestion d'Aaron de planifier des travaux pour désactiver et réactiver les services.

Steven
la source