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 配置限制了 SAS 将分配给此任务的 RAM 量。

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

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

4

2 回答 2

1

MEMSIZE 决定了您的最大内存大小,尽管还有一些其他有用的选项可供使用(SORTSIZE 应始终随 MEMSIZE 更改为 MEMSIZE 的 1/3 左右)。

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

于 2013-01-09T17:03:04.013 回答
1

确定有多少内存可供 SAS 使用

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

它给出了适合散列对象的记录数量,参见Secosky 和 ​​Bloom 的从散列对象开始。

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

NESUG 2007有一篇关于不同连接技术的好文章

如果不查看数据、代码或至少大致了解您的资源和数据是什么,则很难提供帮助或建议解决方法。

于 2013-02-01T15:21:42.950 回答