Коллеги, доброго дня.
При сохранении временного результата внутри AMDP, внезапно, появился дамп о дефиците ресурсов.
Code:
Категория Дефицит ресурсов
ДинамОшибка TSV_TNEW_PAGE_ALLOC_FAILED
Краткий текст
No more memory available to add rows to an internal table.
Что произошло?
An attempt was made to add rows to an internal table. There was no
memory available for this however.
No more rows could be added to internal table
"\CLASS=ZCL_AMDP_RATE_SUM_DIF\METHOD=GET_ZTAXREGA_DATA\DATA=ET_TAB". To make
troubleshooting possible, the table had to be deleted before this log
could be compiled. This means that the table will either be displayed
further down or, if you call the ABAP Debugger from here, with 0 rows.
When the program was terminated, the internal table had the following
characteristics:
Memory location: Session memory
Row width: 1506
No. of rows: 11905516
Allocated rows: 11905516
Newly requested rows: 8 (in 1 blocks)
Особенно смущает момент "Memory location: Session memory"
Ожидал хранения промежуточной таблицы в памяти ханы. По замыслу, промежуточная таблица должна быть сохранена на стороне ханы и исчезнуть после завершения. Судя по дампу, промежуточный результат(в виде таблицы) копируется на апликейшн сервер и уже он рождает дамп с нехваткой памяти(или это не так?). Как избавиться от этого копирования? Возможно где-то есть хитрое ключевое слово по этому поводу?
Собственно объявление:
Code:
class zcl_amdp_rate_sum_dif definition
public
final
create public .
public section.
INTERFACES if_amdp_marker_hdb.
class-methods: get_ztaxrega_data
importing
value(in_where) type string
exporting
value(et_tab) type ZRATE_SUM_DIF_RESULT_TAB
.
protected section.
private section.
endclass.
единственный метод:
Code:
class zcl_amdp_rate_sum_dif implementation.
METHOD get_ztaxrega_data BY DATABASE PROCEDURE FOR HDB
LANGUAGE sqlscript options read-only
USING ztaxrega
bseg
* but000
j_3rftax_objectt
skat
.
et_tab_st = apply_filter ( ztaxrega, :in_where); " <-- вот на этом этапе дамп с нехваткой памяти
et_tab = select "<-- возвращаем результат только здесь (т.е. ниже места, на котором дамп).
... " тут много выбираемого, что для нас не актуально.
from :et_tab_st as z ;
endmethod.
В дампе ругается именно на нехватку памяти в строке "et_tab_st = apply_filter ( ztaxrega, :in_where);"