Низкая производительность из-за того, что "параллельная оценка WHERE подавлена ​​из-за порядка сортировки в таблице" и типа сжатия - PullRequest
0 голосов
/ 17 марта 2019

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

Есть ли способ переопределить это, чтобы заставить SAS использовать максимальное количество потоков ЦП для чтения этого набора данных? Порядок сортировки не важен для моих целей. Я посмотрел на параметр SPDSEV2T на http://support.sas.com/documentation/cdl/en/spdsug/67140/HTML/default/viewer.htm#n1fru1udmbaf6xn1ta8u681lp6fu.htm, но документация плохая и, похоже, ничего не делает.

Обратите внимание, что мы используем SAS 9.4.

Также обратите внимание, что это набор производственных данных, поэтому он не может перезаписать / заменить исходную таблицу, то есть он сжат в формате BINARY.

Заранее спасибо

Ниже приведен пример со статистикой и кодом:

Таблица содержит 300 миллионов строк и 870 столбцов. Размер таблицы составляет 823 ГБ с использованием сжатия CHAR. Размер таблицы составляет 638 ГБ с использованием сжатия BINARY

Шаг данных, приведенный ниже, занимает 1 час 30 минут с использованием таблицы сжатия BINARY. Похоже, что производительность в Gimped объясняется переходом в однопоточный режим по какой-то странной причине. Скорость чтения с диска = 50 МБ / с

Следующий шаг данных занимает 14 минут с использованием таблицы сжатия CHAR. Все процессоры активны на этом этапе. Скорость чтения с диска = 1000 МБ / с

При использовании fullstimer была разница между двумя методами сжатия. BINARY имеет «Операции ввода блока = 0», в то время как CHAR имеет «Операции ввода блока = 7616». Однако не уверен, что это что-то значит.

libname hs2 SPDE '/work/saswork/spde'; 

DATA table1 (KEEP=cp b pl ii ex exy fred sta n ee qwe ver pot gr pcr burb)
     table3 (KEEP=b pt cl sb n sd ed yt ta cl sb cp pcr burb)
     table2 (KEEP=b pt cl sb n sd ed yt ta cl sb cp pcr burb);
   SET hs2.bigtable_char (    
   KEEP=cp b pl ii ex exy fred sta n ee qwe ver poy gr pcr burb
        pt cl sb  sd ed yt ta
   WHERE=(cl= 'YTR' and sb = 'IYU' and cp in (2,47,101,45)));
   IF (sd <= "&end."d <= ed AND ti /*ti is a numeric variable*/ AND ta not in ('A' 'B' 'C')) THEN OUTPUT table3;
   IF (sd <= "&middle."d <= ed AND ti AND ta not in ('A' 'B' 'C')) THEN     OUTPUT table2;
   IF (fred >= "&start."d and fred <= "&end."d) THEN OUTPUT table1;
RUN;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...