[SSAS] Les réglages de mémoire (LowMemoryLimit, TotalMemoryLimit…)

Quelques rappels je pense utiles sur le paramétrage et le monitoring de cette chose si mal connue qu’est la mémoire sous Analysis Services. L’information existe certes mais elle est suffisament éparse pour perdre quelque peu le débutant et beaucoup de contre-vérités subsistent.


Les réglages serveur

Il existe deux « limites » de mémoire pour Analysis Services, réglables dans les propriétés serveur. La LowMemoryLimit et la TotalMemoryLimit – aussi appellée improprement mais peut être plus justement HighMemoryLimit dans certains ouvrages…

Leur valeur est soit un pourcentage de la mémoire du système (par défaut LML=65% et HML=80%) si elle est en dessous de 100, une valeur absolue en octets sinon.

Pour vérifier leur valeur effective, il suffit de regarder les compteurs MSAS2008:Memory.MemoryLimitLowKB et MSAS2008:Memory.MemoryLimitHighKB.

Effet de ces limites

Ce ne sont pas des limites – le serveur peut allègrement les dépasser pour exécuter une requête ou un processing – mais plutôt des caps, des niveaux qui déterminent le mode de nettoyage à appliquer par le serveur sur sa mémoire de travail. Il est donc fréquent de voir des serveur AS dépassant la HML.

Dans une situation normale, en dessous de LowMemoryLimit, le serveur ne nettoie rien ou presque. Lorsque la mémoire utilisée (MSAS2008:Memory.MemoryUsageKB) dépasse la LowMemoryLimit le serveur passe en mode LowMemoryPressure ce qui a pour effet de démarrer le nettoyeur pour supprimer certaines ressources.

Ressources supprimables par le nettoyeur

Grosso modo le nettoyeur va surtout s’occuper supprimer du cache. Il applique un algorithme de sélection qui va effacer les éléments les moins requêtés et les plus faciles à supprimer. Pour savoir si cette tâche est en cours il est possible de voir dans PerfMon le compteur MSAS2008:Memory.CleanerCurrentPrice dépasser 0.

Et quand on dépasse la HighMemoryLimit?

La le nettoyeur passe en mode aggressif (le serveur est alors en HighMemoryPressure) il supprime à tout va tout ce qui est supprimable donc basiquement le cache. Si cela ne suffit pas à descendre en dessous de HML- ce qui est alors souvent le cas – il commence à demander l’arrêt des processings et requêtes en cours car il ne possède pas d’accès direct à leur mémoire et ne peut donc les « nettoyer ».
Il s’agit alors de la seule solution restante pour redescendre dans de saines limites.

C’est la raison du fameux message:
Server: The operation has been cancelled due to memory pressure.

Et qu’est ce c’est que ce « PreAllocate »?

PreAllocate est un setting d’Analysis Services conçu pour pallier à des déficiences d’allocation de mémoire de Windows Server 2003. Basiquement il s’agit de préallouer un volume de mémoire fixé à SSAS pour éviter les lenteurs d’allocation. Il ne sert plus à rien – voire même empire la situation – sous Windows Server 2008 (voir à ce sujet ce très bon bench).

Pour finir pour savoir si vos requête arrivent bien à mettre et à taper en cache – ce qui veut dire que tout fonctionne bien finalement… – rien d ‘équivalent à l’excellentissime MDX Studio. Et si vous êtes plus intéressés par le sujet mémoire, un petit coup d’oeil au PerformanceGuide ne fait jamais de mal.

A bientôt!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s