28 января 2016 г.

Буферизация таблиц на уровне сервера приложений SAP - I

Как я уже писал, для увеличения быстродействия каждая SAP инстанция использует механизм буферизации. Группа буферов хранит скомпилированные ABAP-loads программ, экраны, определения таблиц и полей, временные данные. Это позволяет существенно ускорить выполнение программ на уровне сервера приложений.

Вы уже знаете, что буферы на уровне сервера приложений SAP подразделяются на системные, буферы для объектно-ориентированных приложений и табличные. ABAP-программы читают данные из таблиц системы и, последний класс буферов, табличные, позволяет на порядок снизить время обращения к данным. Следует различать буферизацию таблиц на уровне базы данных и на уровне серверов приложений (рис. 1).

Рис. 1. Буферизация таблиц в SAP системе.

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

На уровне сервера приложений SAP выделяют три типа буферизации:
  • Полная буферизация - при первом обращении к данным таблицы, всё её содержимое копируется в Table buffer. Стоит учитывать, что для манданто-зависимых таблиц, выборка будет производится только по ключу текущего манданта. Используется только для маленьких таблиц.
  • Буферизация по ключу (Generic area buffering) - в этом случае, устанавливается количество ключевых полей, по которым будут копироваться данные в буфер. 
  • Буферизация единичных записей (Single record buffering) - каждая запрашиваемая запись отдельно буферизируется на уровне SAP инстанции. Используется только при SQL-запросе, содержащем слово "SINGLE". Например, "SELECT SINGLE * FROM TABL01 WHERE ...". При запросе несуществующих записей, создает записи об этом, что сокращает время работы и нагрузку на базу данных при повторных запросах.

Буферизация настраивается для каждой SAP таблицы в отдельности. На экран настройки можно попасть через транзакцию SE11 (на панели кнопка "Technical Settings") (рис. 2) или напрямую в транзакции SE13.

Рис. 2. Переход на экран настройки буферизации для таблицы.

Буферизация таблицы может быть запрещена (рис. 3), разрешена и активирована по ключу (рис. 4), по отдельным записям или полная (рис. 5).

Рис. 3. Пример не разрешенной буферизации SAP таблицы.

Рис. 4. Пример настройки буферизации по одному ключевому полю.

Рис. 5. Пример полной буферизации SAP таблицы.

С технической стороны буферизация SAP таблиц реализована в виде двух буферов в оперативной памяти сервера приложений AS ABAP (рис. 6).

Рис. 6. Два вида табличных буфера SAP инстанции.

Мониторинг использования осуществляется в транзакции ST02. Каждый буфер имеет размер и максимальное количество записей (рис. 7).

Рис. 7. Табличные буферы в транзакции мониторинга буферов, ST02.

Настройка осуществляется через параметры SAP инстанции, которые можно найти, нажав в верхней панели основного экрана транзакции ST02 кнопку "Current parameters" (рис. 8).

Рис. 8. Параметры SAP Table Buffers.

При мониторинге следует руководствоваться рекомендациями:
  • Точность Generic Key Buffer должна быть не ниже 95 % (в идеале 99 %).
  • Если для Single Record Buffer не наблюдается появление swaps, то точностью можно пренебречь.

Буферизацию стоит активировать при следующих условиях:
  • данные в таблице редко изменяются,
  • к данным в таблице идёт частое обращение,
  • таблица меньше 1 Мб,
  • в большинстве случаев доступ производится по первичному ключу,
  • таблица хранит настроечные данные. 

Настройки буферизации для стандартных таблиц следует изменять только при прямой рекомендации в SAP нотах. При активации буферизации для таблиц клиента следует проанализировать объем буферов, при необходимости, скорректировав их размер.

При использовании следующих SQL-операндов буферизация не используется (Code Inspector предупреждает при проверки кода программы):
  • SELECT ... BYPASSING BUFFER,
  • SELECT FOR UPDATE,
  • SELECT DISTINCT,
  • сортировка ORDER BY не по первичному ключу,
  • использование функций вида: MIN, MAX, COUNT, SUM, AVG,
  • когда условие WHERE содержит IS NULL или IS NOT NULL,
  • Native SQL запросы.

В следующем посте будут освещены методы анализа проблем в буферизации таблиц на уровне сервера приложений SAP.


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


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

  1. Добрый день!

    Скажите, для чего указывается в тех.парам.настройки таблицы параметр Катег.Размера? Будет ли влиять на скорость чтения записи из таблицы, если в ней содержится 30 миллионов записей, а "ожидаемых записей" указано - от 50 до 200 тысяч?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Я не встречал нигде упоминания, что выбор поля "Size Category" оказывает влияние на производительность. Выбор данного параметра на этапе создания таблицы позволяет БД наращивать таблицу экстентами, которые точнее удовлетворят темпам роста таблицы в будущем. То есть, если таблица категории 4, то наращивать ее надо экстентами не по 100 Кб.

      Вопрос производительности надо решать на другом уровне. Точно не в этом параметре. А, например, в трассировке чтения из таблицы реальными SELECT-ами или анализе реального хранения таблицы уже после её роста в табличном пространстве.

      Удалить