AMDP и перенос вычислений в базу: когда это оправдано
Как выбрать между ABAP SQL, CDS и AMDP, измерить пользу переноса вычислений и учесть границы переносимости, клиентской обработки, буферов и финансовой семантики.
4 мин чтения·База знаний
Ревизия 2Общие понятияЧастичное покрытиеКонтекст: CTX-GENERALдокументальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.
AMDP и перенос вычислений в базу: когда это оправдано#
Перенос вычислений к данным может уменьшить передачу строк и число обращений, но не является целью сам по себе. Сначала определите узкое место и требуемую семантику результата. Затем сравните самый простой вариант, который сохраняет финансовую корректность.
Выборки, фильтрации, соединения и агрегации в поддерживаемом переносимом наборе SQL
Размер выборки, выбранные поля, число запросов, ключи и клиентский контекст
CDS
Повторно используемой семантической модели, связей, аннотаций и управления доступом
Уровень строки, кратность связей, валюты и DCL для пути чтения
AMDP
Сценария, которому нужны процедуры или функции базы либо возможности, которых недостаточно в ABAP SQL
SQLScript, HANA-зависимость, клиентская обработка, полномочия, NULL/конверсии и измеренный выигрыш
SAP рекомендует ABAP SQL как основной способ работы с ABAP-managed database objects и AMDP, когда возможностей ABAP SQL недостаточно. AMDP управляется как метод ABAP-класса, но его реализация использует язык базы данных. В текущей документации AMDP поддерживает процедуры и функции SAP HANA. Такой выбор добавляет зависимость от HANA и требует учитывать правила конкретной версии и языка ABAP.
Не начинайте с переписывания ABAP SQL в SQLScript. Снимите базовую линию на представительном сценарии: время отклика, число SQL-вызовов, затронутые строки, переданный объём, ключевые операторы и использование ресурсов. Обычно помогает ограничить выбранные поля и строки, агрегировать до передачи данных и убрать запросы из циклов. Это можно сделать и средствами ABAP SQL.
Создайте сопоставимый вариант AMDP только для участка, где известна причина задержки. Запускайте старую и новую реализацию на одинаковых системе, параметрах, данных и профиле нагрузки. Повторяйте замеры, фиксируйте медиану и разброс, отдельно сравнивайте холодный и прогретый сценарий, если оба важны. Сопоставляйте не только время: результирующие ключи, состав строк, валюты, суммы и порядок обработки ошибок должны совпадать по заданному контракту.
ABAP SQL встроен в ABAP-слой: для стандартной базы он предоставляет интегрированное преобразование типов, неявную обработку клиента и взаимодействие с табличной буферизацией. SQLScript выполняет работу в базе, но автоматическое поведение этих механизмов нельзя предполагать. Проверьте явно:
фильтр клиента и безопасность доступа к данным;
DCL и полномочия, используемые фактическим потребителем;
преобразования типов, NULL и значения ABAP initial;
обход table buffer и последствия для чтения и записи;
единицу, валюту, знаки, округление, сторно и правила агрегации;
LUW и транзакционные границы, обрабатываемые ABAP-программой.
Для ABAP for Cloud Development AMDP-метод должен быть client-safe; в Standard ABAP такая маркировка не имеет того же обязательного требования, но остаётся важной для изоляции клиентов. Не выводите наличие фильтра клиента из интерфейса процедуры: проверьте реализацию и потребителя для конкретного релиза.
AMDP полезен, когда измеренное преимущество существеннее стоимости поддержки SQLScript, HANA-зависимости и отдельного тестирования. Учитывайте, кто будет сопровождать процедуру, как диагностировать её план и ошибку, как выполнить транспортирование и как сравнивать поведение после смены версии базы или модели.
Повторно используемый SQLScript может иметь собственный release contract C4 для вызова из AMDP; это отдельная цель от контракта C1 для ABAP-потребителей. Проверяйте доступность такого контракта и зависимостей в установленной системе, а не распространяйте правила на все типы объектов.
Для финансового сценария постройте набор независимых проверок: документ с несколькими позициями, разные валюты, сторно, пустое необязательное измерение, граничный период, запрещённый клиентский контекст и крупный объём. Сверьте каждую строку по бизнес-ключу, а итоги по валюте, ledger и периоду. Равенство одного общего итога недостаточно: одновременно пропущенные и продублированные строки могут его сохранить.
Описания ABAP-managed database objects и client-safe AMDP относятся к соответствующим версиям ABAP Keyword Documentation. Перед применением проверьте ограничения языка и продукта на целевом релизе. Снимки SAP-538, SAP-539, SAP-540 и SAP-541 сохранены; точные выдержки о приоритете ABAP SQL, границе применения AMDP, поддержке HANA и обходе табличного буфера сверены с источниками. AMDP, SQLScript, планы запросов и SAP runtime в этом проекте не запускались.
Moving computation closer to data can reduce row transfer and database calls, but it is not an end in itself. First identify the bottleneck and the required result semantics. Then compare the simplest option that preserves financial correctness.
Selections, filters, joins, and aggregates in the supported portable SQL feature set
Result size, selected fields, number of queries, keys, and client context
CDS
Reusable semantic models, relationships, annotations, and access control
Row detail, relationship cardinality, currencies, and DCL along the read path
AMDP
A scenario that needs database procedures/functions or capabilities beyond ABAP SQL
SQLScript, HANA dependency, client handling, authorization, NULL/conversions, and measured benefit
SAP recommends ABAP SQL as the primary way to access ABAP-managed database objects and AMDP when ABAP SQL is insufficient. AMDP is managed as a method of an ABAP class, but its implementation uses the database language. Current documentation describes AMDP procedures and functions for SAP HANA. This choice adds a HANA dependency and requires checking the rules for the specific ABAP version and language.
Do not start by rewriting ABAP SQL as SQLScript. Capture a baseline for a representative scenario: response time, number of SQL calls, rows touched, transferred volume, key operators, and resource use. Limiting fields and rows, aggregating before transfer, and removing queries from loops can often address the issue using ABAP SQL.
Create a comparable AMDP version only for a section with an identified cause. Run the old and new implementations with the same system, parameters, data, and load profile. Repeat measurements and record the median and spread; compare cold and warm scenarios separately when both matter. Compare more than elapsed time: result keys, row composition, currencies, amounts, and error handling must match the defined contract.
ABAP SQL is integrated in the ABAP layer: for the standard database it provides integrated type conversion, implicit client handling, and interaction with table buffering. With SQLScript, do not assume those mechanisms happen automatically. Check explicitly:
client filtering and data-access safety;
DCL and authorization along the actual consumer path;
type conversion, NULL, and ABAP initial values;
table-buffer bypass and the effects on reads and writes;
unit, currency, signs, rounding, reversals, and aggregation rules;
LUW and transaction boundaries handled by the ABAP program.
For ABAP for Cloud Development, an AMDP method must be client-safe. Standard ABAP has a different requirement, but client isolation remains important. Do not infer a client filter from the procedure interface: check implementation and consumer behavior for the target release.
AMDP is useful when its measured advantage outweighs the cost of maintaining SQLScript, HANA dependency, and separate testing. Consider who will support the procedure, how to diagnose its plan and errors, how to transport it, and how to compare behavior after a database or model upgrade.
Reusable SQLScript can have its own C4 release contract for calls from AMDP; this is a different purpose from C1 for ABAP consumers. Check the contract and dependencies in the installed system instead of generalizing the rule to every object type.
For a financial scenario, build independent checks for a document with multiple items, different currencies, a reversal, an empty optional dimension, a fiscal-period boundary, a disallowed client context, and a large volume. Reconcile each row by business key and totals by currency, ledger, and period. A matching grand total is not enough: omissions and duplicates can cancel each other out.
The ABAP-managed database object and client-safe AMDP guidance applies to the corresponding versions of the ABAP Keyword Documentation. Check language and product limits in the target release. Bounded snapshots of SAP-538, SAP-539, SAP-540, and SAP-541 are retained; exact excerpts about ABAP SQL priority, AMDP scope, HANA support, and table-buffer bypass were checked against the sources. This project did not execute AMDP, SQLScript, query plans, or SAP runtime.