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.

My computer has sufficient spare RAM to load the table, it just appears as though my SAS configuration is limiting how much RAM SAS will allocate to this task.

Какие настройки мне нужны, чтобы заставить SAS использовать максимальный объем ОЗУ?

Автономный SAS 9.3 работает в Windows XP.

1
nl ja de

2 ответы

MEMSIZE определяет ваш максимальный размер памяти, хотя есть несколько других вариантов, которые могут быть полезны для игры (SORTSIZE всегда должен меняться с MEMSIZE, чтобы он составлял около 1/3 MEMSIZE).

Обратите внимание: если вы запускаете несколько сеансов, MEMSIZE может быть рискованным - если у вас 4 ГБ оперативной памяти и установите MEMSIZE на 2 ГБ, и вы откроете три сеанса SAS, вы можете свернуть систему или вызвать непреднамеренные результаты, если попытаетесь использовать все 2GB во всех трех сессий [т. е. если вы превысите свою память + общий файл страницы], и даже если вы не превзойдете файл своей страницы, вы можете заставить Windows использовать файл страницы для задач, для которых он не должен использоваться. Обычно я пытаюсь сохранить 2 ГБ + бесплатно по объему физической памяти MEMSIZE (поэтому у меня есть 16 ГБ и я использую 12 ГБ в качестве своего максимального MEMSIZE и имею две версии, идущие в любой момент - конфигурацию BIGMEM с 12 ГБ и обычную конфигурацию 2 ГБ, которую я использую для большей части моей работы, которая не принесет пользы от огромного MEMSIZE.

1
добавлено
Похоже, что memsize является виновником, но он по-прежнему не ведет себя так, как ожидалось. Мониторинг использования mem с помощью taskmgr или processexplorer. Я вижу, что sas не будет выделять более 1 ГБ для процесса, даже если у меня есть memsize, установленный в 2Gb и> 2Gb.
добавлено автор Robert Penridge, источник

Чтобы определить, сколько памяти у вас доступно для использования SAS

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

это дает смысл количеству записей, которые вписываются в хэш-объект, см. начиная с хэш-объектов от Secosky и Bloom.

Если ваша хеш-таблица слишком широкая, и именно по этой причине у вас закончилась нехватка памяти, попробуйте разбить ее на несколько более узких таблиц, чтобы они вписались в память и несколько раз выполнили хеш-соединение. Он по-прежнему может быть быстрее обычного соединения. Вы также можете попробовать изменить свойство hashexp: оператора DECLARE в определении хэш-соединения.

There is a nice article about differnt joining techniques from NESUG 2007

Не видя данных, кода или не имея хотя бы приблизительного представления о том, какие у вас ресурсы и данные, трудно помочь или предложить обходной путь.

0
добавлено