Как проверить пропускную способность ввода-вывода на шаге SAS DATA?

Я хочу проверить, могут ли системные опции bufno и bufsize улучшить набор данных.

Вот тестовый код:

    options bufno=1  bufsize=16k;
    %atstart;
    data target.dds_dep_pagesize16k;
        set tune.dds_dep_pagesize16k(obs=2000000);
    run;
    %atend;

    options bufno=100  bufsize=32k;
    %atstart;
    data target.dds_dep_pagesize16k;
        set tune.dds_dep_pagesize16k(obs=2000000);
    run;
    %atend;
    ...
    ...

%atstart и %atend используются для вычисления времени выполнения программы между ними.

Если размер набора данных составляет около 800 Мб, то изменение bufno и bufsize мало влияет на время выполнения.

Однако во многих документах говорится, что bufno и bufsize могут оптимизировать программу. Возможно, из-за того, что я запускаю весь код в одном сеансе SAS, я не могу точно измерить. У меня вопрос: должен ли я тестировать каждое время выполнения кода в отдельном сеансе и нужно ли выбирать больший набор данных?


person alen    schedule 07.11.2012    source источник
comment
Необходимость использования большего набора данных полностью зависит от размера набора данных, который вы будете обрабатывать в производственной среде.   -  person JustinJDavies    schedule 20.08.2014


Ответы (3)


BUFSIZE обычно улучшает производительность только при увеличении, если набор данных очень большой, и под очень большим я подразумеваю большое количество данных в одной строке в дополнение к большому количеству строк. Что он делает, так это определяет, сколько данных считывается при каждом проходе; если у вас есть 80-байтовые строки, размер буфера 4096 даже будет считывать множество наблюдений, в конце концов. С другой стороны, если у вас есть 2056-байтовые строки, то страница 4096 будет содержать только одно наблюдение; поэтому вам нужно читать новую страницу для каждого наблюдения, что медленно.

BUFNO не имеет никакой ценности, если вы не используете SGIO, что, насколько я помню, обычно не рекомендуется.

В конкретном ответе на последний вопрос: для этих параметров нет необходимости запускать новый сеанс SAS. BUFSIZE может иметь дополнительные преимущества, если у вас большой набор данных.

В общем, я бы рекомендовал больше смотреть на ваш код, а не на системные параметры для оптимизации ваших прогонов. Пока вы используете большой объем памяти (насколько это возможно на вашем компьютере, по крайней мере, пару ГБ), вы, вероятно, не выиграете слишком много от возни с системными параметрами. Если вместо этого вы сможете исключить несколько проходов данных, вы получите намного больше.

Единственным исключением является SORTSIZE — установите его равным 1/3 от вашего MEMSIZE. Если у вас 2 ГБ MEMSIZE, то SORTSIZE должно быть 667M. Это определяет, насколько большой набор данных вы можете отсортировать в памяти, и по какой-то причине он часто очень мал.

person Joe    schedule 07.11.2012
comment
Спасибо за вашу помощь. Есть ли у меня другой способ улучшить пропускную способность ввода-вывода и улучшить использование memsize, потому что через диспетчер задач Windows я обнаружил, что программа SAS всегда использует размер памяти менее 100 МБ. Должен ли MEMSIZE равняться общему доступному объему памяти? Теперь у моего компьютера 32 ГБ памяти. - person alen; 07.11.2012
comment
MEMSIZE точно должен быть меньше 32G, так как вы не хотите использовать ВСЮ память, иначе Windows выйдет из строя. SAS не использует много памяти в обычном режиме; но это не мешает ему использовать больше, когда это необходимо (вплоть до MEMSIZE). Таким образом, если он занимает 100 МБ, но ему нужно отсортировать набор данных размером 2 ГБ, а ваш MEMSIZE равен 24 ГБ, а SORTSIZE — 8 ГБ, он расширится до 6 ГБ по мере сортировки набора данных. - person Joe; 07.11.2012
comment
Также BUFSIZE влияет только на запись, а не на чтение из существующего набора данных tune.dds_dep_pagesize16k, чей BUFSIZE был исправлен при его создании. И для всего этого теста данные, вероятно, находятся в кеше файловой системы, поэтому размер операций ввода-вывода не имеет большого значения. Тестирование с наборами данных, превышающими общий объем доступной оперативной памяти, покажет другие результаты. - person Nickolay; 22.11.2013

Говоря о любой серьезной обработке данных, я предполагаю, что это всегда происходит на каком-то дисковом массиве - что может быть много, но, по крайней мере, это означает, что есть несколько дисков в каком-то формате RAID. Таким образом, чтобы оптимизировать производительность ввода-вывода SAS вплоть до дисков, необходимо учитывать технологию хранения.

Здесь опция BUFSIZE оказывается полезной для согласования шаблона ввода-вывода приложения с характеристиками хранилища. Наиболее распространенная ситуация — использование форматов RAID10 или RAID5, где данные распределены по дискам кусками определенного размера — хорошо, чтобы BUFSIZE выровнялся (1:1 или кратно) с этим размером блока — или размером полосы. Вы должны проконсультироваться с администратором хранилища по поводу этого размера - он не будет примерно 64 КБ и его кратным.

В формате RAID с контролем четности, таком как RAID5, данные распределяются по дискам плюс вычисляется четность, поэтому полезно всегда записывать данные в такие фрагменты, чтобы все диски получали обновление, а четность для них вычислялась сразу (без частичных обновлений).

Поэтому для простоты для диска с четностью вы можете установить BUFSIZE на размер полосы, умноженный на (количество дисков в массиве минус 1). В качестве альтернативы вы можете попробовать объединить его с BUFNO, чтобы добиться кратности.

Очень хороший документ по вводу-выводу SAS: Рекомендации по настройке подсистемы ввода-вывода для Приложения SAS 9

person vasja    schedule 09.11.2012

Я не верю, что SAS будет сообщать об использовании дискового ввода-вывода. Предполагая, что вы работаете в Windows, вам придется использовать такую ​​программу, как Performance Monitor (Пуск-> Выполнить-> Введите «perfmon») или для простого визуального представления вы можете использовать Process Explorer (который похож на диспетчер задач, но более подробно показывает дисковый/сетевой ввод-вывод и т. д.).

IMO самые простые способы минимизировать ввод-вывод (в порядке вознаграждения):

  1. использовать сжатие
  2. (как предлагает Джо) минимизировать количество раз, когда ваша программа анализирует данные (рассмотрите возможность использования представлений для промежуточных шагов, если необходимо несколько шагов)
  3. убедитесь, что ваши переменные не длиннее, чем нужно. Отбросьте все ненужные переменные.
person Robert Penridge    schedule 07.11.2012
comment
Спасибо. Я установил опцию сжатия. Затем я обнаружил, что одна страница может содержать больше наблюдений, даже если obslen очень длинный по сравнению с BUFSIZE. - person alen; 08.11.2012