2

ハッシュオブジェクトにロードしようとしているテーブルがあり、次のメッセージが表示されます。

ERROR: Hash object added 1703920 items when memory failure occurred.
FATAL: Insufficient memory to execute DATA step program. Aborted during the EXECUTION phase.
ERROR: The SAS System stopped processing this step because of insufficient memory.

私のコンピュータにはテーブルをロードするのに十分な予備のRAMがあり、SAS構成がこのタスクに割り当てるRAMの量を制限しているように見えます。

SASに最大量のRAMを使用させるには、どのような設定が必要ですか?

WindowsXPボックスで実行されているスタンドアロンSAS9.3。

4

2 に答える 2

1

SASで使用できるメモリの量を確認するには

data _null_;
    mem = getoption('xmrlmem');
    put mem=;
run

これは、ハッシュオブジェクトに適合するレコードの数に意味を与えます。SecoskyとBloomによるハッシュオブジェクトから始めるを参照してください。

ハッシュテーブルが広すぎてメモリが不足する理由である場合は、それをいくつかの狭いテーブルに分割して、それらがメモリに収まるようにし、ハッシュ結合を数回実行してみてください。それでも通常の参加よりも速いかもしれません。ハッシュ結合定義のDECLAREステートメントのhashexp:プロパティを変更してみることもできます。

NESUG2007とは異なる結合手法に関する素晴らしい記事があります

データやコードを確認したり、リソースやデータを大まかに把握したりしないと、回避策を支援したり提案したりするのは困難です。

于 2013-02-01T15:21:42.950 に答える
1

MEMSIZE は最大メモリ サイズを決定しますが、他にもいくつか試してみると便利なオプションがあります (SORTSIZE は常に MEMSIZE に合わせて MEMSIZE の約 1/3 になるように変更する必要があります)。

複数のセッションを実行すると、MEMSIZE が危険になる可能性があることに注意してください。4GB の RAM があり、MEMSIZE を 2GB に設定し、3 つの SAS セッションを開いている場合、3 つすべてで 2GB をすべて使用しようとすると、システムがクラッシュしたり、意図しない結果が生じる可能性があります。セッション [つまり、メモリ + ページ ファイルの合計を超えた場合]、およびページ ファイルを超えていない場合でも、Windows に使用してはならないタスクにページ ファイルを使用させる可能性があります。私は通常、物理 RAM の MEMSIZE 量の周りに 2GB+ の空き容量を確保しようとします (したがって、16GB を使用し、最大 MEMSIZE として 12GB を使用し、一度に 2 つのバージョンを使用します - 12GB の BIGMEM 構成と、私が使用する通常の 2GB 構成)巨大なMEMSIZEの恩恵を受けない私の仕事のほとんど。

于 2013-01-09T17:03:04.013 に答える