Würde das Überschreiben des vorhandenen SAS-Datasets länger dauern?

8

Ich habe eine kurze Frage - Wenn wir ein SAS-Dataset say - Sample.sas7bdat erstellen, das bereits existiert, wird der Code mehr Zeit für die Ausführung benötigen (weil der Code das vorhandene Dataset überschreiben muss) als in diesem Fall Datensatz war nicht schon da?

%Vor%

Ich habe im Internet recherchiert, konnte aber keine befriedigende Antwort finden. Für mich scheint es, als würde der Code ein bisschen mehr Zeit in Anspruch nehmen, obwohl ich nicht sicher bin, wie stark er sich auf einen 10-GB-Datensatz auswirkt.

    
NEOmen 08.12.2014, 10:54
quelle

3 Antworten

5

Das könntest du ziemlich leicht selber testen. Ein paar Vorbehalte:

  • Stellen Sie sicher, dass Sie über einen Datensatz verfügen, der groß genug ist, damit Sie die Unterschiede bei der einfachen zufälligen CPU-Aktivität nicht übersehen. 100 + MB ist normalerweise ein gutes Ziel.
  • Stellen Sie sicher, dass Sie den Test mehrmals durchführen - je mehr, desto besser, ohne Zeit dazwischen, wenn möglich. Ein Test wird immer ungenügend sein und wird immer dazu tendieren, das erste Dataset als schneller zu zeigen, da er vom Schreib-Caching profitiert (im Grunde sagt das Betriebssystem, dass es fertig geschrieben hat, wenn es nicht geschrieben ist, sondern einfach in den Speicher eingereiht hat).

Hier ist ein Beispiel für meinen Test. Dies ist ein 100 Millionen Zeilen-Datensatz mit zwei 8-Byte-Zahlen, also 1,6 GB.

Zuerst die Ergebnisse. Ich sehe ein paar Sekunden Unterschied. Warum? Beim Ersetzen eines Datensatzes nimmt SAS einige Operationen vor:

%Vor%

Auf einigen Betriebssystemen scheint dies schneller zu sein als andere; Ich habe festgestellt, Windows-Desktop ist ziemlich langsam darüber, im Vergleich zu Unix oder sogar Windows Server OS, die ziemlich schnell ist. Ich schätze, Windows ist vorsichtiger beim Löschen als einfach einen Dateisystemzeiger zu ändern, aber ich weiß es nicht wirklich. Es ist sicherlich nicht die gesamte Datei aus dem Dienstprogramm-Verzeichnis kopieren (es ist nicht annähernd genug Zeit dafür). Ich vermute auch, dass das Schreiben-Caching den neuen Datensätzen immer noch ein wenig Auftrieb verleiht, zumal die Zeit für alle -Datensätze wächst, während ich schreibe. Der Unterschied ist wahrscheinlich nur ungefähr eine Sekunde oder so - der Unterschied zwischen _REP Iteration 2 und _NEW Iteration 3 erscheint mir am vernünftigsten.

%Vor%

Beachten Sie, dass die erste neue Iteration viel schneller ist als die anderen, und die Gesamtzeit nimmt mit der Zeit zu (da das Schreib-Caching immer weniger Schritt halten kann). Ich vermute, wenn Sie zulassen, dass es fortfährt (oder eine noch größere Datei verwendet, für die ich gerade keine Zeit habe), sehen Sie möglicherweise noch konsistentere Zeiten. Ich bin mir auch nicht sicher, was mit dem Schreib-Caching passiert, wenn eine Datei, die im Cache zwischengespeichert wurde, gelöscht wird. Es ist möglich, dass es darauf wartet, dass das Schreib-Caching auf den Datenträger geschrieben wird, bevor der Löschvorgang oder etwas Ähnliches ausgeführt wird. Sie könnten einen Test durchführen, bei dem Sie zwischen "NEW" und "_REP" 30 Sekunden gewartet haben, um dies zu überprüfen.

Der Code:

%Vor%     
Joe 08.12.2014, 16:39
quelle
3

Beim Überschreiben sind mehr Dateioperationen beteiligt. Nach dem Erstellen der Tabelle löscht SAS die alte Tabelle und benennt die neue um. In meinen Tests dauerte dies 0,2 Sekunden zusätzliche Zeit.

    
Stig Eide 08.12.2014 13:02
quelle
1

In einem kurzen Test dauerte mein 800Mb-Datensatz 4 Sekunden, um neu zu erstellen, und 10-15 Sekunden, um ihn zu überschreiben. Ich gehe davon aus, dass dies darauf zurückzuführen ist, dass SAS das vorhandene Dataset beibehalten muss, bis Datastep die Ausführung abgeschlossen hat, um die Datenintegrität zu erhalten. Aus diesem Grund erhalten Sie möglicherweise folgende Meldung im Protokoll:

%Vor%

Überschreibtest

%Vor%

Neuer Datentest

%Vor%

Der einzige Unterschied zwischen den Protokollnachrichten ist real time , was für mich bedeuten würde, dass SAS Dateisystemoperationen für die Dataset-Dateien verarbeitet.

NB. Ich habe dies auf der SAS Proprietary Software Release 9.4 TS1M2 getestet, die ich online durch SAS Studio laufe. Ich denke, es ist ein Linux-Betriebssystem, die Ergebnisse können je nach Betriebssystem variieren.

    
mjsqu 08.12.2014 11:44
quelle

Tags und Links