Teil 1: Performancekiller
Der SAS Enterprise Guide ist ein sehr intuitives und trotzdem ausgesprochen mächtiges Graphical User Interface. Neben einer kompletten Programmieroberfläche, bietet er eine Menge Point- and Click Anwendungsroutinen, durch welche man vom Einlesen von Excel-Dokumenten, über SQL-Abfragen, bis hin zu komplexen Grafiken und Vorhersagemodellierungen, mit ein paar Klicks alles erreichen kann. Aber Point- and Click bedeutet immer auch die Gefahr, dass man in Performanceengpässe läuft, weil man nicht genügend über die Funktionsweise und Hintergrundprozesse der Anwendung weiß. Hierfür habe ich in Teil 1 meiner Rubrik zwei klassische Beispiele ausgewählt.
Mehrere Enterprise Guides öffnen:
Erwischt! Sie haben eine riesige und lang dauernde Analyse gestartet und weil Ihnen die Ergebnis-Warterei zu lange dauert, haben Sie einen zweiten Enterprise Guide geöffnet um mit diesem eine weitere aufwändige Analyse loszuschicken. Nun warten Sie auf beide Ergebnisse und haben Zeit meinen Artikel zu lesen. Was ist passiert? Wenn Sie im Enterprise Guide auf "Ausführen" drücken, wird das von Ihnen erzeugte Programm auf einen externen Server geschickt. Dort wird für jeden geöffneten Enterprise Guide eine Workspace-Server Sitzung eröffnet. Das ist eine SAS-Sitzung (sas.exe), die alle vom Enterprise Guide abgeschickten Programme abarbeitet. Wenn Sie mehrere Enterprise Guides öffnen und Programme abschicken, gibt es auf dem Server mehrere konkurrierende SAS-Sitzungen. Bei älteren SAS-Versionen und Ein-Prozessor Computern, musste die zweite SAS-Sitzung warten, bis die Erste fertig ist. Heute auf Mehr-Prozessor Maschinen, mit Load-Balancing Möglichkeiten, können die verschiedenen SAS-Sitzungen auf unterschiedliche Prozessorkerne verteilt werden. Zwei Enterprise Guides machen Ihre Arbeit also tatsächlich schneller, - vorausgesetzt Sie sind der einzige Mitarbeiter Ihrer Firma. Wenn Sie sich jetzt vorstellen, dass jeder Ihrer Kollegen gerade auch an meheren Enterprise Guides arbeitet und sas.exes für sich gestartet hat, dann geht die Gesamtperformance des Servers in den Keller. Ich habe für mein Beispiel 2 Guides geöffnet und jeweils einen aufwändigen Prozess abgeschickt. Wie Sie in dem Screenshot unten sehen können , bringe ich damit meine CPU schon auf 100% Auslastung:
Cross Join:
Der größte Performance- und Raumkiller, den man momentan im Enterprise Guide findet, ist der Cross Join. Falls Sie im Menü auf den Cross Join gestoßen sind und überlegt haben, drauf zu klicken: Tun Sie es besser nicht!
Der Cross Join erzeugt ein sogenanntes Karthesisches Produkt. D.h. er berechnet alle erdenklichen Kombinationen aller Variablenausprägungen aus der linken Datei mit allen Variablenausprägungen aus der rechten Datei. Einen Cross Join sollte man nur machen, wenn die beiden Ausgangsdateien sehr klein sind. Sind die Ursprungsdateien groß, wird das Ergebnis riesig. Die Wahrscheinlichkeit, dass Sie den Ihnen zugewiesenen Speicherplatz komplett vollschreiben ist sehr hoch und natürlich dauert die Rechenoperation ausgesprochen lange.
Gejoint habe ich die beiden Dateien Order_Fact (Größe: 82 MB) und Customer_Dim (Größe: 18 MB). Nach ca. einer dreiviertel Stunde ist meine Crossjoin-Datei jetzt knappe 48 Gigabyte groß und es ist noch kein Ende in Sicht. Daher breche ich das Experiment jetzt ab und sage: Bis zum nächsten Mal bei Don't touch this!