【发布时间】:2012-12-26 23:37:42
【问题描述】:
我还在runsubmit.com 上发布了这个问题,这是一个 SE 网络之外的站点,用于解决 SAS 相关问题。
在工作中,我使用了 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 不可用。
更新 - 更多详情:
- 我正在连接一个生成器,我认为它使用“SAS 专有加密”(基于我记得在日志中看到的内容)。
- 在第一种情况下,上传是 Windows 客户端 -> Windows 远程,在第二种情况下是 Unix 客户端 -> Windows 远程。
- 有问题的 SAS 数据集已压缩(即通过 SAS,而不是某些外部压缩实用程序)。
- 使用 proc upload 以二进制模式传输外部文件 (.bz2) 时,传输速率相似。
- 所有服务器都有由企业级控制器处理的非常快速的磁盘阵列(RAID 10 中至少 8 个驱动器)
可能的解决方案
- 并行 PROC UPLOAD - 速度可能足够快,但 CPU 非常密集
- PROC COPY - 比 PROC UPLOAD 快得多,CPU 开销要少得多
- SAS FTP - 不安全、未知速度、未知 CPU 开销
更新 - 测试结果
- 并行 PROC 上传:涉及大量设置* 和大量 CPU,但运行良好。
- PROC COPY:每个会话的传输速率与 proc 上传完全相同,而且使用的 CPU 时间要多得多。
- FTP:大约快 20 倍,CPU 最少(100MB/s 对比 2.5MB/s 每个并行 proc 上传)。
*我最初尝试了以下方法:
本地会话 -> 源服务器上的远程会话 -> 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;
【问题讨论】:
-
请更新您的问题,详细说明 SAS 服务器环境以及您如何连接,尤其是当您连接到 CONNECT Spawner 或其他方法时。如果使用 Spawner,请确定它是否使用加密。
-
问题已更新 - 还有哪些其他具体细节有用?
-
您上传的 SAS 数据集是否已压缩?我猜一切都是Windows,对吗?当您说您正在从一台服务器复制到另一台服务器时,您的意思是您正在使用服务器 A 的 SAS/CONNECT 会话连接到服务器 B?
-
我在以前的公司工作时也注意到了这一点。我们停止使用
proc upload并开始使用 FTP 传输数据集。我只是认为有很多与之相关的开销,就像使用proc复制数据集一样。在 SAS 中执行此操作将比仅通过操作系统复制花费的时间长很多倍。