Inspite, of there being more than 3% of space in the table buffer, upon calling a t-code AL12 and selecting "Monitor -> Buffers -> Table Buffer -> Overview", one can view a large number of displaced objects. In the object overview ('Monitor -> Buffers -> Table Buffer -> All Generic Tables', all of these objects are exhibited as 'displcd'). The developer traces can be seen with messages of the following type:
B itab_load_cb(): exception DbSqlExcOutOfMemory caught, returning -1
B db_load_into_buffer(): dbsl_rc = 31, abort loading due to memory exhausted
With the introduction of SAP_BASIS 7.40, the process of saving the objects in the table buffer was moved over to the internal tables, and object management was not altered for the most part. While the process for the placement of a generic area or table into storage in the buffer, initially a continuous memory area of 16 KB is essential. The reason for this is as we don’t yet know how enormous will the data to be stored is once the internal table is created. While loading, incase it is found out that more memory is required than 16 KB, then the size of the internal buffer table is increased as per the demand.
Incase, it is found that that the initial memory requirement was very high, which follows the successful loading of all data to be buffered, then the internal table size is optimized and memory that is not required is released.
In the case of table buffers, which have a quite a large number of object directory entries and comparatively small buffers, fragmentation occurs in the buffer as a result. In few circumstances, extremely small generic areas cannot be loaded into the buffer, in spite of display in the overview indicating that several MB are free in the buffer.
For deriving an approximate indication of fragmentation, call transaction AL12 and select "Monitor -> Buffers -> Table Buffer -> Shared Memory". The free blocks are then indicated with the ID <free>. The overall size of the free space (in KB) and the number of blocks are output (with the corrections delivered in SAP Document 2243084 and 2248618, alongwith the sizes of the free blocks and the number of blocks of this size are output, too, upon double clicking these. Incase, there are many free blocks along with little free memory, the configured size of the buffer maybe very small.
In general, it is always suggested not configure more than max. 1,500,000 directory entries. If there are directories which have to be configured, then the used kernel should contain the corrections from SAP Document 2267717.
For an approximate guidance value, one should make around 6 KB of buffer space which is available per directory entry. Which would refer that 100,000 directory entries, at least 600 MB would be required.
The recommended profile parameters for this sample would thus be:
- rsdb/tbi_dir_entries =100000
- rsdb/tbi_buffer_area_MB = 600
Increasing the size of the table buffer without increasing the number of objects in the buffer (directory entries). Observe SAP Documents 2103827 and 2223682 here. The buffer following the change and adjust the parameters again if necessary should be checked.