28 октября 2015 г.

SAP NetWeaver 7.4: особенности конфигурации памяти

Начиная с SAP Kernel 7.40 (ядро, которое поставляется в паре с системой SAP NetWeaver 7.4), в организации памяти в SAP AS ABAP были произведены два крупных нововведения:
  • упразднение SAP Roll memory,
  • введение Zero Administration Memory Management (ZAMM) для Unix систем. 

Как я уже упоминал в этом и этом постах, SAP Roll Memory состоит из SAP Roll buffer и SAP Roll file и служит для хранения контекста пользователя (имя, полномочия, значения по умолчанию и т.д.). Схемы выделения памяти для диалогового и не-диалогового процессов (в Unix системах), описанные мной тут, выглядят следующим образом:
  • диалоговый процесс: Roll memory (1) -> Extended memory -> Roll memory (2) -> Heap memory.
  • не-диалоговый процесс: Roll memory -> Heap memory -> Extended memory.

В SAP NetWeaver 7.4 схема выделения памяти значительно упростилась:
  • диалоговый рабочий процесс: Extended memory -> Heap memory.
  • не-диалоговый рабочий процесс: Heap memory -> Extended memory.

Описание схем можно найти в SAP note # 941735 - SAP memory management system for 64-bit Linux systems

Таким образом, SAP параметры ztta/roll_area, ztta/roll_first, rdisp/ROLL_MAXFS и rdisp/ROLL_SHM были удалены (источник). Напомню, что все параметры я перечислил в этом посте.

Все данные, которые раньше хранились в SAP Roll memory, теперь хранятся в Extended Memory.

В транзакции ST02 строка с SAP Roll memory присутствует в виде рудимента (рис. 1 и 2).

Рис. 1. Основной экран транзакции ST02 в системе SAP NetWeaver 7.4.

Рис. 2. Список SAP параметров для настройки памяти в SAP AS ABAP.

В системе появился отчет RSMEMORY (запуск через транзакцию SA38/SE38) (рис. 3), который позволяет настраивать схемы выделения памяти для диалоговых и не-диалоговых рабочих процессов (схема выделения будет действовать только для текущей инстанции и только до перезапуска). Подробности тут.

Рис. 3. Отчет RSMEMORY.

Вторая большая особенность системы на базе SAP Kernel 7.4x это введение ZAMM для Unix систем. До этого момента ZAMM был доступен для систем MS Windows (я описывал тут) и для 32-х битных Linux систем (подробности тут). 

ZAMM, в данном случае, настраивается аналогичным образом. Меняем значение параметра PHYS_MEMSIZE, если необходимо (по-умолчанию, равен размеру физической памяти, установленной на сервере)(рис. 4). 

Рис. 4. Параметр PHYS_MEMSIZE.

В отличие от систем на платформе MS Windows, Extended Memory в Unix статична: 
em/max_size_MB = em/initial_size_MB = 70 % от PHYS_MEMSIZE (рис. 5 и 6).

Рис. 5. SAP параметр em/initial_size_MB.

Рис. 6. SAP параметр em/max_size_MB.

Формулы для всех параметров, значения которых рассчитываются в рамках ZAMM, можно найти в SAP note # 2085980 - New features in memory management as of Kernel Release 7.40.

