この質問は、SAS関連の質問のためにSEネットワーク外のサイトであるrunsubmit.comにも投稿しました。
職場では、私が使用している2つのsasサーバーがあります。proc uploadを介してsasデータセットを一方から他方に転送すると、約2.5MB/秒になります。ただし、1台のサーバー上のドライブをネットワークドライブとしてマップし、ファイルをコピーして貼り付けると、(同じギガビット接続で)約80MB/秒というはるかに高速に実行されます。
誰かがこれを引き起こしている可能性があり、それを修正するために、または回避策として私ができることを提案できますか?
他の2つのネットワークドライブをマップできない3番目のサーバーもあります。SASはそのサーバーからファイルを転送する唯一の利用可能な手段であるため、SASベースのソリューションが必要です。これからの個々の転送は2.5MB/秒で実行されますが、複数の転送をすべて並行して実行することが可能であり、それぞれが2.5MB/秒であることがわかりました。
ファイル名とデータステップを介したSASFTPは、procアップロードを使用するよりも高速ですか?次に試してみるかもしれませんが、これは使用したくありません。SAS9.1.3しかないため、SFTPは使用できません。
更新-詳細:
- 私はスポナーに接続していますが、「SAS独自の暗号化」を使用していると思います(ログで確認したことを思い出します)。
- アップロードは、最初のケースではWindowsクライアント-> Windowsリモートであり、2番目のケースではUnixクライアント->Windowsリモートです。
- 問題のSASデータセットは圧縮されています(つまり、外部の圧縮ユーティリティではなく、SASによって)。
- proc uploadを使用して外部ファイル(.bz2)をバイナリモードで転送する場合の転送速度は同様です。
- すべてのサーバーには、エンタープライズグレードのコントローラー(RAID 10では最低8台のドライブ)によって処理される非常に高速なディスクアレイがあります。
考えられる解決策
- Parallel PROC UPLOAD-十分に高速である可能性がありますが、CPUに非常に負荷がかかります
- PROC COPY-PROC UPLOADよりもはるかに高速で、CPUオーバーヘッドがはるかに少ない
- SAS FTP-安全ではない、速度が不明、CPUオーバーヘッドが不明
更新-テスト結果
- Parallel PROC UPLOAD:かなり多くのセットアップ*と多くのCPUが必要ですが、かなりうまく機能します。
- PROC COPY:セッションごとの転送速度はprocアップロードとまったく同じであり、使用されるCPU時間ははるかに長くなります。
- FTP:約20倍高速で、最小のCPU(100MB/秒対並列プロシージャアップロードあたり2.5MB/秒)。
*私は最初に以下を試しました:
ローカルセッション->ソースサーバーでのリモートセッション->宛先サーバーでのn個のリモートセッション->宛先サーバーでのn個の部分の再結合
これによりn回の同時転送が発生しましたが、おそらくソースサーバーのCPUボトルネックが原因で、それぞれが元のレートの1/nで実行されました。1回の転送のn倍の帯域幅で動作させるには、次のように設定する必要がありました。
ローカルセッション->ソースサーバーでのn個のリモートセッション->宛先サーバーでそれぞれ1個のリモートセッション->宛先サーバーでn個の部分を再結合
SASFTPコード
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;