Ho anche postato questa domanda su runsubmit.com, un sito al di fuori della rete SE per domande relative a SAS.Perché il caricamento proc è così lento?
Al lavoro ci sono 2 server sas che uso. Quando trasferisco un set di dati sas da uno all'altro tramite upload proc, va a circa 2,5 MB/s. Tuttavia, se mappo l'unità su un server come unità di rete e copia e incolla il file, viene eseguito molto più velocemente, circa 80 MB/s (sulla stessa connessione Gigabit).
Qualcuno potrebbe suggerire cosa potrebbe causare questo e cosa posso fare per risolverlo o come soluzione alternativa?
C'è anche un terzo server che non posso mappare le unità di rete sugli altri due: SAS è l'unico mezzo disponibile per trasferire file da quello, quindi ho bisogno di una soluzione basata su SAS. Sebbene i singoli trasferimenti da questo vengano eseguiti a 2,5 MB/s, ho scoperto che è possibile avere diversi trasferimenti tutti in parallelo, ognuno a 2,5 MB/s.
L'FTP SAS tramite nomi di file e un passaggio di dati sarebbe più veloce rispetto all'utilizzo di upload proc? Potrei provare a farlo successivamente, ma preferirei non utilizzarlo - abbiamo solo SAS 9.1.3, quindi SFTP non è disponibile.
Update - Ulteriori dettagli:
- Sto connessione a uno spawner, e penso che utilizza 'SAS crittografia proprietaria' (in base a quello che ricordo di aver visto nei log).
- I caricamenti sono client Windows -> Windows remoto nel primo caso e Unix client -> Windows remoto nel secondo caso.
- I set di dati SAS in questione sono compressi (ad esempio SAS, non alcuni programmi di utilità di compressione esterna).
- La velocità di trasferimento è simile quando si utilizza il caricamento proc per trasferire file esterni (.bz2) in modalità binaria.
- Tutti i server sono array di dischi molto veloci gestite dai controller di livello enterprise (minimo 8 dischi in RAID 10)
possibili soluzioni
- parallelo PROC caricamento - potenzialmente abbastanza veloce, ma estremamente pesante per CPU
- PROC COPY - molto più veloce di PROC UPLOAD, molto meno sovraccarico della CPU
- FTP SAS - non sicuro, velocità sconosciuta, sovraccarico della CPU sconosciuta
Update - i risultati dei test
- parallelo PROC upload: comporta un bel po 'di messa a punto * e un sacco di CPU, ma funziona ragionevolmente bene.
- COPIA PROC: esattamente la stessa velocità di trasferimento per sessione del caricamento proc e molto più tempo di utilizzo della CPU.
- FTP: circa 20 volte più veloce, CPU minima (100 MB/s contro 2,5 MB/s per upload proc parallelo).
* Inizialmente ho provato quanto segue:
sessione locale -> sessione remota sul server di origine -> n sessioni remote sul server di destinazione -> Riunire n pezzi sul server di destinazione
Sebbene ciò abbia comportato n trasferimenti simultanei, ognuno di essi ha funzionato a 1/n della velocità originale, probabilmente a causa di un collo di bottiglia della CPU sul server di origine. Per farlo funzionare con n volte la larghezza di banda di un singolo trasferimento, ho dovuto configurarlo come:
sessione locale -> n sessioni remote sul server di origine -> 1 remota sessione ciascun sul server di destinazione - > ricombinare n pezzi sul server di destinazione codice
SAS FTP
filename source ftp '\dir1\dir2'
host='servername'
binary dir
user="&username" pass="&password";
let work = %sysfunc(pathname(work));
filename target "&work";
data _null_;
infile source('dataset.sas7bdat') truncover;
input;
file target('dataset.sas7bdat');
put _infile_;
run;
Si prega di aggiornare la domanda con i dettagli sugli ambienti server SAS e il modo in cui si COLLEGA, soprattutto se ci si connette a uno spawner CONNECT o ad altri metodi. Se si utilizza uno spawner, scoprire se sta usando la crittografia. – BellevueBob
Domanda aggiornata: quali altri dettagli specifici sarebbero utili? – user667489
I set di dati SAS che si stanno caricando sono compressi? E sto indovinando tutto è Windows, corretto? E quando dici che stai copiando da un server a un altro, intendi che ti connetti al server B con una sessione SAS/CONNECT dal server A? – BellevueBob