Стоит отметить еще пару моментов. Как я упоминал в этом посте, внутри Extended Memory выделяют область, которая называется Extended Global Memory (сокращенно EG). Данная область определяется параметром em/global_area_MB и составляет около 5-10 % от Extended Memory (SAP note # 1514752 - Extended Global Memory configuration). Начиная с SAP Kernel 7.40, в Extended Global Memory перенесли Table Buffer, который хранит записи таблиц на уровне сервера приложений SAP. И все это хранится в Extended Memory (рис. 7).

Рис. 7. Содержимое Extended Memory в SAP AS ABAP.

Таким образом, в новой версии SAP NetWeaver Extended Memory содержит больше областей, чем в предыдущих версиях. Это означает, что при равных значениях параметра em/initial_size_MB в ранних релизах и в SAP NetWeaver 7.4, в последней может наблюдаться недостаток данной памяти для работы пользователей. Особенно следует учитывать данную деталь в случае обновления системы до версии SAP NetWeaver 7.4 с предыдущих версий. На основном экране транзакции ST02 перенос Table Buffer в EG легко прослеживается (рис. 1).

Начиная с SAP NetWeaver 7.40 SPS08 (SAP Kernel 7.42), появляется новый вид памяти - PROC/Heap Memory, который принадлежит рабочим процессам (то есть является локальным), но не содержит контекст пользователя, как Heap Memory. Лимит, определяющий максимальное количество данной памяти для всех рабочих процессов, определяется параметром em/proc_max_size_MB. Значение по-умолчанию равно 0, что означает без ограничений. При введении ограничения рекомендуется выделять по 100 Мб на рабочий процесс. 


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

  1. Добрый день, Вячеслав!
    по ссылке https://sidadm.blogspot.com/2015/09/sap-as-abap-iii.html у вас есть рисунок "Рис.2. Параметры SAP для настройки памяти" до 7.4х.( Очень информативный и замечательный рисунок- Большое спасибо Вам!).
    Хотелось увидеть этот же рисунок выше 7.4х.
    Если бы Вы добавили в этот пост, было бы наглядно.

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Спасибо за комментарий. Как только я дойду до этой темы, обязательно рассмотрю ваше предложение. :)

      Удалить
  2. Добрый день, Вячеслав,
    Спасибо большое за этот блок. Очень много интересного !

    Не могли бы вы помочь мне понять память HANA. У меня есть сервер, на котором HANA DB и SAP Application Server установлены вместе.
    На этом сервере у меня 500 ГБ оперативной памяти.

    На уровне ОС (free -m) я получаю следующий результат.
    # free -m
    total used free shared buffers cached
    Mem: 806280 801157 5122 25748 3072 368940
    -/+ buffers/cache: 429144 377135
    Swap: 24575 17 24558

    На уровне SAP (ST06) я получаю следующий результат.
    Memory: 800 GB
    Free Memory: 4 GB

    Для phys_memsize установлено 50 ГБ.


    HANA: HANA Cockpit отображается следующее:
    Used Memory: 100 ГБ
    Resident memory: 300 ГБ
    Для Allocation_memory_limit базы данных HANA установлено 478 ГБ.

    Таким образом, на самом деле в оперативной памяти должно быть 440 ГБ свободной памяти 800 (RAM) - 300 (HANA) - 50 (SAP) – OS (10GB)= 440 ГБ. Где или Для чего используются 440 ГБ оперативной памяти?

    правильно ли я понимаю, что HANA резервирует оперативную память до предела параметр global_alocation_limit ?

    Спасибо большое

    ОтветитьУдалить
    Ответы
    1. Что-то у вас не совпадают вводные. Судя по всему, на сервере 800 Гб памяти, а не 500. HANA резервирует память согласно параметру global_alocation_limit. Но Linux использует всю свободную память для файлового кеша. Поищите статью по это на блоге.

      Удалить
  3. Анонимный17.05.2022, 16:46

    Здравствуйте,
    Если я правильно понимаю, если HANA Database и Application Server установлены на одном сервере, то должны быть установлены PHYS_MEMSIZE и Global_alocation_limit.
    Как рассчитать эти параметры?
    Я запустил /SDF/HDB_SIZING. И он показал мне, что мне нужно 400 Гб памяти.

    Правильно ли я понимаю, что Global_alocation_limit =400 ГБ

    А как вырешать PHYS_MESZISE ?

    Спасибо большое

    ОтветитьУдалить
    Ответы
    1. Данная статья про управление памятью на уровне сервера приложений SAP. Про базу данных SAP HANA отдельная история. Обратитесь к SAP нотам, указанным в этой статье.

      Удалить