Skip to content

SYSTEM_NO_ROLL

The roll area for context switching between work processes is exhausted.

The SAP kernel could not roll out (save) the current program context because the roll area is full. The roll area holds program contexts while their work process is reassigned to another user between screen steps or RFC calls.

Symptom

ST22 shows:

Runtime Errors         SYSTEM_NO_ROLL
Short text             Not enough roll space (SYSTEM_NO_ROLL).

This dump can affect a single user with a very large program context, or appear system-wide under heavy load.

Cause

The roll area size is controlled by rdisp/ROLL_MAXFS (default: several hundred MB to a few GB depending on SAP release). It fills up when:

  • A single program allocates an unusually large amount of local data (very large internal tables in subroutines/methods).
  • Deep call stacks with large local variable frames accumulate context.
  • Many concurrent user sessions each hold substantial context across screen transitions.
  • Memory leaks in long-running sessions that are never properly freed.

Difference from MEMORY_NO_MORE_PAGING

Both are roll/page area issues but MEMORY_NO_MORE_PAGING = paging pool. SYSTEM_NO_ROLL = roll pool. In practice, the fix approach is the same — reduce memory footprint and check system sizing.

Fix

Immediate (operational)

  1. Check SM50 for sessions with large roll memory. Cancel problematic sessions.
  2. Contact Basis to check rdisp/ROLL_MAXFS and increase if undersized for the workload.

Code-level fixes

" Free large internal tables when no longer needed
CLEAR lt_big_table.
FREE lt_big_table.

" Avoid passing large tables by value — use CHANGING or TABLES
" Bad: large table copied on every call
METHODS process_data IMPORTING it_data TYPE ty_big_table.

" Better: pass by reference (no copy)
METHODS process_data IMPORTING it_data TYPE REF TO ty_big_table.

Move large data processing to background jobs:

" Dialog programs should not hold millions of rows in memory
" across screen transitions. Fetch fresh from DB when needed.
" Use background jobs for bulk operations.

Prevention

  • Avoid passing large internal tables BY VALUE — use IMPORTING ... TYPE REF TO or CHANGING to pass by reference.
  • FREE large tables as soon as they are no longer needed, especially before a CALL SCREEN or LEAVE TO SCREEN.
  • Process large datasets in background jobs, not dialog sessions.
  • Monitor roll area with ST02 (Buffer Statistics).

See also

Comments