Как я уже
писал, для увеличения быстродействия каждая 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.
Автор:
Шиболов Вячеслав Анатольевич