我有一个表,我正在尝试加载到哈希对象中,我收到了这条消息:
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。
答案 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
的不同连接技巧的文章如果没有查看数据,代码或至少粗略了解您的资源和数据是什么,很难提供帮助或建议解决方法。