SAS - 为哈希表分配最大内存

时间:2013-01-09 16:47:39

标签: sas

我有一个表,我正在尝试加载到哈希对象中,我收到了这条消息:

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配置限制了SAS将为此任务分配多少RAM。

为了强制SAS使用最大RAM量,我需要哪些设置?

在Windows XP机器上运行的独立SAS 9.3。

2 个答案:

答案 0 :(得分:1)

MEMSIZE决定了你的最大内存大小,尽管还有一些其他选项可供使用(SORTSIZE应该随MEMSIZE变化大约为MEMSIZE的1/3)。

请注意,如果您运行多个会话,MEMSIZE可能会有风险 - 如果您有4GB RAM并将MEMSIZE设置为2GB,并且打开了三个SAS会话,那么如果您尝试使用全部2GB,可能会导致系统崩溃或导致意外结果在所有三个会话中[即,如果你超过你的内存+页面文件总数],即使你没有超过你的页面文件,你可能会强制Windows使用页面文件来执行它不应该用于的任务。我通常会尝试在物理RAM的MEMSIZE数量上保持2GB +免费(所以我有16GB并使用12GB作为我的最大MEMSIZE,并且任何时候都有两个版本 - 一个BIGMEM配置12GB和一个普通的2GB配置我使用我的大多数工作都不会受益于巨大的MEMSIZE。

答案 1 :(得分:0)

确定可供SAS使用的内存量

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

它给出了适合哈希对象的记录数量,请参阅Secosky和Bloom的starting with hash objects

如果您的哈希表太宽,这就是内存不足的原因,请尝试将其分成几个较窄的表,这样它们就会适合内存,并多次执行哈希连接。它仍然可能比常规联接更快。您还可以尝试在散列连接定义中更改 DECLARE 语句的 hashexp:属性。

有一篇关于NESUG 2007

的不同连接技巧的文章

如果没有查看数据,代码或至少粗略了解您的资源和数据是什么,很难提供帮助或建议解决方法。