我还在runsubmit.com上发布了这个问题,这是一个关于SAS相关问题的SE网络之外的网站.
在工作中我使用了2个sas服务器.当我通过proc上传将sas数据集从一个转移到另一个时,它的速度大约为2.5MB/s.但是,如果我将一台服务器上的驱动器映射为网络驱动器并将文件复制粘贴,则运行速度要快得多,大约80MB/s(通过相同的千兆位连接).
任何人都可以建议可能导致这种情况的原因以及我可以做些什么来解决它或作为一种解决方法?
还有我使用的第三台服务器无法映射另外两台网络驱动器 - SAS是唯一可用的传输文件的方法,所以我需要一个基于SAS的解决方案.虽然从这个单独传输的速度为2.5MB/s,但我发现可以并行进行多次传输,每次传输速率为2.5MB/s.
SAS FTP通过文件名和数据步骤会比使用proc上传更快吗?我可能会尝试下一步,但我不想使用它 - 我们只有SAS 9.1.3,所以SFTP不可用.
更新 - 更多细节:
潜在解决方案
更新 - 测试结果
*我最初尝试过以下方法:
本地会话 - >源服务器上的远程会话 - >目标服务器上的n个远程会话 - >重新组合目标服务器上的n个部分
虽然这导致n个同时传输,但它们每个都以原始速率的1/n运行,可能是由于源服务器上的CPU瓶颈.为了使其能够以单次传输的带宽的n倍工作,我必须将其设置为:
本地会话 - >源服务器上的n个远程会话 - 目标服务器上每个> 1个远程会话 - >在目标服务器上重新组合n个块
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;
Run Code Online (Sandbox Code Playgroud)
我对PROC UPLOAD的理解是它正在执行文件的逐个记录上传以及一些转换和检查,这在某些方面很有用,但不是特别快.另一方面,PROC COPY将很乐意复制文件,而不必过于谨慎地维护索引和约束等内容; 但它会快得多.您只需为服务器的文件定义一个libref.
例如,我登录到我的服务器并为其指定'unix'昵称.然后我在上面定义了一个库:
libname uwork server=unix slibref=work;
然后我使用随机生成的1e7行数据文件执行以下PROC COPY代码.在此之后,为了比较的目的,我还RSUBMIT一个PROC UPLOAD.
48 proc copy in=work out=uwork;
NOTE: Writing HTML Body file: sashtml.htm
49 select test;
50 run;
NOTE: Copying WORK.TEST to UWORK.TEST (memtype=DATA).
NOTE: There were 10000000 observations read from the data set WORK.TEST.
NOTE: The data set UWORK.TEST has 10000000 observations and 1 variables.
NOTE: PROCEDURE COPY used (Total process time):
real time 13.07 seconds
cpu time 1.93 seconds
51 rsubmit;
NOTE: Remote submit to UNIX commencing.
3 proc upload data=test;
4 run;
NOTE: Upload in progress from data=WORK.TEST to out=WORK.TEST
NOTE: 80000000 bytes were transferred at 1445217 bytes/second.
NOTE: The data set WORK.TEST has 10000000 observations and 1 variables.
NOTE: Uploaded 10000000 observations of 1 variables.
NOTE: The data set WORK.TEST has 10000000 observations and 1 variables.
NOTE: PROCEDURE UPLOAD used:
real time 55.46 seconds
cpu time 42.09 seconds
NOTE: Remote submit to UNIX complete.
Run Code Online (Sandbox Code Playgroud)
PROC COPY仍然不如操作系统复制快,但它的速度更接近.PROC UPLOAD实际上比常规数据步骤慢得多,因为它正在进行一些检查; 实际上,由于数据集的简单性,数据步骤与PROC COPY相当(可能是我有64k块大小的事实,这意味着数据步骤使用服务器的16k块大小,而PROC COPY可能不是).
52 data uwork.test;
53 set test;
54 run;
NOTE: There were 10000000 observations read from the data set WORK.TEST.
NOTE: The data set UWORK.TEST has 10000000 observations and 1 variables.
NOTE: DATA statement used (Total process time):
real time 12.60 seconds
cpu time 1.66 seconds
Run Code Online (Sandbox Code Playgroud)
一般来说,在'真实世界'的情况下,PROC COPY比数据步骤更快,但两者都比PROC UPLOAD更快 - 除非你需要使用proc上传,因为你的情况很复杂(我从来没有见过理由,但我知道这是可能的).我认为PROC UPLOAD在旧版SAS中更为必要,但现在基本上不需要,但鉴于我的经验在硬件设置方面相当有限,这可能不适用于您的情况.
FTP(如果可从源服务器获取)比 proc 上传或 proc 复制快得多。它们都在逐条记录的基础上运行,并且可以通过快速网络连接受 CPU 限制,特别是对于非常广泛的数据集。单个 FTP 传输将尝试使用所有可用带宽,而 CPU 成本可以忽略不计。
这假设目标服务器可以使用未修改的传输文件 - 如果不能,则使其可用所需的时间可能会抵消 FTP 增加的传输速度。
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |