Publié le :
Macro CREATION_INTERNE

Génération de charge de travail pour tests de performance

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro `%mp_testjob` est conçue pour tester les performances ou maintenir une session active. Elle initialise une bibliothèque temporaire dans WORK, puis entre dans une boucle conditionnée par la durée d'exécution souhaitée (paramètre `duration`). À chaque itération, elle génère un jeu de données volumineux (1 million d'observations) avec des valeurs aléatoires, l'agrège via PROC SUMMARY, l'enrichit via PROC SQL, et le trie via PROC SORT. Elle inclut une pause de 5 secondes entre les cycles. Enfin, elle nettoie les datasets et libère la bibliothèque.
Analyse des données

Type : CREATION_INTERNE


Les données sont générées algorithmiquement (fonction `ranuni`) à l'intérieur de la macro. Aucune dépendance de données externe.

1 Bloc de code
Macro Variable
Explication :
Initialisation du chronomètre et création d'un espace de travail temporaire (dossier et libref) unique pour isoler les données du test.
Copié !
1%let start_tm=%sysfunc(datetime());
2%let duration=%sysevalf(&duration);
3 
4/* create a temporary library in WORK */
5%let lib=%mf_getuniquelibref();
6%let dir=%mf_getuniquename();
7%mf_mkdir(%sysfunc(pathname(work))/&dir)
8LIBNAME &lib "%sysfunc(pathname(work))/&dir";
2 Bloc de code
DATA STEP Data
Explication :
Génération d'un jeu de données volumineux (1M lignes) contenant des nombres aléatoires et une chaîne de caractères répétée, sans compression pour maximiser l'I/O.
Copié !
1DATA &lib..&ds1(compress=no );
2 DO x=1 to 1000000;
3 randnum0=ranuni(0)*3;
4 randnum1=ranuni(0)*2;
5 bigchar=repeat('A',300);
6 OUTPUT;
7 END;
8RUN;
3 Bloc de code
PROC SUMMARY Data
Explication :
Exécution d'une procédure de statistique descriptive pour consommer du CPU et de la mémoire sur les données générées.
Copié !
1PROC SUMMARY ;
2 class randnum0 randnum1;
3 OUTPUT out=&lib..&ds2;
4RUN;QUIT;
4 Bloc de code
PROC SQL Data
Explication :
Utilisation de SQL pour créer une nouvelle table triée avec une colonne calculée supplémentaire, testant les performances du moteur SQL.
Copié !
1PROC SQL;
2create TABLE &lib..&ds3 as
3 select *, ranuni(0)*10 as randnum2
4from &lib..&ds1
5order BY randnum1;
6QUIT;
5 Bloc de code
PROC SORT
Explication :
Tri du jeu de données résultant pour tester les performances de tri (I/O intensif).
Copié !
1PROC SORT DATA=&lib..&ds3;
2 BY descending x;
3RUN;
6 Bloc de code
DATA STEP
Explication :
Pause de 5 secondes dans l'exécution pour simuler un temps d'attente ou réduire la pression continue sur le système.
Copié !
1DATA _null_;
2 call sleep(5,1);
3RUN;
7 Bloc de code
PROC DATASETS
Explication :
Nettoyage final : suppression de toutes les tables créées dans la bibliothèque temporaire et libération de l'assignation de la bibliothèque.
Copié !
1PROC DATASETS lib=&lib kill;
2RUN;
3QUIT;
4LIBNAME &lib clear;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Allan Bowe