11 января 2016 г.

SAP Program buffer

Общие сведения про буферизацию на уровне SAP инстанции я описывал в этом посте:

Продолжим.

Исполняемую часть ABAP стека SAP системы можно разделить на 2 компоненты:
  • ядро (SAP Kernel), написанное на языке C++, 
  • программы, написанные на языке ABAP.

SAP Kernel представляет собой набор исполняемых файлов зависимых от платформы, на которой работает текущая SAP система. Под платформой подразумевается связка "архитектура сервера - операционная система - база данных". Например, "сервер HP PA_RISC 64 bit - ОС HP-UX 11.31 64 bit - БД ORACLE 11g".
Поддерживаемые платформы для каждой SAP системы можно найти в PAM (подробности в этом посте).

ABAP программы поставляются в виде исходных кодов и хранятся в таблицах базы данных. Для примера можно посмотреть таблицу REPOSRC - это основная таблица для исходных кодов программ.

В SAP есть своя внутренняя нумерация платформ (в данном случае, версия базы данных не учитывается). Платформу текущей системы можно найти, если в SAP GUI перейти в пункт меню "System -> Status" (рис. 1).

Рис. 1. Платформы SAP систем.

Для того, чтобы рабочий процесс SAP инстанции ("ABAP процессор") мог выполнить код ABAP программы, необходимо для неё сгенерировать ABAP load. ABAP loads генерируются для каждой платформы (Platform ID). Если программа ни разу не запускалась в данной SAP системе или текущий ABAP load был сгенерирован для другой платформы, то при запуске программы будет затрачено время на автоматическую генерацию ABAP load, а в строке состояния будет соответствующее сообщение (рис. 2).

Рис. 2. Генерация ABAP program load.

Обычно SAP система работает на одной платформе, но в случае гетерогенной среды, когда сервера приложений расположены на разных платформах, генерируемый объём ABAP loads будет выше, так как в системе будут одновременно храниться ABAP loads для разных платформ.

Возможна централизованная массовая генерация ABAP loads с помощью SAP Load Generator (транзакции SGEN). Подробности можно найти в справке или в SAP note # 481548 - Mass generation for new load format.

Рабочий процесс считывает ABAP loads из специального буфера SAP инстанции, который называется Program bufferProgram Execution Area (сокращенно PXA) или просто ABAP buffer. Буферизация позволяет существенно снизить время доступа к программам при выполнении. Все SAP буферы создаются в рамках одной инстанции.

Рабочие процессы могут считывать ABAP loads только из этого буфера. Если место в буфере заканчивается, то последний используемый load удаляется (для выборки используется алгоритм LRU). Такое удаление фиксируется, как swaps.

Мониторинг программного буфера осуществляется посредством транзакции ST02 (рис. 3).

Рис. 3. Мониторинг Program Buffer в ST02.

По двойному щелчку на строку с именем буфера можно посмотреть детали (рис. 4).

Рис. 4. Детальная информация по Program Buffer в ST02.

Если нажать последовательность кнопок "Buffered objects -> PXA buffer technical", то можно увидеть список ABAP loads, содержащихся в буфере (рис. 5).

Рис. 5. Список программ в Program Buffer.

Большинство программ имеют небольшой размер (до 8 Кб), но потенциальный размер всех ABAP loads SAP системы может быть очень большим (несколько Гб). Поэтому, не смотря на большой размер PXA буфера (например, 1000 Мб), могут наблюдаться swaps. При невозможности увеличить размер буфера допускается до 10 000 swaps в день. Такое количество swaps не приводит к сильному провалу производительности системы.

За размер буфера отвечает один параметр - abap/buffersize (рис. 6). Размера буфера указывается в Кб, а максимальное количество объектов в буфере (Directory Size) рассчитывается как четвертая часть от размера. Например, при размере буфера 640 000 Кб, Directory Size - 160 000 (рис. 3).

Рис. 6. Параметры настройки Program Buffer.

Точность буфера (HitRatio) должна быть не меньше 95 %, иначе вырастет доля "load and generation time" во времени отклика системы. Точность может уменьшаться при импорте новых исходников ABAP программ (особенно, при импорте пакетов поддержки или апгрейде системы) или при смене платформы, на которой работает SAP система. 

Так как Program buffer очень важен для производительности системы, существует механизм сохранения точности при перезапуске системы. В случае выключения системы текущий список программ сохраняется в специальный файл (pxanew) в рабочей директории инстанции (/usr/sap/<SID>/<instance_name>/work). На случай аварийного останова системы есть файл pxastat в той же директории. При старте SAP системы считывается список программ из локального файла и происходит наполнение Program buffer. Подробности можно найти в SAP нотах 23642 - Description of pxanew and pxastat и 1122370 - Only a few programs loaded in PXA after server start.

Еще пара тематических SAP нот:



7 комментариев:

  1. Смысл предложения: "Существует следующая рекомендация: при невозможности содержать буфер большого размера при работе с многими компонентами системы, до 10 000 swaps в день допустимо, так как не приводит к сильному провалу производительности системы..." утек. Может как-то перефразировать, а? Ну типа, "..допускается до ... swaps в день, при невозможности... и т.д."

    ОтветитьУдалить
  2. Вячеслав добрый день. "Но в случае гетерогенной среды, когда сервера приложений расположены на разных платформах". Я вроде как слышал, что такой сценарий не поддерживается SAP. То есть, работать-то может, но SAP откажется от поддержки такой системы, если узнает ) Или это относиться только к ландшафту DEV > QAS >PRD ?

    ОтветитьУдалить
  3. Добрый день, Игорь. Всё работает. Про не поддержку я не слышал. Там есть свои нюансы, но, думаю, что проблемы с поддержкой быть не должно. Это относится именно к одной системе. CI + DIs на разных платформах.

    ОтветитьУдалить
  4. Анонимный28.09.2018, 09:42

    В какой области выделяется abap/buffersize, в extended memory или отдельно?

    ОтветитьУдалить
    Ответы
    1. Отдельно. Extended memory используется не для хранения буферов.

      Удалить