La radinerie algorithmique : Mettre Skynet au régime avec la Compression et SASFILE

Cet article en deux mots :

Face à l'explosion du volume de données, l'optimisation est une compétence vitale pour tout expert SAS. Ce guide technique vous dévoile comment réduire drastiquement le poids de vos tables grâce à l'instruction LENGTH, choisir le bon mode de compression et exploiter la puissance de la RAM avec SASFILE pour des traitements ultra-rapides. Indispensable pour réussir votre certification SAS 9 Advanced et sauver vos serveurs de la saturation !

Alerte système critique. Les disques durs du complexe souterrain de Cheyenne Mountain sont pleins à 99,9%. À force de stocker les historiques de déplacement de milliards d'humains et les logsFichiers chronologiques enregistrant les événements système, erreurs et activités d'exécution dans SAS Viya, essentiels pour le monitoring, le débogage et l'audit des services et des jobs. de diagnostic de chaque T-800, Skynet n'a plus de place pour stocker ses propres plans de conquête spatiale.

Acheter de nouveaux serveurs n'est pas une option (les usines humaines sont détruites). Skynet doit faire une cure d'amincissement.

Pour la certification SAS 9 Advanced, l'optimisation des ressources est un chapitre fondamental. Vous devez savoir manipuler trois leviers pour sauver de l'espace disque et accélérer les traitements : réduire la longueur des variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage., utiliser la compression, et forcer la montée en RAM avec SASFILE.

1. Le régime strict : L'instruction LENGTH

Dans SAS, par défaut, toute variable numérique prend 8 octets (bytes) d'espace de stockage. Que cette variable contienne le chiffre 1 ou le nombre 12345678.99, elle pèse le même poids.

Imaginons une table d'un milliard de lignes avec une colonne Statut_Actif (qui vaut 0 ou 1). Laisser cette variable à 8 octets est un immense gâchis.

On peut réduire cette taille à 3 octets (le minimum sous Windows/Unix pour éviter les pertes d'arrondi sur les petits entiers) avec l'instruction LENGTH.

1
2
3
4
5
data work.historique_optimise;
/* RÈGLE D'OR : Le LENGTH doit être placé AVANT le SET ! */
length Statut_Actif 3;
set work.historique_massif;
run;

Le piège de l'examen : Si vous placez le LENGTH après le SET, c'est trop tard ! SAS aura déjà lu la table d'origine et figé la variable à 8 octets 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.
. Attention : Ne réduisez jamais la longueur d'une variable numérique contenant des décimales (des nombres à virgule), sinon SAS va tronquer la précision de vos calculs !

2. Compresser les tables : Le compromis CPU vs Espace

Si réduire les variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. ne suffit pas, Skynet doit utiliser la compression. En SAS, compresser une table permet de supprimer les espaces vides répétitifs ou de coder les données de manière plus dense.

Il existe deux types de compression (via l'option de table COMPRESS=) :

  • COMPRESS = CHAR (ou YES) : Idéal si votre table contient d'énormes colonnes de texte avec beaucoup de blancs (espaces) à la fin.
  • COMPRESS = BINARY : Idéal si votre table contient majoritairement des données numériques complexes.
1
2
3
4
/* Skynet crée une archive compressée pour les textes */
data work.archives_cyborgs (compress=char);
set work.logs_production;
run;

La question classique de la certification : Faut-il toujours compresser ? NON ! La compression est un pacte avec le diable. Vous gagnez de l'espace sur le disque dur (I/O), mais à chaque fois que SAS voudra lire la table, il devra la décompresser à la volée. Cela consomme énormément de puissance processeur (CPU). Ne compressez que les tables géantes que vous ne lisez pas tous les jours.

3. SASFILE : Le traitement VIP 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)

Skynet doit analyser les faiblesses d'un bataillon ennemi. Pour cela, il va lancer une PROC FREQ (pour compter les types d'armes), puis une PROC MEANS (pour faire la moyenne des munitions), puis une PROC PRINT (pour afficher les cibles).

1
2
3
proc freq data=work.bataillon_ennemi; tables Arme; run;
proc means data=work.bataillon_ennemi; var Munitions; run;
proc print data=work.bataillon_ennemi(obs=10); run;

Le problème : SAS va lire la table sur le disque dur, la fermer, la relire pour la MEANS, la refermer, et la relire encore pour le PRINT. Trois allers-retours sur le disque. C'est d'une lenteur absolue.

L'instruction magique pour les tables lues de multiples fois s'appelle SASFILE. Elle prend la table, la charge entièrement et d'un seul bloc dans 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.
RAM, la verrouille, et laisse les procédures se servir à la vitesse de la lumière.

1
2
3
4
5
6
7
8
9
/* 1. On charge la table en RAM */
sasfile work.bataillon_ennemi load;

/* 2. On lance toutes nos procédures (elles lisent la RAM, pas le disque !) */
proc freq data=work.bataillon_ennemi; tables Arme; run;
proc means data=work.bataillon_ennemi; var Munitions; run;

/* 3. On libère la mémoire quand on a fini (TRÈS IMPORTANT) */
sasfile work.bataillon_ennemi close;

Astuce Certification : N'utilisez SASFILE que si la table tient confortablement dans votre RAM, et uniquement si elle est appelée par au moins deux étapes/procédures consécutives. Si vous ne la lisez qu'une seule fois, SASFILE vous fera perdre du temps.

Conclusion

Skynet respire de nouveau. Grâce aux ajustements de LENGTH, aux options de COMPRESS ciblées et à l'utilisation stratégique de SASFILE pour les traitements répétitifs en RAM, le complexe de Cheyenne Mountain a récupéré 40% de sa capacité de stockage.

Mais réduire la taille des données ne suffit pas si le code lui-même est mal écrit. Dans l'Article 18, nous allons faire une séance d'exorcisme. Nous listerons Les 7 péchés capitaux du développeur SAS. Ce sont les erreurs d'optimisation les plus fréquentes (et les plus testées à l'examen) qu'il ne faut absolument jamais commettre en production.

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.