Как да тествам пропускателната способност на IO в стъпка 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 Mb, тогава промяната на bufno и bufsize има малък ефект върху времето за изпълнение.

Много статии обаче казаха, че bufno и bufsize могат да оптимизират програмата. Може би защото изпълнявам целия код в една и съща SAS сесия, не измервам точно. Въпросът ми е: трябва ли да тествам времето за изпълнение на всеки код в отделна сесия и трябва ли да избера по-голям набор от данни?


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


Отговори (3)


BUFSIZE обикновено ще подобри производителността само когато се увеличи, ако наборът от данни е много голям и под много голям имам предвид, че има много данни в един ред в допълнение към наличието на много редове. Това, което прави, е да определя колко данни се четат с всяко преминаване; ако имате 80 байтови редове, bufsize от 4096 дори ще прочете много наблюдения, в крайна сметка. Ако имате от друга страна 2056 байтови редове, тогава 4096 страница ще съдържа само едно наблюдение; така че трябва да четете нова страница за всяко наблюдение, което е бавно.

BUFNO няма никаква стойност, освен ако не използвате SGIO, което, доколкото си спомням, обикновено не се препоръчва.

Конкретен отговор на последния въпрос: Не е необходимо да стартирате нова SAS сесия за тези опции. BUFSIZE може да има някои допълнителни предимства, ако имате по-голям набор от данни.

Като цяло бих препоръчал да търсите повече вашия код, отколкото системните опции, за да оптимизирате вашите изпълнения. Докато използвате голямо пространство в паметта (доколкото е възможно на вашата машина, поне няколко GB), вероятно няма да спечелите твърде много от бъркането със системните опции. Ако вместо това можете да премахнете няколко пропуска на данни, ще спечелите много повече.

Единственото изключение от това е SORTSIZE - задайте го на 1/3 от вашия MEMSIZE. Ако имате 2GB MEMSIZE, тогава SORTSIZE трябва да бъде 667M. Това определя колко голям набор от данни можете да сортирате в паметта и по някаква причина често е много малък.

person Joe    schedule 07.11.2012
comment
Благодаря за вашата помощ. Имам ли друг метод за подобряване на пропускателната способност на IO и подобряване на използването на memsize, тъй като чрез диспечера на задачите на Windows установявам, че програмата SAS винаги използва размер на паметта под 100M. Трябва ли MEMSIZE да бъде равен на общия размер на наличната памет? Сега компютърът ми има 32G памет. - person alen; 07.11.2012
comment
MEMSIZE трябва да е по-малко от 32G със сигурност, тъй като не искате да използвате ЦЯЛАТА памет или Windows ще се срине. SAS не използва много памет при нормална работа; но това не му пречи да използва повече, когато има нужда (до MEMSIZE). Така че, ако той виси на 100MB, но трябва да сортира набор от данни от 2GB и вашият MEMSIZE е 24GB, а вашият SORTSIZE е 8GB, той ще се разшири до 6GB, докато сортира набора от данни. - person Joe; 07.11.2012
comment
Също така BUFSIZE засяга само записите, но не и четенията от съществуващ набор от данни tune.dds_dep_pagesize16k, чийто BUFSIZE беше фиксиран при създаването му. И за целия този тест данните вероятно са в кеша на файловата система, така че размерът на I/O има малък ефект. Тестването с набори от данни, по-големи от общата налична RAM, ще покаже различни резултати. - person Nickolay; 22.11.2013

Говорейки за някаква сериозна дейност по обработка на данни, предполагам, че това винаги се извършва на някакъв дисков масив - което може да бъде много неща, но поне означава, че има няколко диска в някакъв RAID формат. Така че, за да оптимизирате SAS I/O производителността чак до дисковете, трябва да вземете под внимание технологията за съхранение.

Тук опцията BUFSIZE е полезна, за да се приведе в съответствие I/O моделът на приложението с характеристиките на хранилището. Най-честата ситуация е използването на формати RAID10 или RAID5, където данните се разпръскват между дискове на парчета с определен размер - добре е BUFSIZE да е подравнен (1:1 или кратно) с този размер на блока - или размера на лентата. Трябва да се консултирате с администратора на хранилището за този размер - няма да е нещо като 64kB и неговите кратни.

С паритетен RAID формат като RAID5, данните се разпръскват между дискове плюс паритетът се изчислява, така че е добре винаги да записвате данни на такива парчета, така че всички дискове да получават актуализацията и паритетът за тях се изчислява наведнъж (без частични актуализации).

Така че за простота, за паритетен диск можете да зададете BUFSIZE на размер на лентата, умножен по (брой дискове в масива минус 1). Като алтернатива можете да опитате да го комбинирате с BUFNO, за да постигнете кратното.

Много добър документ относно SAS I/O:Най-добри практики за конфигуриране на вашата IO подсистема за Приложения SAS 9

person vasja    schedule 09.11.2012

Не вярвам, че SAS ще докладва за I/O използването на диска. Ако приемем, че работите в Windows, ще трябва да използвате програма като Performance Monitor (Старт->Изпълни->Въведете „perfmon“) или за просто визуално изображение можете да използвате Process Explorer (който е като диспечера на задачите, но показва диск/мрежа IO и т.н. по-подробно).

IMO най-лесните начини за минимизиране на I/O са (по реда на усилията за възнаграждение):

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