SAS: SCAPROC als CPU- und Speicherfresser

Donnerstag, 6.9.2018

ProcScaprocSch

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)
Die Empfehlung: PROC SCAPROC liefert in Entwicklungs- und Testumgebungen nützliche Daten. In produktiven Umgebungen sollte die Routine aber nicht standardmäßig mitlaufen, da die Leistung signifikant beeinflusst werden kann. Da sich das Problem ggf. erst mit wachsenden Daten zeigt, können plötzlich unerwartete Fehler auftreten, die von der Meldung her nicht auf SCAPROC hindeuten.

zurück zur Blogübersicht

Diese Beiträge könnten Sie ebenfalls interessieren

Keinen Beitrag verpassen – viadee Blog abonnieren

Jetzt Blog abonnieren!

Kommentare

Daniel Schulte

Daniel Schulte

Daniel Schulte ist Senior-Berater bei der viadee IT-Unternehmensberatung und Themenverantwortlich für den Bereich SAS. Er kümmert sich um Datenmanagement und Analytics vor allem im Banken und Versicherungsumfeld.

Daniel Schulte bei Xing