我也在runsubmit.com上发布了这个问题,这是一个在SE网络之外的SAS相关问题的网站。为什么proc上传这么慢?
在工作中有2个我使用的sas服务器。当我通过proc上传将sas数据集从一个数据库传输到另一个数据集时,速度约为2.5MB/s。但是,如果我将驱动器映射到一台服务器上作为网络驱动器并复制并粘贴文件,则运行速度会更快,大约为80MB/s(通过相同的千兆位连接)。
任何人都可以提出什么可能会导致这种情况,我可以做什么来解决它或作为一种解决方法?
另外还有第三台服务器,我无法在另外两台服务器上映射网络驱动器 - SAS是唯一可用的传输文件的方式,所以我需要一个基于SAS的解决方案。尽管从这个版本开始的单个传输速度为2.5MB/s,但我发现可以同时传输多个传输,每个传输速率为2.5MB/s。
通过文件名和数据步SAS SAS会比使用proc上传更快吗?我可能会尝试下一步,但我不想使用这个 - 我们只有SAS 9.1.3,所以SFTP不可用。
更新 - 更多细节:
- 我连接到产卵,我想它使用“SAS专有加密”(根据我记得在日志中看到的)。
- 上传内容为Windows客户端 - 第一种情况为Windows远程,第二种情况为Unix客户端 - > Windows远程。
- 所讨论的SAS数据集被压缩(即通过SAS,而不是一些外部压缩工具)。
- 使用proc upload以二进制模式传输外部文件(.bz2)时,传输速率与此类似。
- 所有服务器具有由企业级控制器(最少8个驱动器在RAID 10)
潜在的解决方案
- 并行PROC UPLOAD处理得非常快的磁盘阵列 - 潜在速度不够快,但极其重CPU
- PROC COPY - 比PROC UPLOAD快得多,CPU开销小得多
- SAS FTP - 不安全,未知速度,未知CPU开销
更新 - 测试结果
- 并行PROC上传:涉及相当多的设置*和很多的CPU,但效果相当好。
- PROC COPY:每个会话的传输速率与proc上传完全相同,使用的CPU时间也更多。
- FTP:大约20倍快,最小的CPU(100MB /秒比2.5MB/s每个并行proc上传)。
*我最初尝试以下操作:
本地会话 - >源服务器上的远程会话 - >ñ目标服务器上的远程会话 - >重组目标服务器上的n个
虽然这导致n个同时传输,但它们每个都以原始速率的1/n运行,可能是由于源服务器上的CPU瓶颈造成的。为了得到它与一个单一的传输的n倍的带宽工作,我不得不将其设置为:
本地会话 - > n个源服务器上的远程会话 - > 1远程 会话的每个目标服务器上 - >目标服务器
SAS FTP代码的重组n个
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;
请更新与SAS服务器环境的详细信息,以及如何连接您的问题,特别是如果你连接到CONNECT产卵或或其他方法。如果使用Spawner,请确定它是否使用加密。 – BellevueBob
已更新的问题 - 其他具体细节会有用吗? – user667489
您上传的SAS数据集是否已压缩?我猜测一切都是Windows,对吗?当你说你从一台服务器复制到另一台服务器时,你的意思是你正在通过服务器A的SAS/CONNECT会话连接到服务器B吗? – BellevueBob