Il s'agit d'un article que j'ai publié initialement en novembre 2012 dans la Newsletter du support SAS France.
La mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. est une ressource critique car elle conditionne les temps de traitements. Différentes options SAS sont disponibles pour utiliser au mieux la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. de la machine. Cet article vous les présente, et propose une illustration des résultats obtenus. Les résultats présentés dans cet article ont été réalisés avec SAS 9.3, sur une machine Solaris.
Introduction
D’un point de vue système, ajuster la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. est l’une des principales méthodes pour augmenter ou réduire les performances d’un processus. Lors de l’installation, SAS® Foundation est paramétré par rapport à un fonctionnement standard. Mais vous pouvez être amené à travailler sur des volumes importants de données et, dans ce cas, l’utilisation de certaines procédures très consommatrices en termes de ressources peut devenir problématique, d’autant plus si vous êtes en environnement multi-utilisateurs. En effet, par défaut, la valeur de l’option MEMSIZE est positionnée à 512 Mo. Cela signifie que toute sessionInstance de connexion active entre un client et le serveur CAS (Cloud Analytic Services), isolant les ressources, les bibliothèques et les traitements d'un utilisateur au sein de SAS Viya. SAS ne pourra pas allouer plus de 512 Mo de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. sur le serveur.

Le graphique ci-contre présente l’évolution de la consommation mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. d’un processus SAS durant l’exécution d’une procédure consommatrice (PROC MEANS, PROC SORT). Si le traitement est trop consommateur en mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya., on note que la consommation mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. chute à 512 Mo. Cela se traduit par le message suivant dans SAS® Entreprise Guide® par ex. :

FATAL: Insufficient memory to execute DATA stepBloc de programmation SAS itératif utilisé pour lire, transformer et manipuler des données ligne par ligne afin de créer des tables de sortie personnalisées et calculer de nouvelles variables. program. Aborted during the EXECUTION phase.
Il est donc nécessaire de paramétrer SAS d’une façon appropriée au travail effectué. Les principaux paramètres liés à l’utilisation de la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. sur SAS sont les suivants :
- Memsize
- Sortsize
- Realmemsize
Memsize
MEMSIZE représente la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. allouée au processus SAS. Au démarrage, le processus ne consommera que quelques méga-octets (moins de 70 Mo). La valeur de MEMSIZE est donc la valeur maximale que pourra s’allouer le processus.
Il est possible de positionner cette valeur à MAX. Avec cette valeur, MEMSIZE est positionné à 80% de la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. physique du serveur. Cependant, dans une architecture de type Business Analytics, positionner MEMSIZE à MAX pour le Workspace Server n’est pas judicieux : si plusieurs sessions sont lancées sur le même serveur (ce qui est un fonctionnement normal lorsque l’on utilise un serveur) et que chaque sessionInstance de connexion active entre un client et le serveur CAS (Cloud Analytic Services), isolant les ressources, les bibliothèques et les traitements d'un utilisateur au sein de SAS Viya. peut potentiellement utiliser 80% de la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. physique, cela risque de poser des problèmes de ressources systèmes. Dans cet exemple, le serveur dispose de 16 Go de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya..
La courbe ci-dessous présente la consommation mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. lorsque MEMSIZE est positionné à 10 Go :


Pour illustrer ce problème, nous pouvons lancer deux sessions SAS consommatrices. Le graphique ci-dessous présente la consommation de deux sessions SAS (consommation mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. d’un Workspace server). La courbe verte présente la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. disponible sur le serveur.

La solution consiste donc, comme évoqué précédemment, à limiter la valeur du MEMSIZE. Cela pourra potentiellement pénaliser certains traitements trop consommateurs, mais préservera l’intégrité du système.
Sortsize
L’option SORTSIZE représente la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. nécessaire à la procédure Sort. Cette valeur est par défaut positionnée à 256 Mo.
Si la valeur de SORTSIZE est insuffisante, le système SAS va créer des fichiers temporaires sur le disque dur (Cf Graphique 2 - Statistiques I/O). Du fait d’un nombre de lectures/écritures sur le disque plus important, le temps de traitement augmente également.
L’exemple ci-dessous illustre ces propos :

Nous avons effectué deux runs de tests. La valeur de l’option SORTSIZE a été modifiée entre le run 1 et le run 2


