3

システム オプションが効果的にデータ セットを改善できるbufnoかどうかをテストしたい。bufsize

テストコードは次のとおりです。

    options bufno=1  bufsize=16k;
    %atstart;
    data target.dds_dep_pagesize16k;
        set tune.dds_dep_pagesize16k(obs=2000000);
    run;
    %atend;

    options bufno=100  bufsize=32k;
    %atstart;
    data target.dds_dep_pagesize16k;
        set tune.dds_dep_pagesize16k(obs=2000000);
    run;
    %atend;
    ...
    ...

%atstart%atendそれらの間のプログラムの実行時間を計算するために使用されます。

データ セットのサイズが約 800 Mb の場合、bufnoとの変更bufsizeは実行時間にほとんど影響しません。

ただし、多くの論文が述べbufnoておりbufsize、プログラムを最適化できます。おそらく、同じ SAS セッション内ですべてのコードを実行しているため、正確に測定していません。私の質問は次のとおりです。各コードの実行時間を個別のセッションでテストする必要がありますか?また、より大きなデータ セットを選択する必要がありますか?

4

3 に答える 3

4

通常、BUFSIZE は、データセットが非常に大きい場合にのみパフォーマンスを向上させます。非常に大きいとは、多くの行があるだけでなく、1 つの行に多くのデータがあることを意味します。これが行うことは、各パスで読み取られるデータの量を決定することです。80 バイトの行がある場合、bufsize が 4096 であっても、多くの観測データを読み取ることができます。一方、2056 バイトの行がある場合、4096 ページには 1 つの観測のみが含まれます。そのため、観測ごとに新しいページを読み取る必要があり、これは遅いです。

BUFNO は、SGIO を使用していない限り、何の価値もありません。私が思い出す限り、SGIO は一般的に推奨されていません。

最後の質問に対する具体的な回答: これらのオプションのために新しい SAS セッションを開始する必要はありません。より大きなデータセットがある場合、BUFSIZE には追加の利点がある場合があります。

一般に、実行を最適化するには、システム オプションではなくコードを調べることをお勧めします。大きなメモリ空間 (あなたのマシンで可能な限り、少なくとも数 GB) を使用している限り、システム オプションをいじってもあまり多くを得ることはないでしょう。代わりに、いくつかのデータ パスをなくすことができれば、さらに多くのことを得ることができます。

これに対する 1 つの例外は SORTSIZE です。MEMSIZE の 1/3 に設定してください。MEMSIZE が 2GB の場合、SORTSIZE は 667M にする必要があります。これにより、メモリ内で並べ替えることができるデータセットの大きさが決まりますが、何らかの理由で非常に小さいことがよくあります。

于 2012-11-07T06:54:21.710 に答える
0

SAS がディスク I/O の使用状況を報告するとは思えません。Windows で実行していると仮定すると、Performance Monitor などのプログラムを使用する必要があります ([スタート] -> [実行] -> [perfmon] を入力)、または単純なビジュアルの場合は、Process Explorer (タスク マネージャーに似ていますが、ディスクを表示します) を使用できます。 /network IO などの詳細)。

IMO I/O を最小限に抑える最も簡単な方法は次のとおりです (報酬を得るために努力する順):

  1. 圧縮を使用する
  2. (ジョーが示唆するように)プログラムがデータを解析する回数を最小限に抑えます(複数のステップが必要な場合は、中間ステップにビューを使用することを検討してください)
  3. 変数が必要以上に長くないことを確認してください。不要な変数を削除します。
于 2012-11-07T18:27:45.460 に答える