Mesurez, analysez, optimisez : Le guide complet de FULLSTIMER pour SAS

Cet article en deux mots :

Maîtrisez FULLSTIMER, l'outil de monitoring indispensable pour disséquer la performance de vos traitements SAS. Ce guide technique vous apprend à décoder les métriques CPU, RAM et I/O afin de diagnostiquer précisément vos goulots d'étranglement et de valider l'impact réel de vos optimisations de code.

FULLSTIMER, c'est l'outil de monitoring ultime pour votre SAS ! Un véritable tableau de bord de la performance qui enregistre les pulsations CPU, la consommation RAM et les transferts d'octets (I/O) de chaque DATA et PROC. Pensez-y comme un 'cat /proc/stats' interne à votre SAS, mais avec un récap' stylé à la sortie. On va décortiquer ensemble les métriques les plus 'mainstream' chez les utilisateurs d'UNIX/Linux et Windows, histoire de parler le même langage binaire !

Activation de FULLSTIMER

L'activation de FULLSTIMER est simple et se fait généralement via l'instruction OPTIONS : OPTIONS FULLSTIMER;. Elle peut également être activée dans les fichiers de configuration SAS, lors de l'invocation de SAS, ou via SAS Environment Manager pour les environnements gérés. Pour la désactiver et revenir au comportement par défaut, on utilise OPTIONS NOFULLSTIMER;. Il faut être conscient des interactions potentielles : l'option NONOTES, qui supprime les messages "NOTE:" du journal, supprimera également la sortie de FULLSTIMER. Si les options STIMER et FULLSTIMER sont toutes deux activées, ce sont généralement les statistiques plus détaillées de FULLSTIMER qui sont écrites dans le journal. 

Comprendre les Statistiques FULLSTIMER : Métriques Clés

FULLSTIMER fournit une richesse d'informations. Voici une description détaillée des métriques les plus couramment rapportées, basée sur la documentation et les articles communautaires : 

Real Time (Temps Réel) : C'est le temps écoulé "au mur" (wall clock time) pour l'exécution de l'étape ou du travail SAS. C'est le temps d'attente perçu par l'utilisateur. Cette mesure est fortement dépendante de la charge globale du système et de la contention pour les ressources (CPU, I/O, 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.
). Si le système est très sollicité, le temps réel peut augmenter considérablement car le processus SAS doit attendre que les ressources deviennent disponibles. 

User CPU Time (Temps CPU Utilisateur) : Représente le temps pendant lequel le processeur (CPU) a activement exécuté le code du programme SAS lui-même. Cela inclut le code écrit par l'utilisateur ainsi que le code interne des procédures et fonctions SAS, mais exclut le temps passé à attendre ou à exécuter des appels directs au système d'exploitation. 

System CPU Time (Temps CPU Système) : Désigne le temps CPU consacré à l'exécution des tâches du système d'exploitation effectuées pour le compte du processus SAS. Cela inclut, par exemple, la gestion des requêtes d'entrée/sortie, l'allocation 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.
, ou d'autres services du noyau nécessaires au fonctionnement du programme SAS. User CPU Time et System CPU Time sont généralement mutuellement exclusifs. 

(Total) CPU Time (Temps CPU Total) : Souvent rapporté par l'option STIMER (voir section 3.5), c'est simplement la somme du User CPU Time et du System CPU Time. Une note importante : sur les systèmes multi-processeurs où SAS peut utiliser plusieurs threadsUnités d'exécution parallèles au sein d'un processus CAS. Ils permettent de distribuer simultanément les calculs sur plusieurs cœurs CPU pour accélérer le traitement des données dans SAS Viya. simultanément (par exemple, dans certaines procédures), le Temps CPU Total peut légitimement dépasser le Temps Réel. Si deux threadsUnités d'exécution parallèles au sein d'un processus CAS. Ils permettent de distribuer simultanément les calculs sur plusieurs cœurs CPU pour accélérer le traitement des données dans SAS Viya. tournent pendant 1 seconde chacun sur deux CPU distincts, cela consomme 2 secondes de CPU en seulement 1 seconde de temps réel. 

Memory (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.
) :
Indique 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.
requise ou allouée par l'étape spécifique en cours d'exécution. Il est crucial de comprendre que cela ne représente pas la consommation 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.
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 entière, car cela n'inclut pas 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 par les composants SAS généraux (gestionnaire SAS, etc.). 

