Unsere Lösungen,
ob Start-Up oder etabliertes Unternehmen

Business Process Management

Java

Testautomatisierung

Agile Methoden

Mobile- und Weblösungen

Business-Intelligence

vivir

IT-Sicherheit

Künstliche Intelligenz

viadee Themen

In unserem Blog finden Sie Fachartikel, Success-Stories, News, Messeberichte und vieles mehr... vor allem aber hoffentlich wertvolle Informationen, die Ihnen in Ihrem konkreten Projekt und in Ihrem Business weiterhelfen. Bei Fragen und Anregungen nehmen Sie gerne Kontakt zu uns auf. Bitte benutzen Sie dazu die Kommentarfunktion unter den Blogbeiträgen.

SAS: SCAPROC als CPU- und Speicherfresser

06.09.18 12:56

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.

ProcScaprocSch 

 

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.

Jetzt Blog abonnieren!
zum Blog
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