PROC SCAPROC kann ein nützliches Werkzeug sein, um Programmverläufe und Datennutzung zu protokollieren und analysieren. Es gibt jedoch Bedingungen, in denen damit Jobs an CPU- und Speichergrenzen stoßen.
Die SAS-Prozedur SCAPROC eignet sich bestens dazu, Informationen über den Ablauf von SAS-Jobs zu sammeln und auszuwerten.
Die Einrichtung ist denkbar einfach:
Zu Programmbeginn wird mit
proc scaproc;
record 'SCAPROC_TEST.txt';
run;
die Protokollierung initiiert und mittels
proc scaproc;
write;
run;
werden die zwischenzeitlich gesammelten Informationen in die bei der Initialisierung definierten Datei geschrieben. Existiert der zweite Prozeduraufruf nicht, wird die Datei erst beim Ende der SAS-Sitzung geschrieben. Wird die Initialisierung z. B. per INITSTMT in die SAS-Konfiguration eingebaut, wird zu jedem SAS-Aufruf diese Protokollierung durchgeführt.
Die so gesammelten Daten lassen sich dann z. B. für Jobauswertungen oder verwendete Bibliotheken, Tabellen und Files heranziehen und so besser dokumentieren.
Wenn in Programmen jedoch viel mit Macros gearbeitet wird, kann der CPU- und Speicherbedarf signifikant in die Höhe schnellen. Zur Verdeutlichung folgendes Beispiel:
%macro test(loop);
%do i=1 %to &loop.;
data test&i.;;
set sashelp.cars;
run;
%end;
%mend test;
%test(10);
Loops | CPU / RAM ohne SCAPROC | CPU / RAM mit SCAPROC | Delta (Abs) | Delta (Rel) | |
---|---|---|---|---|---|
10 | real time (Sekunden) | 0,05 | 0,07 | 0,02 | 40,00 % |
user cpu time (Sekunden) | 0,03 | 0,04 | 0,01 | 33,33 % | |
memory (kB) | 7.905,37 | 8.094,28 | 188,91 | 2,39 % | |
OS Memory (kB) | 9.380,00 | 9.380,00 | 0,00 | 0,00 % | |
100 | real time (Sekunden) | 0,18 | 0,33 | 0,15 | 83,33 % |
user cpu time (Sekunden) | 0,12 | 0,22 | 0,10 | 83,33 % | |
memory (kB) | 7.905,37 | 8.488,62 | 583,25 | 7,38 % | |
OS Memory (kB) | 9.380,00 | 9.636.,00 | 256,00 | 2,73 % | |
1000 | real time (Sekunden) | 1,53 | 2,04 | 0,51 | 33,33 % |
user cpu time (Sekunden) | 1,05 | 1,49 | 0,44 | 41,90 % | |
memory (kB) | 7.905,37 | 12.249,84 | 4.344,47 | 54,96 % | |
OS Memory (kB) | 9.380,00 | 13.988.,00 | 4.608,00 | 49,13 % | |
10000 | real time (Sekunden) | 15,32 | 27,58 | 12,26 | 80,03 % |
user cpu time (Sekunden) | 10,55 | 21,57 | 11,02 | 104,45 % | |
memory (kB) | 7.905,37 | 50.153,75 | 42.248,38 | 534,43 % | |
OS Memory (kB) | 9.380,00 | 57.252,00 | 47.872,00 | 510,36 % |
Während bei den Ausführungen ohne SCAPROC lediglich die Laufzeit aufgrund der Ausgabemenge ansteigt, schießen die Werte mit SCAPROC förmlich durch die Decke.
Damit tauchen dann folgende Probleme auf:
- Gesteigerter Speicherbedarf
- Out-of-Memory-Fehler und Abbruch der Jobs
- Auslastung des realen Arbeitsspeichers mit der Folge, dass langsamer SWAP Space verwendet wird
- Gesteigerter CPU-Bedarf
- längere Laufzeit
- höhere Last (vor allem bei parallelen Batches)
zurück zur Blogübersicht