2013-01-12 5 views
5

また、SASに関する質問のためにSEネットワーク外のサイトrunsubmit.comにこの質問を掲載しました。なぜprocのアップロードが遅いですか?

私が使用するサーバーは2つあります。私がsasデータセットをproc upload経由で転送すると、約2.5MB/sになります。しかし、ネットワークドライブとして1台のサーバーにドライブをマップし、そのファイルをコピーアンドペーストすると、80MB/s(同じギガビット接続を介して)の速度がさらに速くなります。

誰もがこれを引き起こしている可能性があり、それを解決するために、または回避策として何ができるのでしょうか?

ネットワークドライブを他の2台にマップすることができない第3のサーバーもあります.SASベースのソリューションが必要なのは、SASがファイルを転送する唯一の手段です。このマシンからの個々の転送は2.5MB/sで実行されますが、2.5MB/sで複数の転送をすべて並行して行うことが可能です。

ファイル名とデータステップによるSAS FTPは、proc uploadを使用するよりも速くなりますか?私は次にこれを試してみるかもしれませんが、私はこれを使わないほうがいいと思います。私たちはSAS 9.1.3しか持っていないので、SFTPは利用できません。

アップデート - さらなる詳細:

  • 私が産卵に接続しているんだ、と私はそれが(私がログに見て思い出した内容に基づいて)「SAS独自の暗号化」を使用していますね。
  • アップロードは、Windowsクライアント - > Windowsの最初のケースではリモート、Unixのクライアント - > 2番目のケースではWindowsのリモートです。
  • 問題のSASデータセットは圧縮されています(つまり、外部圧縮ユーティリティではなくSASによって)。
  • proc uploadを使用してバイナリモードで外部ファイル(.bz2)を転送する場合の転送速度は似ています。潜在的に十分に速く、しかし -
  • すべてのサーバーは、エンタープライズクラスのコントローラ(RAIDで最小8台のドライブ10)

潜在的なソリューション

  • パラレルPROCのUPLOADで扱う非常に高速なディスクアレイを持っています非常にCPUが重い
  • PROC COPY - PROC UPLOADよりもはるかに高速で、CPUオーバーヘッドははるかに少ない
  • SAS FTP - 安全ではない、不明な速度、不明なCPUオーバーヘッド

アップデート - テスト結果

  • パラレルPROCのUPLOADは:セットアップ*とCPUの多くのかなり多くを含むが、合理的にうまく機能します。
  • PROC COPY:セッションごとにproc uploadとまったく同じ転送速度と、より多くのCPU時間が使用されます。
  • FTP:約20倍速く、最小限のCPU(100MB/s対2.5MB/sの並列procアップロード)。

は、私が最初に試してみました*以下:

ローカルセッション - >ソースサーバ上のリモートセッション - > nの転送先サーバー上のリモートセッション - >先サーバー上のn個の再結合

これによりn回の同時転送が発生しましたが、元のサーバーのCPUボトルネックが原因で、それぞれが元の速度の1/nで実行されました。それはシングル転送の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; 
+0

特に、CONNECT Spawnerやその他の方法に接続している場合は、SASサーバー環境の詳細とCONNECTの質問を更新してください。 Spawnerを使用している場合は、暗号化を使用しているかどうかを確認します。 – BellevueBob

+0

質問が更新されました - それ以外の具体的な詳細は有用でしょうか? – user667489

+0

アップロードするSASデータセットは圧縮されていますか?そして私はすべてがWindowsであると推測しています、正しいですか?あるサーバーから別のサーバーにコピーしているとしたら、サーバーAからのSAS/CONNECTセッションでサーバーBに接続しているということですか? – BellevueBob

答えて

0

FTPは、ソースサーバーから入手できる場合は、proc uploadまたはproc copyよりもはるかに高速です。これらは両方ともレコードごとに動作し、特に非常に幅広いデータセットの場合、高速ネットワーク接続を介してCPUにバインドされる可能性があります。単一のFTP転送では、使用可能な帯域幅をすべて使用しようとしますが、CPUコストはごくわずかです。

これは、宛先サーバーが変更されていない転送済みファイルを使用できることを前提としています。そうでない場合、使用可能にするのに必要な時間が、FTPの転送速度の増加を否定する可能性があります。

5
PROCのUPLOADの私の理解では、それがレコードごとのアップロードを実行していることである

いくつかの変換やチェックに加えて、いくつかの点で役立ちますが、特に高速ではありません。一方、PROC COPYは、索引や制約のようなものを維持するのに慎重ではなく、喜んでファイルをコピーします。しかし、はるかに速くなるでしょう。サーバーのファイル用にlibrefを定義するだけです。

たとえば、私は自分のサーバーにサインオンし、そのサーバーに「unix」ニックネームを割り当てます。 libname uwork server=unix slibref=work;

次に、ランダムに生成された1e7行のデータファイルを使用して、次のPROC COPYコードを実行します。それに続いて、比較のためにPROC UPLOADをRSUBMITします。

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. 

PROCのCOPYはまだないほど速いOSのコピーなどであるが、それは高速ではるかに近いです。 PROC UPLOADは実際には定期的なデータステップよりもかなり遅いですが、何らかのチェックが行われているためです。実際には、データ・ステップはデータ・セットの単純さのためにPROC COPYに匹敵します(そしておそらく、私は64Kのブロック・サイズを持っています。つまり、データ・ステップはサーバーの16Kブロック・サイズを使用しています。 )。一般的に

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 

「現実の世界の状況で、PROC COPYは、データのステップよりも高速ですが、両方はPROC UPLOADよりも高速です - あなたがいるため、あなたの状況で複雑性のprocアップロードを使用する必要がない限り、(私は決して持っていません理由はわかりましたが、私はそれが可能であることを知っています)。 SASの古いバージョンではPROC UPLOADがより必要になったと思いますが、今はほとんど不要ですが、私の経験ではハードウェアの設定がかなり限られているため、これはあなたの状況には当てはまりません。

+1

もう少し明確にするために、それぞれのRealとCPU時間の違いを見てください。それは主にディスクアクセス時間です。どちらの場合も11〜14秒です。 PROC UPLOADはCPUの注意を必要とするあらゆる種類の処理を行っているため、CPU時間が42秒とPROC COPYおよびデータステップでは2秒未満であるため、非常に遅いです。 – Joe

+0

私はprocのアップロードで消費されるCPU時間の量について疑問を抱いていましたが、ボトルネックになる可能性はあまりありませんでした。 procのコピーについて私に知らせてくれてありがとう - 私はそれを次にテストします。 私はあなたが使用している接続を最大限に活用するOSコピーを前提としています - 比較のために、あなたがprocのコピーで得た転送速度と比較して、 – user667489

+0

私は、OSのコピーは以前のテストよりやや速いと思いますが、現時点で直接テストするために自分の仕事用PCにアクセスすることはできません。私の場合、私は同じスイッチ上のNASとギガビット接続しているので、理論的には非常に高速です(私は80MB/sを得ることはできませんが、おそらくあなたのものに似ています)。 OSのコピーは必ずしも接続を最大限にするわけではありませんが、接続がHDDの転送速度よりも遅い場合を除き、心配してください。物理的なHDDの場合、それは通常最大で125MB/s程度です(そして何があっても何かを失うので、80MB/sはおそらく実際的な限界です)。 – Joe

関連する問題