Realmemsize
L’option REALMEMSIZE permet de spécifier la quantité de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. physique que le processus SAS peut s’allouer. De nombreuses procédures SAS utilisent l’option REALMEMSIZE afin de déterminer la quantité de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. à allouer et utiliser sans induire une trop grande consommation de Swap.
L'option système REALMEMSIZE fixe une limite supérieure à ne pas dépasser sur la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. virtuelle pour les procédures qui peuvent utiliser à la fois la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. physique et le Swap, telles que la PROC MEANS ou la PROC SORT. Cette limite supérieure permet d'éviter de crash de la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. virtuelle (et du système d’exploitation).
L'option REALMEMSIZE ne doit jamais être supérieure à la quantité de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. réelle.
En revanche, l’option MEMSIZE place une limite de la quantité totale de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. virtuelle que le processus peut allouer dynamiquement à tout moment.
Le système d’exploitation commence la pagination lorsque la quantité de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. virtuelle nécessaire est supérieure à la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. réelle disponible. Pour éviter la pagination et les problèmes de performance associés, REALMEMSIZE et MEMSIZE doivent être réglés sur un sous-ensemble de la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. réelle.
Les deux exemples ci-dessous sont une illustration de ce mécanisme :
Le premier test consiste à positionner les options suivantes : - memsize 10 Go - sortsize 2 Go - realmemsize 1 Go Bien que la valeur de SORTSIZE soit définie à 2 Go, la consommation maximale du processus est de 1 Go.

Dans un second test, et avec les options suivantes : - memsize 512 Mo - sortsize 1 Go - realmemsize 1 Go On constate que la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. utilisée ne dépasse pas 420 Mo.
En effet, la valeur de SORTSIZE sera au maximum égale à la valeur de l’option REALMEMSIZE, elle-même inférieure à la valeur de MEMSIZE. Il faut que MEMSIZE soit inférieur à la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. virtuelle totale du serveur (RAM + Swap)

Bonnes pratiques
Où positionner les options ?
Tout dépend de l’architecture, et de la nature des options (certaines sont déclarées dans le fichier de configuration, mais peuvent également l’être dans le fichier autoexec, ou dans un programme). Dans le cadre d’une utilisation de SAS via SAS Enterprise Guide, il est nécessaire de modifier le fichier de configuration du Workspace server, c’est-à-dire config/Lev1/SASApp/WorkspaceServer/ sasv9_usermods.cfg.

Comment connaître la consommation mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. d’une procédure ou d’une étape DATA ?
L’option Fullstimer permet d’afficher dans le journal, après chaque procédure, la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. consommée par le traitement. En cas d’interruption incorrecte du traitement, elle donne la taille mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. maximum qui a pu être allouée.
Par défaut, si « options Fullstimer; » n’a pas été exécuté dans votre code SAS, l’affichage simple suivant apparaîtra dans le journal :

En positionnant l’option FULLSTIMER, le système SAS va collecter des statistiques liées aux performances pour chaque étape :

Comment connaître les valeurs de la sessionInstance de connexion active entre un client et le serveur CAS (Cloud Analytic Services), isolant les ressources, les bibliothèques et les traitements d'un utilisateur au sein de SAS Viya. SAS en cours ?
Il faut exécuter le code ci-dessous depuis la sessionInstance de connexion active entre un client et le serveur CAS (Cloud Analytic Services), isolant les ressources, les bibliothèques et les traitements d'un utilisateur au sein de SAS Viya. SAS adéquate (depuis un workspace server, un stored process server…) :
Conclusion
Comme nous l’avons vu dans cet article, plusieurs paramètres sont à prendre en compte au moment de spécifier les valeurs de chaque option.
Avant de définir les valeurs que vous souhaitez affecter aux différentes options, posez-vous les bonnes questions :
- Combien d’utilisateurs, ou plus précisément combien de processus SAS sont susceptibles de fonctionner simultanément ?
- Pour chaque processus, quelle est la consommation mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. maximale nécessaire (reportée par l’option FULLSTIMER ). En effet, la taille des données en entrée (tables SAS) influe sur la quantité de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. nécessaire, mais la nature des traitements et procédures utilisées joue aussi un rôle central.
Cela peut paraître simple mais dans la pratique trouver la bonne valeur est un exercice compliqué. J’ajouterais enfin que l’optimisation des performances systèmes n’est pas uniquement liée à la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.. En effet, il est important de prendre également en compte la gestion des I/O et les performances du processeur.






