27 апреля 2020 г.

Фоновые задания в SAP системе - II

В первой части статьи я начал рассказ про фоновую обработку в SAP системе. Успел коснуться вопросов создания фонового задания, условий запуска и приоритетов. Также я рассказал про фоновые процессы и про организацию группы серверов для фоновой обработки. Продолжим.

Фоновое задание в системе может находится в нескольких статусах (рис. 1).

Рис. 1. Возможные статусы фонового задания.

Когда мы создаём задание в транзакции SM36 или в транзакции напрямую и ещё не указали ему условия для запуска, оно имеет статус "Запланировано". Как вы догадались, находящееся в этом статусе задание, выполняться в системе не будет. 

После того, как в задании было указано условие для запуска, оно переходит в статус "Деблокировано". На английском этот статус звучит более логично - Released. После этого планировщик заданий в SAP системе начинает видеть данное задание и может запланировать его выполнение, если условия для запуска будут выполнены.

Как только условия для запуска выполнились (например, наступили нужные дата и время), планировщик ставит задание в очередь на исполнение, меняя его статус на "Готово".

Если фоновый рабочий процесс берёт задание из очереди на исполнение, оно меняет свой статус на "Активно".

А в конце, у такого задания есть два выхода - "Завершено" в случае успешного выполнения всех шагов задания или "Отменено" в случае возникновения ошибки на каком-то этапе.

Отслеживать фоновые задания в системе можно через транзакцию SM37. На начальном экране можно задать фильтры, указав имя задания (или шаблон для имени), владельца, статус(ы) или временный период, за который мы хотим просмотреть задания (рис. 2).

Рис. 2. Пример начального экрана транзакции SM37.

Также есть возможность перейти в расширенный выбор заданий, нажав соответствующую кнопку на панели. В расширенном фильтре можно, например, дополнительно ограничить задания по целевому серверу выполнения или группе серверов. Или отдельно выбрать только периодические задания.

Деблокированное задание нельзя изменить, но как вы можете видеть на рисунке 1, такое задание можно перевести обратно в статус "Запланировано". А после этого уже внести изменения, поменяв, например, шаги задания, условия запуска или периодичность. Далее, сохранив изменения, перевести задание в статус "Деблокировано".

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

Несколько слов про планировщик фоновых заданий. 

За планирование фоновых заданий в SAP системе отвечает ABAP-программа SAPMSSY2, которая запускается периодически через фиксированные интервалы времени. Эти интервалы регулируются через SAP переменную rdisp/btctime. Интервал устанавливается в секундах. Значение по умолчанию - 60 секунд. В случае изменения значения рекомендуется выбирать из интервала 30-60 секунд. Если в текущей системе несколько инстанций, то для повышения производительности рекомендуется выставлять разные значения на разных инстанциях - например, 57, 56, 59, 60 секунд. В таком случае программа SAPMSSY2 на разных инстанциях будет срабатывать асинхронно. Что улучшит работу механизма балансировки и производительность системы фоновой обработки.

В системах основанных на SAP NetWeaver 7.0 и выше планировщик дополнительно запускается ещё и при окончании любого фонового задания. Это также повышает общую производительность системы. После окончания фонового задания, как минимум, один фоновый рабочий процесс свободен и можно на нём сразу запускать следующее задание из очереди.

Дополнительную информацию про моменты старта планировщика можно найти в SAP note 923228 - Background job scheduler: Use of processes that have become free и SAP note 1508504 - Load balancing in background processing


Часто возникает вопрос: как приостановить на время выполнение какого-то запланированного задания, а потом опять запустить выполнение?

Здесь стоит иметь ввиду, что приостановить задание, которое уже выполняется на фоновом рабочем процессе и имеет статус "Активно", нельзя. Такое задание можно только прервать с ошибкой. А в вопросе выше речь идёт о заданиях, которые находятся в статусе "Деблокировано" и могут быть запущены планировщиком согласно их расписанию. 

Ответ: найдите данное задание в транзакции SM37, выделите его и измените его статус на "Запланировано", выбрав соответствующий пункт меню (рис. 3).

Рис. 3. Пример смены статуса фонового задания с "Деблокировано" на "Запланировано".

Для активации задания необходимо выполнить обратную операцию: сменить статус на "Деблокировано", нажав на панели в SM37 соответствующую кнопку (рис. 4). А после этого в диалоговом окне подтвердить условия запуска.

Рис. 4. Пример деблокирования фонового задания.

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

Для централизованной приостановки всех фоновых заданий в системе существует отдельная программа - BTCTRNS1 (запуск через SE38). Приостановка всех фоновых заданий часто бывает нужна перед процедурой копирования или обновления (upgrade) системы. После выполнения отчёта все фоновые задания в системе имеют статус "дебл./ожид." (рис. 5).

Рис. 5. Статус фоновых заданий в системе после выполнения программы BTCTRNS1.

Для обратной активации всех фоновых заданий используется программа - BTCTRNS2.
Подробности про этот инструментарий можно найти в SAP note 37425 - Job reset for upgrade or system copy.

Ещё один интересный отчёт BTCAUX14 (присутствует в системах от SAP_BASIS 640 и свежее), который выдаёт список фоновых заданий согласно их частоте выполнения в системе в очень читабельном виде (рис. 6). Подробности в SAP note 1439806 - Listing jobs according to their frequency.

Рис. 6. Пример вывода отчёта BTCAUX14.

Дополнительно, напоминаю еще раз, в этом посте можно прочитать как выделяется память при фоновой обработке. А тут можно найти ещё один небольшой секретик про статусы фоновых заданий.

Ну и ещё можно заглянуть в SAP note 519059 - FAQ: Background processing system для получения дополнительных сведений про фоновую обработку.

Применить эту информацию на практике можно, приобретя мой курс практических заданий SAPADM 2.0. В курсе "Задание 7" из второго пакета полностью посвящено фоновой обработке.


Автор: Шиболов Вячеслав Анатольевич

4 комментария:

  1. Как штатными средствами SAP поставить задание на мониторинг, что бы при его отмене отправлялся алерт на почту?

    ОтветитьУдалить
    Ответы
    1. В SM36 при создании задания в версиях систем на базе SAP NW 7.52 и выше появляется возможность указать получателя сообщения через e-mail. Либо можно через SAP Solution Manager настроить мониторинг на выполнение фонового процесса. Больше вариантов я не вспомню.

      Удалить
  2. Анонимный10.03.2023, 07:47

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

    ОтветитьУдалить
    Ответы
    1. Добрый день! Можно создать вариант экрана, где указать, что поле с датой будет динамическим и указать плавающие значения, выбрав из предложенных. Вариантов там достаточно.
      Посмотрите, например, вот тут - https://blogs.sap.com/2012/07/24/dynamic-date-selection-in-variants/

      Удалить