Publicado el :
Macro CREATION_INTERNE

Generación de carga de trabajo para pruebas de rendimiento

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `%mp_testjob` está diseñada para probar el rendimiento o mantener una sesión activa. Inicializa una biblioteca temporal en WORK y luego entra en un bucle condicionado por la duración de ejecución deseada (parámetro `duration`). En cada iteración, genera un conjunto de datos voluminoso (1 millón de observaciones) con valores aleatorios, lo agrega a través de PROC SUMMARY, lo enriquece a través de PROC SQL y lo ordena a través de PROC SORT. Incluye una pausa de 5 segundos entre ciclos. Finalmente, limpia los conjuntos de datos y libera la biblioteca.
Análisis de datos

Type : CREATION_INTERNE


Los datos se generan algorítmicamente (función `ranuni`) dentro de la macro. Sin dependencias de datos externas.

1 Bloque de código
Macro Variable
Explicación :
Inicialización del cronómetro y creación de un espacio de trabajo temporal (carpeta y libref) único para aislar los datos de la prueba.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Generación de un conjunto de datos voluminoso (1M de líneas) que contiene números aleatorios y una cadena de caracteres repetida, sin compresión para maximizar la E/S.
¡Copiado!
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 Bloque de código
PROC SUMMARY Data
Explicación :
Ejecución de un procedimiento de estadística descriptiva para consumir CPU y memoria en los datos generados.
¡Copiado!
1PROC SUMMARY ;
2 class randnum0 randnum1;
3 OUTPUT out=&lib..&ds2;
4RUN;QUIT;
4 Bloque de código
PROC SQL Data
Explicación :
Uso de SQL para crear una nueva tabla ordenada con una columna calculada adicional, probando el rendimiento del motor SQL.
¡Copiado!
1PROC SQL;
2create TABLE &lib..&ds3 as
3 select *, ranuni(0)*10 as randnum2
4from &lib..&ds1
5order BY randnum1;
6QUIT;
5 Bloque de código
PROC SORT
Explicación :
Ordenación del conjunto de datos resultante para probar el rendimiento de la ordenación (E/S intensiva).
¡Copiado!
1PROC SORT DATA=&lib..&ds3;
2 BY descending x;
3RUN;
6 Bloque de código
DATA STEP
Explicación :
Pausa de 5 segundos en la ejecución para simular un tiempo de espera o reducir la presión continua sobre el sistema.
¡Copiado!
1DATA _null_;
2 call sleep(5,1);
3RUN;
7 Bloque de código
PROC DATASETS
Explicación :
Limpieza final: eliminación de todas las tablas creadas en la biblioteca temporal y liberación de la asignación de la biblioteca.
¡Copiado!
1PROC DATASETS lib=&lib kill;
2RUN;
3QUIT;
4LIBNAME &lib clear;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Allan Bowe