OS Memory (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.
SE) :
Représente la quantité maximale 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.
du système d'exploitation disponible pour SAS ou demandée par SAS pendant l'étape ou 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. (la définition précise peut légèrement varier selon l'OS et la version de la documentation). Dans certains contextes , elle peut refléter le pic d'utilisation 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.
pour l'ensemble du processus. 

Page Faults (Défauts de Page) : Compte le nombre de fois où le processus SAS a tenté d'accéder à une page 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.
qui n'était pas présente 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.
vive (RAM) et a donc nécessité une opération d'I/O sur disque pour la récupérer. Un nombre élevé de défauts de page ("hard page faults") est un indicateur de pression 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.
et peut sérieusement dégrader les performances en raison de la lenteur de l'accès disque. 

Page Reclaims (Récupérations de Page) : Compte le nombre de fois où une page 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 a été trouvée dans une liste de pages prêtes à être réallouées (par exemple, un cache 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.
) sans nécessiter d'I/O disque. Un nombre élevé de récupérations ("soft page faults") est généralement le signe d'une gestion 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.
efficace. 

Page Swaps (Échanges de Pages) : Indique le nombre de fois où le processus (ou une partie de celui-ci) a été déplacé 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.
principale vers l'espace d'échange (swap) sur le disque. Des valeurs non nulles, surtout si elles sont élevées, sont un signe de forte pression 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.
et impactent lourdement les performances. 

Voluntary Context Switches (Commutations de Contexte Volontaires) : Compte le nombre de fois où le processus SAS a volontairement cédé le contrôle du CPU avant la fin de son temps d'exécution alloué. Cela se produit typiquement lorsqu'il doit attendre une ressource externe, le plus souvent une opération d'I/O (lecture ou écriture sur disque). Un certain nombre est normal, mais des valeurs très élevées peuvent suggérer des goulots d'étranglement I/O. 

Involuntary Context Switches (Commutations de Contexte Involontaires) : Compte le nombre de fois où le système d'exploitation a forcé le processus SAS à céder le contrôle du CPU. Cela arrive généralement lorsque son temps d'exécution alloué (time slice) a expiré, ou lorsqu'un processus de priorité supérieure a besoin du CPU. Un nombre élevé et constant de commutations involontaires suggère une forte contention pour le CPU, indiquant que le système est globalement surchargé. 

Block Input/Output Operations (Opérations d'E/S par Bloc) : Compte le nombre d'opérations physiques de lecture (Input) ou d'écriture (Output) effectuées sur le sous-système de stockage. Des valeurs élevées indiquent une activité disque significative. (Note : mentionne des I/O bufferisées et directes pour OpenVMS). 

Timestamp (Horodatage) : Indique la date et l'heure auxquelles l'étape s'est terminée. Très utile pour corréler les statistiques du journal SAS avec les données d'autres outils de surveillance système externes. 


Interprétation des Données de Performance : Identification des Goulots d'Étranglement

L'analyse des statistiques FULLSTIMER permet de diagnostiquer la nature des limitations de performance.

La Comparaison Fondamentale : Temps Réel vs. Temps CPU Total

C'est le point de départ le plus important pour le diagnostic. 

Scénario 1 : Temps Réel ≈ Temps CPU Total : Si le temps réel est proche du temps CPU total (par exemple, avec une différence inférieure à environ 15% selon ), cela suggère que l'étape est principalement limitée par la puissance de calcul disponible (CPU-bound). Le processeur travaille activement pendant la majeure partie du temps d'exécution. Dans ce cas, SAS s'exécute de manière relativement efficace compte tenu du matériel. Pour accélérer l'étape, il faudra probablement optimiser le code SAS lui-même, utiliser des CPU plus rapides, ou envisager des techniques de parallélisation. 

Scénario 2 : Temps Réel >> Temps CPU Total : Si le temps réel est significativement plus élevé que le temps CPU total (par exemple, une différence de 20%, 50% ou plus ), cela indique que le processus SAS passe une part importante de son temps en attente (wait state). Il n'est pas activement en train de calculer, mais attend qu'une ressource devienne disponible. Les causes les plus probables sont des goulots d'étranglement au niveau des entrées/sorties (I/O) ou une pression excessive 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.

Diagnostic des États d'Attente (Quand Temps Réel >> Temps CPU) : Lorsque l'analyse initiale pointe vers un état d'attente, les autres métriques FULLSTIMER aident à affiner le diagnostic :

Pression 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.
:
Rechercher des valeurs élevées pour les Page Faults (défauts de page nécessitant I/O) et surtout pour les Page Swaps. Si ces valeurs sont importantes, cela suggère que le système manque 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.
vive pour satisfaire les besoins du processus SAS, le forçant à utiliser le disque comme extension 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.
, ce qui est très lent. Corréler cela avec les statistiques Memory et OS Memory

Goulot d'Étranglement I/O : Des valeurs élevées pour les Block Input Operations et Block Output Operations indiquent une activité disque intense. Un nombre élevé de Voluntary Context Switches peut également être un symptôme, car le processus cède le CPU en attendant la fin des opérations I/O. 

Contention CPU (Système Surchargé) : Un nombre élevé et persistant d'Involuntary Context Switches suggère que le système dans son ensemble est surchargé. Le processus SAS est fréquemment interrompu non pas parce qu'il attend une ressource spécifique, mais parce que d'autres processus monopolisent le CPU. 

Analyse CPU-Bound (Quand Temps Réel ≈ Temps CPU) : Même lorsque le processus est limité par le CPU, il peut être utile d'examiner la répartition entre User CPU Time et System CPU Time. Un User CPU Time élevé indique que le temps est passé dans les algorithmes et la logique du code SAS. Un System CPU Time élevé suggère que SAS fait de nombreux appels au système d'exploitation, ce qui peut encore être lié à une gestion intensive des I/O ou 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.
, mais initiée activement par SAS plutôt qu'une simple attente passive. 

FULLSTIMER comme Point de Départ Diagnostique : Il est essentiel de comprendre que FULLSTIMER fournit des indicateurs précieux sur la performance au niveau de SAS. Cependant, pour confirmer la cause racine exacte d'un goulot d'étranglement, en particulier ceux liés au matériel (disque lent, réseau saturé, CPU insuffisant), il est souvent nécessaire de corréler ces informations avec d'autres sources. Cela peut inclure la sortie de SASTRACESASTRACE est une option système de diagnostic qui permet de tracer en temps réel les échanges entre SAS et les bases de données externes (via les moteurs SAS/ACCESS). Elle révèle les requêtes SQL exactes générées par SAS et envoyées aux systèmes sources comme Snowflake, Google BigQuery, Oracle ou Azure SQL.

Dans l'écosystème SAS Viya 4, SASTRACE est crucial pour valider l'Implicit Pass-Through : il permet de confirmer si les calculs sont bien exécutés directement dans la base de données (In-Database) ou si les données sont inutilement rapatriées vers le moteur CAS, optimisant ainsi les performances et les coûts cloud.
(pour les interactions base de données) ou, de manière plus significative, les données provenant d'outils de surveillance au niveau du système d'exploitation (comme nmon, perfmon, vmstat, iostat, etc., mentionnés dans ). FULLSTIMER guide l'investigation en indiquant et quand regarder avec ces outils plus spécialisés. 

FULLSTIMER vs. STIMER : Choisir le Bon Niveau de Détail

SAS propose également l'option STIMER, qui est souvent activée par défaut. La différence essentielle réside dans le niveau de détail fourni : 

STIMER fournit un sous-ensemble des statistiques de FULLSTIMER. Typiquement, il n'affiche que le Real Time et le (Total) CPU Time pour chaque étape. 

FULLSTIMER offre une vue beaucoup plus complète, incluant les détails 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.
, le paging, les opérations I/O, les commutations de contexte, etc.. 

Comme mentionné précédemment, si les deux options sont activées, la sortie de FULLSTIMER, plus détaillée, prévaut généralement. Le choix entre les deux dépend du besoin :

Utiliser STIMER pour : Obtenir un aperçu rapide des temps d'exécution des étapes avec un minimum d'encombrement dans le journal.

Utiliser FULLSTIMER pour : Effectuer une analyse de performance approfondie, diagnostiquer des goulots d'étranglement complexes, réaliser des benchmarks précis. 

FULLSTIMER en Action : Identification des Points Chauds et Benchmarking

Exemple 1 : Identification des Étapes Coûteuses en Ressources :

En activant OPTIONS FULLSTIMER;, le journal SAS affichera les blocs de statistiques pour chaque étape DATA et PROC. 

Il suffit de parcourir le journal et d'examiner les lignes "NOTE:... statement used (Total process time):" ou "NOTE: PROCEDURE... used (Total process time):". En comparant les valeurs de Real Time et de CPU Time (User + System) pour chaque étape, on peut rapidement identifier les "points chauds" (hotspots) – les étapes qui consomment le plus de temps d'horloge ou celles qui présentent un écart important entre le temps réel et le temps CPU, indiquant une attente significative. Cela permet de concentrer les efforts d'optimisation sur les parties les plus critiques du code. 

Exemple 2 : Benchmarking des Modifications de Code :

FULLSTIMER est un outil essentiel pour mesurer objectivement l'impact des efforts d'optimisation. Le processus typique est le suivant :

Exécuter le code original (la baseline) avec OPTIONS FULLSTIMER;.

Noter les métriques clés (Real Time, CPU Times, Memory, Page Faults, Block I/O) pour les étapes critiques que l'on souhaite améliorer.

Modifier le code SAS (par exemple, ajouter un indexStructure de données accélérant la lecture des lignes d'une table en ciblant directement les valeurs des colonnes indexées, réduisant ainsi les entrées/sorties disque et le temps de traitement. à une table avant une jointure, remplacer une jointure par une autre technique, utiliser une clause WHERE au lieu d'un IF de sous-ensemble, ajuster les options SORTSIZE ou MEMSIZE).

Réexécuter le code modifié, toujours avec OPTIONS FULLSTIMER;.

Comparer les métriques de la nouvelle exécution avec celles de la baseline pour quantifier l'amélioration (ou la dégradation) des performances. 

Pour des benchmarks fiables, il est recommandé d'exécuter chaque version plusieurs fois et de moyenner les résultats, d'utiliser des données de test réalistes en termes de volume et de complexité, et si possible, d'exécuter chaque test dans une 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 distincte pour éviter les effets de cache résiduels. 

L'utilisation de FULLSTIMER dans ce contexte fournit les données objectives nécessaires pour valider si une modification de code a réellement atteint l'objectif d'amélioration des performances, permettant des décisions basées sur des faits plutôt que sur des suppositions. 

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.