Warum dauert es länger, bis SAS ein Dataset aus einer Datenschrittansicht erstellt, z. B. sashelp.vcolumn
im Vergleich zur entsprechenden SQL-Tabelle dictionary.columns
?Leistung von SASHELP-Ansichten im Vergleich zu SQL-Dictionary-Tabellen
Ich habe einen Test mit fullstimer
gemacht und es scheint meinen Verdacht auf Leistungsunterschiede zu bestätigen.
option fullstimer;
data test1;
set sashelp.vcolumn;
where libname = 'SASHELP' and
memname = 'CLASS' and
memtype = 'DATA';
run;
proc sql;
create table test2 as
select *
from dictionary.columns
where libname = 'SASHELP' and
memname = 'CLASS' and
memtype = 'DATA';
quit;
Ein Auszug aus dem Protokoll:
NOTE: There were 5 observations read from the data set SASHELP.VCOLUMN.
WHERE (libname='SASHELP') and (memname='CLASS') and (memtype='DATA');
NOTE: The data set WORK.TEST1 has 5 observations and 18 variables.
NOTE: DATA statement used (Total process time):
real time 0.67 seconds
user cpu time 0.23 seconds
system cpu time 0.23 seconds
memory 3820.75k
OS Memory 24300.00k
Timestamp 04/13/2015 09:42:21 AM
Step Count 5 Switch Count 0
NOTE: Table WORK.TEST2 created, with 5 rows and 18 columns.
NOTE: PROCEDURE SQL used (Total process time):
real time 0.03 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 3267.46k
OS Memory 24300.00k
Timestamp 04/13/2015 09:42:21 AM
Step Count 6 Switch Count 0
Der verwendete Speicher ein wenig höher für SASHELP ist aber der Unterschied nicht sehr groß ist. Beachten Sie die Uhrzeit - es ist 22 mal länger mit Sashelp als mit dem SQL-Wörterbuch. Sicherlich kann es nicht nur an dem relativ geringen Unterschied in der Speichernutzung liegen.
Auf Vorschlag von @ Salva übermittelte ich den Code erneut in einer neuen SAS-Sitzung, dieses Mal den SQL-Schritt vor dem Datenschritt ausführen. Die Speicher und Zeitunterschiede sind sogar noch ausgeprägter:
| sql | sashelp
----------------+-----------+-----------
real time | 0.28 sec | 1.84 sec
user cpu time | 0.00 sec | 0.25 sec
system cpu time | 0.00 sec | 0.24 sec
memory | 3164.78k | 4139.53k
OS Memory | 10456.00k | 13292.00k
Step Count | 1 | 2
Switch Count | 0 | 0
Können Sie Ihre SAS-Sitzung zu schließen, wieder öffnen SAS-Datei, die Reihenfolge der Ausführung ändern (PROC SQL zuerst, dann Daten Schritt-Programm) und poste die Ergebnisse. (Ich weiß die Antwort nicht, aber es wird interessant sein zu sehen). – Salva
@Salva: Bearbeitet. Danke für den Vorschlag. Die Ergebnisse sind in der Tat interessant. –
Schöner Fund. Ich werde es selbst testen, da ich festgestellt habe, dass die Leistung von sashelp, wenn Sie eine große Anzahl von Tabellen/Spalten (Zehntausende) innerhalb Ihrer definierten Libnamen haben, tendenziell abnimmt. Könnte versuchen, sie progressiv hinzuzufügen und sie zeitlich zu steuern, um zu sehen, ob die Leistung des Wörterbuchs in irgendeiner Weise beeinflusst wird. Vielleicht ist der Wörterbuchansatz "schlauer" und beschränkt seine Untersuchungen auf genau die Dateien, von denen er weiß, dass sie gelesen werden müssen ... –