Как я могу уменьшить ЦП в операции SORT

Я использую DFSORT для копирования набора данных ленты во временный файл и обработки около 80000000 записей. Простое копирование наборов данных занимает 3 часа. есть ли другой способ уменьшить время процессора. Предложения будут очень полезны. Спасибо.

    //STEP40  EXEC SORTD                                              
    //SORTIN   DD DSN=FILEONE(0),                           
    //            DISP=SHR                                            
    //SORTOUT  DD DSN=&&TEMP,                                       
    //            DISP=(NEW,PASS,DELETE),                          
    //            DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0),               
    //            UNIT=TAPE                                           
    //SYSOUT   DD SYSOUT=*                                            
    //SYSPRINT DD SYSOUT=*                                            
    //SYSIN    DD *                                                   
         SORT FIELDS=(14,6,PD,A,8,6,PD,A,45,2,ZD,A)                   
         OUTREC IFTHEN=(WHEN=(70,18,CH,EQ,C' encoding="IBM037"'),     
                     OVERLAY=(70:C'  encoding="UTF-8"'))              
         OPTION DYNALLOC=(SYSDA,255)                                  
    /*                                                                

person NITISH SINGH    schedule 28.07.2018    source источник
comment
Действительно ли LRECL 30050 ??? и, как сказал phunsoft, его нужно записывать на ленту. Check the attributes of the input file   -  person Bruce Martin    schedule 28.07.2018
comment
да LRECL - 30050, у меня также есть дата XML в этих наборах данных   -  person NITISH SINGH    schedule 28.07.2018
comment
Является ли это recfm=FB, и если да, то должно ли это быть???   -  person Bruce Martin    schedule 30.07.2018
comment
@NITISHSINGH Это похоже на пример, который вы приводили ранее, когда вы пытались заменить IBM037 для кодировки. Является ли формат 1 xml-документом на запись?   -  person Hogstrom    schedule 07.08.2018


Ответы (3)


Несколько комментариев по улучшению производительности ввода-вывода, которые должны улучшить общее затраченное время.

  1. В своем заявлении SORTIN и SORTOUT DD добавьте следующее в свой DCB.

Из Руководства MVS JCL IBM на стр. 143.

//SORTIN   DD DSN=FILEONE(0),                           
//            DISP=SHR<b>,DCB=BUFNO=192</b>                                            
//SORTOUT  DD DSN=&&TEMP,                                       
//            DISP=(NEW,PASS,DELETE),                          
//            DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192),
//            UNIT=TAPE

Я выбрал 192, так как в наши дни он относительно дешев с точки зрения памяти. Отрегулируйте для вашей среды. По сути, это сообщает системе, сколько блоков нужно прочитать с каждым вводом-выводом, что сокращает время, связанное с операциями ввода-вывода. Вы можете играть с этим числом, чтобы получить оптимальный результат. По умолчанию 5.

BUFNO=buffers
Указывает количество буферов, которые должны быть назначены DCB. Обычно максимальное значение равно 255, но может быть меньше из-за размера области. Примечание. Не кодируйте подпараметр BUFNO с подпараметрами DCB BUFIN, BUFOUT или параметром DD QNAME.

  1. Вы можете рассмотреть размер блока. Размер блока на выходе кажется странным. Убедитесь, что он оптимизирован для устройства, которое вы собираетесь использовать. Для устройств TAPE это значение должно быть как можно больше. Для устройств 3480 или 3490 это может быть до 65535. Вы не указываете LRECL, но указываете, что это 30050, тогда вы можете указать BLKZIE 60100, что будет двумя записями на блок. Лучшая эффективность ввода-вывода.

Вот дополнительная информация о Выбор BLKSIZE для лент.


3490 Emulation (VTS)    262144 (256 KB)
3590                    262144 (256 KB) (note: on some older models the limit is  
                                               229376 (224 KB) 262144 (256 KB)
  1. Последний быстрый совет, если вы действительно используете TAPE, это указать несколько устройств TAPE. Это позволит записывать одну ленту во время монтажа следующей. Я также включил здесь пример BUFNO:

//SORTOUT DD DSN=&&TEMP, // DISP=(NEW,PASS,DELETE), // DCB=(RECFM=FB,LRECL=30050,BLKSIZE=0,BUFNO=192), // UNIT=(TAPE,2)

Конечно, эти оптимизации зависят от вашей физической среды и настройки DFSMS.

person Hogstrom    schedule 07.08.2018
comment
Спасибо за этот описательный комментарий @Hogstrom, я пробовал то же самое с советами, которые вы предоставили, но теперь каждый раз, когда я получаю WER046A SORT CAPACITY EXCEEDED - person NITISH SINGH; 14.08.2018

Я люблю диагностировать такие проблемы...

80 М записей по 30 КБ каждая — это около 2,5 ТБ, и, поскольку вы читаете и записываете эти данные, вы обрабатываете как минимум 5 ТБ (не включая ввод-вывод для рабочих файлов). Если я правильно рассчитываю, это в среднем 500 МБ/с за три часа.

Первое, что нужно сделать, это понять, действительно ли DFSORT активно работает в течение 3 часов, или есть источники времени ожидания. Например, если ваши ленты представляют собой многотомные наборы данных, может потребоваться некоторое время для подключения ленты. Ищите это в сообщениях журнала заданий — может быть, 20 минут из ваших 3 часов просто ждут, пока будут смонтированы нужные ленты.

У вас также может возникнуть проблема с использованием ЦП, увеличивающая время ожидания. В зависимости от того, как настроена ваша система, ваша работа может заключаться в том, чтобы получать только небольшой кусок процессорного времени и ждать остальное время. Вы можете определить это, посмотрев на потребляемое время ЦП (оно также указано в сообщениях журнала заданий) и сравнив его с истекшим временем... например, если ваше задание получает 1000 секунд ЦП (TCB + SRB) в течение 3 часов, вы средняя загрузка ЦП за это время составила 9%. Может случиться так, что отправка вашей работы в другой класс работы имеет значение - спросите у местного системного программиста.

Конечно, 9% процессорного времени не может быть проблемой — ваша работа, вероятно, сильно связана с вводом-выводом, поэтому большая часть времени ожидания приходится на ожидание завершения ввода-вывода, а не на ожидание дополнительного времени процессора. Что вы действительно хотите знать, так это то, связано ли ваше время ожидания с доступом к ЦП, ожиданием ввода-вывода или по какой-либо другой причине. Опять же, ваш местный системный программист должен помочь вам ответить на этот вопрос, если он знает, как читать отчеты RMF.

Следующее, что нужно сделать, — это немного лучше понять ваш ввод-вывод, чтобы уменьшить общее количество физических операций ввода-вывода, которые необходимо выполнить, и/или сделать каждый ввод-вывод немного быстрее.

Подумайте об этом так: каждый физический ввод-вывод будет занимать как минимум 2-3 миллисекунды. В худшем случае, если каждая из этих 160 миллионов записей, которые вы читаете/записываете, занимает 3 мс, истекшее время составит 160 000 000 X 0,003 = 480 000 секунд, или пять с половиной дней!

Как упоминает другой респондент, размер блока и буферизация — ваши друзья. Поскольку большая часть времени в операции ввода-вывода сводится к срабатыванию ввода-вывода и ожиданию ответа, «большой ввод-вывод» не занимает намного больше времени, чем «малый ввод-вывод». Как правило, вы хотите выполнять как можно меньше и как можно больше физических операций ввода-вывода, чтобы сократить истекшее время.

В зависимости от типа используемого лентопротяжного устройства, вы сможете получить на ленте до 256 КБ блоков — это 7 записей на ввод-вывод. Ваш BLKSIZE=0 может уже дать вам это, в зависимости от того, как настроена ваша система. Однако обратите внимание, что это зависит от устройства, и следите за тем, чтобы ваш сайт не использовал один из виртуальных ленточных продуктов, которые отображают «настоящие» ленточные накопители на диск... здесь размеры блоков, превышающие определенный предел (32 КБ), имеют тенденцию работать медленнее.

Буферизация, к сожалению, более сложна, чем предлагался в предыдущем ответе ... оказывается, BUFNO предназначен для относительно простых приложений, использующих метод доступа IBM QSAM, и это не то, что делает DFSORT. Действительно, DFSORT довольно умно выполняет операции ввода-вывода и динамически создает буферы на основе доступной памяти. Тем не менее, вы можете попробовать выполнить задание в более крупном регионе (например, REGION=0 в вашем JCL), и вы можете найти параметры DFSORT, такие как справка MAINSIZE=MAX — см. эта ссылка для получения дополнительной информации.

Что касается вашего дискового ввода-вывода (который включает в себя эти наборы данных SORTWK), здесь тоже есть много вариантов. Ваш 30K LRECL в значительной степени ограничивает то, что вы можете сделать для блокировки, но есть всевозможные упражнения по настройке диска, которые вы можете выполнить, от использования наборов данных VIO до PAV (томов с параллельным доступом). Дело в том, что многое из этого также зависит от конфигурации, поэтому правильный ответ будет зависеть от того, что есть на вашем сайте и как все это настроено.

Но, возможно, самое важное заключается в том, что вы не хотите заниматься методом проб и ошибок, пока не наткнетесь на правильный ответ. Если вы хотите учиться, ознакомьтесь с RMF или любыми другими инструментами управления производительностью, которые есть на вашем сайте (или найдите системного программиста, который готов работать с вами) и копайте. Спросите себя, в чем узкое место - почему эта работа не выполняется быстрее. ? Затем найти узкое место, исправить его и перейти к следующему. Это потрясающие навыки, и как только вы освоите основы, это перестанет казаться черным искусством и больше походит на систематический процесс, которому вы можете следовать с чем угодно.

person Valerie R    schedule 17.08.2018
comment
Подробнее по этой теме по этой ссылке stackoverflow.com/q/51840054/6943197 Я с вами решаю такие большие проблемы, как это. Я чувствую, что проблема в том, что он заблокирован, а ввод-вывод неэффективен. Предложил 2 магнитофона для улучшения возможности быстрого переключения для сокращения времени. Я не знаком с Syncsort, но в следующем посте вы увидите, что значения по умолчанию для SORTWK ужасно занижены. Люблю видеть ваши мысли с дополнительной информацией. - person Hogstrom; 18.08.2018
comment
@Hogstrom: Одна сложность здесь заключается в том, что я считаю, что Syncsort использует свой собственный драйвер IOS вместо обычного ввода-вывода, поэтому они не обязательно учитывают такие вещи, как BUFNO, как вы могли бы ожидать. BUFNO - это действительно вещь QSAM, хотя многие интеллектуальные приложения видят, что вы закодировали его, и используют его также в обработке BSAM или EXCP - на самом деле это зависит от разработчика приложения. Я думаю, что с Syncsort стратегия, которую они используют, заключается в том, сколько у меня памяти и как ее использовать наиболее эффективно?... сортировать рабочее пространство (в памяти), буферы и т. д. Таким образом, вам нужно больше, чем JCL BUFNO - вам нужны соответствующие опции СОРТИРОВКИ. - person Valerie R; 18.08.2018
comment
Это справедливо @valerie-r. Больше всего меня беспокоит ввод-вывод, на который вы указали. Характеристики LRECL и FB кажутся мне существенным узким местом. Я думаю, что переход на VB был бы гораздо более эффективным, если бы XML-документы действительно имели переменную длину. Если нет, то это то, что есть. - person Hogstrom; 18.08.2018
comment
Да, я согласен с @Hogstrom ... преобразование в VB/VBS, вероятно, было бы значительным улучшением, если фактические данные в среднем меньше, чем текущий фиксированный 30K LRECL. Конечно, сложная часть — это преобразование — мы не видели, как создаются эти записи, и, вероятно, что-то в этой части процесса нужно будет изменить. Я думаю, что ОП сказал, что это XML ... вероятно, фиксированные записи представляют собой полезную нагрузку XML, дополненную пробелами или нулями. и это нужно будет изменить только на полезную нагрузку с длиной в RDW и без каких-либо дополнений. Тем не менее, на мой взгляд, это было бы целесообразно. - person Valerie R; 20.08.2018

Поскольку вы пишете

... на выполнение уходит 3 часа...

Я предполагаю, что вы действительно хотите сократить прошедшее время, а не процессорное время. Прошедшее время зависит от многих факторов, таких как конфигурация машины, скорость машины, общая загрузка системы, приоритет вашей работы и т. д. Без дополнительной информации о среде трудно давать советы.

Однако я вижу, что вы записываете вывод сортировки во временный набор данных. Я заключаю, что есть еще один шаг для чтения этих данных. Почему вы записываете эти данные на ленту? Диск, безусловно, будет быстрее и уменьшит затраченное время.


Питер

person phunsoft    schedule 28.07.2018
comment
Да, я передаю временный набор данных на другой шаг. Один только этот шаг занимает 3 часа, так что есть ли другой способ, например, настройка или какая-либо другая утилита, чтобы сократить время выполнения? - person NITISH SINGH; 28.07.2018
comment
Можете ли вы опубликовать сообщение IEF032I для этого шага? Он расскажет нам, сколько процессорного времени было использовано за 3 часа выполнения. - person phunsoft; 28.07.2018
comment
Цитата: Только этот шаг занимает 3 часа. Это неоднозначно. Какой шаг: шаг копирования или следующий шаг? - person NicC; 30.07.2018
comment
@NicC шаг, который я упомянул выше, занимает три часа. - person NITISH SINGH; 30.07.2018
comment
@phunsoft IEF234E K A220,O82247,PVT,JHW807##,STEP40 IEF234E R A230,P68559,PVT,JHW807##,STEP40 IEF233A M A220,M59594,,JHW807##,SORTD,FORCEX.PRXM.FILE1.G0049V00 - person NITISH SINGH; 30.07.2018
comment
@NITISH SINGH - Почему вы публикуете сообщение о размонтировании? Я просил сообщение об окончании шага IEF032I. Обратите внимание, что это многострочное сообщение. - person phunsoft; 30.07.2018
comment
@phunsoft IEF032I STEP/SORTD /STOP 2018167.2236 CPU: 0 HR 05 MIN 20.44 SEC SRB: 0 HR 00 MIN 01.98 SEC VIRT: 1032K SYS: 960K EXT: 306292K SYS: 11436K ATB- REAL: 1108K Slots: ШРД: 0M - person NITISH SINGH; 01.08.2018
comment
Шаг сортировки использует только 321 секунду процессорного времени за 3 часа работы. Таким образом, если ваша машина действительно не занята, и ваша работа выполняется с дискреционной целью, я бы сказал, что в отношении использования ЦП особо нечего делать. Однако, если ваш набор данных действительно составляет 80 миллионов записей по 30050 байт каждая, это огромный набор данных (~ 2,2 ТиБ). Вы читаете это с ленты и записываете на ленту. Ваша ленточная инфраструктура может просто не справиться с таким объемом данных быстрее. - person phunsoft; 01.08.2018
comment
Сколько всего ленточных креплений? Сколько времени занимает монтирование или размонтирование? - person phunsoft; 01.08.2018